分类: NetWork

tcpdump抓包及分析机器流量数据包

不指定任何参数
监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。
tcpdump
执行命令以后会满屏显示数据包内容,一般都要带参数:

监听eth0网卡上、192.168.121.21主机之间的通信包:

tcpdump -i eth0 host 192.168.121.21

常用参数整理:

-i 指定网卡
src host hostname   特定来源地址
dst host hostname   特定目标地址
如果不指定src跟dst,那么来源 或者目标 是hostname的通信都会被监听

port 特定端口
tcp/udp  监听TCP/UDP服务器上不同服务分别用了TCP、UDP作为传输层
tcpdump tcp port 22 and src host 192.168.12.5  监听来自主机192.168.12.5在端口22上的TCP数据包

ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
-t 不显示时间戳
-s 0 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包
-c 100 只抓取100个数据包
dst port ! 22 : 不抓取目标端口是22的数据包
src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
-w test11.cap  保存成cap文件,方便用ethereal(即wireshark)分析
-r filename.cap  使用tcpdump查看cap文件内容  

使用举例:
截获主机192.168.13.210所有在TCP 80端口的数据包:

tcpdump -i eth0 host 192.168.13.210 and tcp port 80

截获主机192.168.13.210和主机172.22.64.39或192.168.13.209的通信:

tcpdump host 192.168.13.210 and \( 172.22.64.39 or 192.168.13.209 \)

截获主机192.168.13.210除了和主机172.22.64.39之外所有主机通信的数据包:

tcpdump -n host 192.168.13.210 and ! 172.22.64.39

截获主机192.168.2.30发送的所有数据:

tcpdump -i eth0 src host 192.168.2.30 (注意数据流向)

截获HTTP主机192.168.13.209在80端口响应主机192.168.13.210的数据包:

tcpdump -vvvnns 1500 -i eth0 host 192.168.13.209 and 192.168.13.210 and src port 80 -w /tmp/tcpdump_80_sent

从包头过滤信息

proto[x:y]          : 过滤从x字节开始的y字节数。比如ip[2:2]过滤出3、4字节(第一字节从0开始排)
proto[x:y] & z = 0  : proto[x:y]和z的与操作为0
proto[x:y] & z !=0  : proto[x:y]和z的与操作不为0
proto[x:y] & z = z  : proto[x:y]和z的与操作为z
proto[x:y] = z      : proto[x:y]等于z
操作符可以有: >, <, >=, <=, =, !=

抓取HTTP包

过滤 HTTP GET
tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
抓取 HTTP POST
tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

抓取所有经过eth1,目的地址是192.168.1.254或192.168.1.200端口是80的TCP数据

tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'

抓取所有经过eth1,目标MAC地址是00:01:02:03:04:05的ICMP数据

tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据

tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

抓DNS请求数据

tcpdump -i eth1 udp dst port 53

抓取源端口大于1024的TCP数据包

tcpdump -i eth1 'tcp[0:2] > 1024'

大于600字节

tcpdump -i eth1 'ip[2:2] > 600'

查看谁在使用traceroute

tcpdump -i eth1 'ip[8] < 5'

抓取所有经过 eth1,目的地址是 192.168.1.254 或 192.168.1.200 端口是 80 的 TCP 数据

tcpdump -i eth1 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host
192.168.1.200)))'

抓取所有经过 eth1,目标 MAC 地址是 00:01:02:03:04:05 的 ICMP 数据

tcpdump -i eth1 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'

抓取所有经过 eth1,目的网络是 192.168,但目的主机不是 192.168.1.200 的 TCP 数据

tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

只抓 SYN 包

tcpdump -i eth1 'tcp[tcpflags] = tcp-syn'

抓 SYN, ACK

tcpdump -i eth1 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack != 0'

抓 SMTP 数据

tcpdump -i eth1 '((port 25) and (tcp[(tcp[12]>>2):4] = 0x4d41494c))'

抓取数据区开始为"MAIL"的包,"MAIL"的十六进制为 0x4d41494c。
抓 HTTP GET 数据

tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x47455420'

"GET "的十六进制是 47455420
抓 SSH 返回

tcpdump -i eth1 'tcp[(tcp[12]>>2):4] = 0x5353482D'

"SSH-"的十六进制是 0x5353482D

tcpdump -i eth1 '(tcp[(tcp[12]>>2):4] = 0x5353482D) and (tcp[((tcp[12]>>2)+4):2]
= 0x312E)'

抓老版本的 SSH 返回信息,如"SSH-1.99.."

抓取从151.27发往本机1935端口的包,或者从本机1935端口发往151.27目的ip的包

tcpdump -i em1 '(src host 192.168.151.27 and dst port 1935) or (dst host 192.168.151.27 and src port 1935)'

相关文章

此处评论已关闭