tcpdump可以支持的功能
-
-
在Linux平台将网络中传输的数据包全部捕获过来进行分析
-
支持网络层,传输层协议等协议捕获过滤
-
数据发送和接收的主机,网卡和端口等各种过滤捕获数据规则
-
提供and, or, not等语句进行逻辑组合捕获数据包或去掉不用的信息
-
结合wireshark工具分析捕获的报文
-
TCP协议
TCP 传输控制协议,就是要对数据的传输进行一定的控制
tcpdump指令的使用
过滤:
tcpdump host 127.0.0.1
- 这样就只能够抓取到127.0.0.1的报文了
tcpdum tcp port 80
- 只抓取80端口的数据
tcpdump的常用参数
不加任何参数的tcpdump
-n: 不把ip转化成域名,直接显示ip, 避免执行 DNS lookups 的过程,速度会快很多
-nn:不把协议和端口号转化成名字,速度也会快很多。
-N:不打印出host的域名部分,比如,如果设置了此选项,tcpdump将会打印 ‘nic’ 而不是 ‘nic.ddn.mil’
-t:在每行的输出中不输出时间
-tt:在每行的输出中会输出时间戳
-ttt:输出每两行打印的时间间隔(以毫秒为单位)
-tttt:在每行打印的时间戳之前添加日期的打印(此种选项,输出的时间最直观)
-v:产生详细的输出,比如包的TTL,id表示,数据包长度,以及IP包的一些选项。同时它还会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和
-vv:产生比-v更详细的输出,比如NFS回应包中的附加域将会被打印,SMB数据包也会被完全解码。
-vvv:产生比-vv更详细的输出。比如telnet时所使用的SB,SE选项将会被打印,如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来
-Q:选择是入方向还是出方向的数据包,可选项有:in, out, inout, 也可以使用 --direction=[direction]
tcpdump -Q in
tcpdump -Q out
tcpdump -Q inout
-q:简洁的打印输出。即打印很少的协议相关信息,从而输出行都比较简短
tcpdump -q
-D:显示所有可用网络接口的列表
-L:列出网络接口的已知数据链路
-A:将读取到的信息以ASCII字符的形式展示出来
tcpdump tcp port 8082 -A
-A:后面也可以接grep过滤需要的信息
tcpdump -A | grep baidu
-X:可以以二进制的方式来显示报文数据
tcpdump tcp port 8082 -X
-e:在输出行打印出数据链路层的头部信息。默认情况下tcpdump不会显示数据链路层信息,使用-e选项可以显示源和目的MAC地址,以及VLAN tag信息
tcpdump -e -r chicken.cap
-F:指定使用哪个文件的过滤表达式抓包。此时命令行上的输入将被忽略
tcpdump -F filter_rule -c10
filter_rule中的内容
tcp port 8082
-l:对标准输出进行行缓冲–使用标准输出设备遇到一个换行符就马上把这行的内容打印出来。
在需要同时观察抓包打印以及保存抓包记录的时候很有用
比如,可以通过一下命令组合来达到此抓包时保存到文件的同时查看包的内容
tcpdump -l | tee dat
这命令是使用tee来吧tcpdump的输出同时放到文件dat和标准输出中
tee 功能说明:读取标准输入的数据,并将其内容输出成文件
tcpdump -l > dat1 & tail -f dat1