从事物联网相关开发工作,无法避免的需要对网络通讯数据进行抓包分析,而命令行工具 tcpdump 能够对流经本机的网络数据进行抓取。虽然其名称为tcpdump,但是它也可以抓UDP、ICMP等多种协议数据。tcpdump命令能够灵活的对接口的数据包进行筛选抓取,是类UNIX系统下用于网络分析和问题排查的首选工具。
用法: 通过 --help参数查询usage用法如下:
如图所示,除了显示tcpdump版本信息,还显示了libpcap的版本信息。libpcap是unix/linux平台下的网络数据包捕获函数包,大多数网络监控软件都以它为基础,candump也不例外,使用了libpcap的接口,故在usage标注了libpcap的版本。
tcpdump调用libpcap的接口在linux系统链路层抓包。而linux本身指定的许多访问控制规则都是基于三层或三层以上的过滤规则,所以tcpdump可以抓取过滤规则之前的数据包。
tcpdump用法介绍文档: https://www.tcpdump.org/tcpdump_man.html
由于参数选项复杂,如下仅列出常用的几种参数用法:
-A 以ASCII格式打印出所有分组,并将链路层的头最小化。 (通常用来分析数据内容)
-c 接收指定的数量的分组包。
-D 打印出系统中所有可以用tcpdump截包的网络接口。
-i 指定监听的网络接口。
-t : 不显示时间戳
-P 指定要抓取的包是流入还是流出的包。可以给定的值为"in"、"out"和"inout",默认为"inout"。
-n 不将ip地址转换成hostname,也就是不进行dns查询。
-nn 不将已知的协议转换成名称
-v 产生详细的输出. 比如, 包的生存时间, 标识, 总长度以及IP包的一些选项等。
-XX 当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据, 其中包括数据链路层的头部.这对于分析一些新协议的数据包很方便。
-w ./target.cap 保存成cap文件,方便用wireshark分析。
dst port ! 22 不抓取目标端口是22的数据包
tcp、udp、icmp 这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
监视指定主机和端口的数据包
1、如果想要获取主机xxx.xx.xx.xx接收或发出的tcp包,使用如下命令:
tcpdump tcp port 23 and host xxx.xx.xx.xx
2、对本机的udp 123 端口进行监视,使用如下命令:
tcpdump udp port 123
3、使用tcpdump抓取HTTP包(0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT")
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854
更多详细用法请参考博客:
https://blog.csdn.net/chinaltx/article/details/87469933
https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html