tcpdump 是一个linux下的抓包工具,基于libpcap。基础的命令如下:
tcpdump -i interface proto-dir-type-filterExpr -w savefile
其中 -i
后面的参数是网络接口,-w
后面是要保存的文件名。
整个抓包命令的关键,就是写一个过滤表达式,拿到你需要的包。
tcpdump 还有很多其他命令,但我基本不用所以本文不介绍。
基于场景的过滤表达式
过滤表达式的一般规则:
- 包括:协议、方向、类型三个元素
- 协议:tcp、udp、arp、ip 等
- 方向:src、dst、src and dst、src or dst 等
- 类型:地址、端口等
基于协议过滤
- 抓 tcp/udp/arp/ip 包
tcpdump -i eth0 tcp/udp/arp/ip -w savefile
基于 IP 地址过滤
- 抓本机和主机 A 之间的包
tcpdump -i eth0 host A -w savefile
- 抓源地址是主机 A 的包
tcpdump -i eth0 src host A -w savefile
- 抓目的地址是主机 A 的包
tcpdump -i eth0 dst host A -w savefile
- 抓某一个子网络的包
tcpdump -i eth0 net A -w savefile
基于端口过滤
- 抓源端口是 80 的包
tcpdump -i eth0 src port 80 -w savefile
- 抓目的端口是 80 的包
tcpdump -i eth0 dst port 80 -w savefile
- 抓端口 sport 和 dport 之间的包
tcpdump -i eth0 src port sport and dst port dport -w savefile
- 抓端口范围 6000 - 8000 的包
tcpdump -i eth0 portrange 6000-8000 -w savefile
其他
- 查看过滤表达式帮助文档
man pcap-filter
- 找出抓包的interface, 比如:本机的回环 lo 或者其他
tcpdump -D
- 限制抓包数量,比如:抓100个包就停止
tcpdump -c 100
- 限制从一个包中截取的字节数
# 针对每一个包,截取开头多少个字节
# 目的是:限制抓包大小,提高后续分析效率;
# 分析网络问题,很多时候只要一个包头就够了,内容是不需要的
tcpdump -s 80
- 查看丢包数量
# tcpdump 抓包结束后,会显示有多少收到的包被 drop,往往是因为 tcpdump buffer 不够
# 解决方案:增加过滤条件,或者限制每个包的大小
XXX packets dropped by kernel
- 把大包分割成多个小包
# 包太大以后,有时用wireshark都不能打开,这时就要把包分割成多个小包
tcpdump -r zhuabao.pcap -w newfile -C packetSize
网友评论