1、写在前面
tcpdump是Linux里的字符界面的数据抓包分析软件,用tcpdump抓到的数据包可以使用绝大多主流分析软件进行分析,例如wireshark。
安装:
sudo apt-get install tcpdump
版本查看和命令简要说明:
tcpdump -help
2、常用参数
示例
tcpdump -i eth0 -nn -s0 -v -w 1111.pcap
-i : 指定监控的网卡,通常是以太网卡或无线网卡,也可以是 vlan 或其他特殊接口。如果该系统上只有一个网络接口,则无需指定。
可以使用tcpdump -D
查看所有网卡,当不知道用哪个时,也可以使用any:tcpdump -i any -nn -s0 -v host 10.20.30.80
来捕获所有网卡上的数据。
-nn : 单个 n 表示不解析域名,直接显示 IP;两个 n 表示不解析域名和端口。这样不仅方便查看 IP 和端口号,而且在抓取大量数据时非常高效,因为域名解析会降低抓取速度。
-s0 : tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。
-v : 使用 -v,-vv 和 -vvv 来显示更多的详细信息。
-w 写入文件(默认放置在当前文件夹)
还可以使用如下参数:
-A:例如:
tcpdump -A -s0
表示使用 ASCII 字符串打印报文的全部数据,这样可以使读取更加简单,方便使用 grep 等工具解析输出内容。-X 表示同时使用十六进制和 ASCII 字符串打印报文的全部数据。这两个参数不能一起使用。
-r: 例如
tcpdump -r 1111.pcap
-r用于读取写入文件
-c:指定抓包数量
指定抓取2个数据包:tcpdump -c 2
-l:行缓冲模式
如果想实时将抓取到的数据通过管道传递给其他工具来处理,需要使用 -l 选项来开启行缓冲模式(或使用 -c 选项来开启数据包缓冲模式)。使用 -l 选项可以将输出通过立即发送给其他命令,其他命令会立即响应。
tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'
3、条件过滤
示例:
tcpdump -i any -nn -s0 -vvv -X host 10.20.30.70 and 10.20.30.80 and port 443 -w 1232.pcap
1、host:指定需要监听的主机。
tcpdump host 10.20.30.80
注:若使用了host参数使用了计算机名或域名。例tcpdump host shi-pc ,则无法再使用-n选项。
同样,可以指定源地址和目的地址
源地址:tcpdump src 10.20.30.80
目的地址:tcpdump dst 10.20.30.80
2、port:指定端口
tcpdump port 80
使用portrange参数,用于指定端口范围。tcpdump tcp portrange 1-1024
同样也可以使用tcpdump src port 8080
和tcpdump dst port 8080
3、过滤协议
tcpdump udp
支持指定以下协议:「ip,ip6,arp,tcp,udp,wlan」等。
4、net:过滤网段
tcpdump net 192.168.1
也可以使用tcpdump src net 10
tcpdump dst net 10
4、支持的逻辑表达式
&&、and、or、||、not、!
示例:
tcpdump not tcp port 22 and host "(192.168.1.112 or 192.168.1.113)"