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)'
Tag标签:「流量 tcpdump 抓包 数据包」更新时间:「2021-11-05 00:46:37」阅读次数:「815」