tcpdump的学习
正文
在Linux下抓包需要使用tcpdump命令,本文就主要对该命令进行一个简单的学习与总结。
简介
tcpdump是一个抓包工具。它能够监听、记录通过某一个主机进出的网络流量。并且可以保存到文件,或者再从文件读取抓下来的数据包。它保存下来的包也可以导入到wireshark里面,利用gui工具进行查看。当然非常重要的一点是,抓取的时候能够设置各种各样的过滤器,在海量数据里寻找有用信息。
使用
首先,使用tcpdump要使用root登录或者sudo权限,且在使用时如果不加任何参数,它会抓网络设备中第一个设备的包(不包括lo),并且打印出每个包的简短信息。
- -nn:tcpdump遇到协议号或者端口号时,不将这些号码转换成对应的协议名称或者端口名称。比如,21端口是FTP端口,我们希望直接显示21,而非FTP。
- -x:告诉tcpdump命令,需要把协议头和包内容都原原本本的显示出来(tcpdump会以16进制和ASCII的形式显示),这在进行协议分析时是绝对的利器。
- -t:输出不打印时间戳
- -c:设置抓取的包的个数
- -s:限定包的大小,默认每个包存68bytes。加上-s选项,调整这个参数。
指定协议
常用协议包括tcp、udp、icmp等,使用方法:
tcpdump tcp
总共可指定的协议如下:
- ether——链路层协议
- fddi——链路层协议
- tr——链路层协议
- wlan——链路层协议
- ppp——链路层协议
- slip——链路层协议
- link——链路层协议
- ip
- arp
- rarp
- tcp
- udp
- icmp
- ip6
- radio
文件
- -w:将抓到的包写入文件,文件格式为.cap
- -r:从文件中读取数据
指定网卡
- -i:可以指定网卡,其中 -i any表明监听所有网卡
运算符
当设置的过滤条件过多时,可以使用运算符来将多个过滤条件合在一起使用。
- and “与”运算符,使用and 或者 &&
- or “或”运算符,使用or 或者 ||
- not “非”运算符,使用not 或者 !
host
- host:只抓取经过该host的数据
port
- port:只抓取目的端口或源端口的数据
src dst
- src:指定数据源地址
- dst:指定数据发送的目标地址
示例
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port !22 and src net192.168.1.0/24 -w ./target.cap
# tcp: 数据报类型,必须放在最前面
# -i:只抓取经过网卡eth1的数据
# -t:不显示时间戳
# -s 0:抓取数据包时默认抓取长度为68字节,设置为0可抓取到完整的数据包
# -c 100:只抓取前100个包
# dst port !22:抓取除22端口外的所有数据包
# src net 192.168.1.0/24:数据包的源地址为192.168.1.0/24
# -w ./target.cap:将抓取到的数据保存到cap文件中,方便使用wireshark查看
评论
0 评论