tcpdump(libpcap)
tcpdump --help
tcpdump [option][proto][dir][type]
option:
[ -B size ]
[ -c count ]
[ -C file_size ]
[ -E algo:secret ]
[ -F file ]
[ -G seconds ]
[ -i interface ]
[ -j tstamptype ]
[ -M secret ]
[ --number ]
[ -Q in|out|inout ]
[ -r file ]
[ -s snaplen ]
[ --time-stamp-precision precision ]
[ --immediate-mode ]
[ -T type ]
[ --version ]
[ -V file ]
[ -w file ]
[ -W filecount ]
[ -y datalinktype ]
[ -z postrotate-command ]
[ -Z user ] [ expression ]
-t 显示时间戳
-X 实现十六进制
-v 显示详细的报文信息
proto : ether、ip、ip6、arp、icmp、tcp、udp
dir : src 、dst
type : host、net、port、portrange,默认是host
条件组合:or、and、not
运行范围:用户态
工作原理:网卡数据 -> BPF-数据包过滤器(工作在协议栈之前) -> tcpdump程序
Q:1、iptables工作在什么层?
Linux系统中的netfilter工作在协议栈阶段,
2、那么其他的嵌入式系统的netfilter也是工作在协议栈的吗,其他抓包工具又可以抓到那个位置的数据呢?
使用示例指令:
不带参数:
tcpdump
抓取第一个非lo网卡的所有数据包
指定网卡:
tcpdump -i eth0
-n 不解析主机和端口号:
tcpdump -n -i eth0
指定type:
tcpdump -ni eth0 host 192.168.1.1
host 为指定IP的所有数据包
指定dir:
tcpdump -ni eth0 src host 192.168.1.1
src host 指定源IP的数据包
tcpdump -ni eth0 dst host 192.168.1.1
dst host 指定目的IP的数据包
指定数据包个数:
tcpdump -ni eth0 -c 10 host 192.168.1.1
tcpdump -ni eth0 -c 10 dst host 192.168.1.1
-c 指定源IP的数据个数
指定端口:
tcpdump -ni eth0 dst port 22
port 指定网卡端口数据包
tcpdump -ni eth0 portrange 80-8089
eth0上过80-8089端口的数据包
指定协议:
sudo tcpdump -ni eth0 -c 5 icmp
指定5个ICMP数据包
tcpdump -ni eth0 ip6
tcpdump ip proto 6 //ip数据报中的tcp数据包
指定网段:
sudo tcpdump -ni eth0 net 192.168.1.2/24
条件组合:or、and、not
sudo tcpdump -ni eth0 src 192.168.10.210 and dst port 8080
sudo tcpdump -ni eth0 src 192.168.10.210 and not dst port 8080
sudo tcpdump -ni eth0 src net 192.168.1.0/16 and dst net 192.168.10.210
抓取特殊标志的数据包:
抓取某主机发送的RST包:
sudo tcpdump -ni eth0 src host 192.168.1.100 and 'tcp[tcpflags] & (tcp-rst) != 0'
sudo tcpdump -ni eth0 src host 192.168.1.100 and 'tcp[tcpflags] & (tcp-syn) != 0'
sudo tcpdump -ni eth0 src host 192.168.1.100 and 'tcp[tcpflags] & (tcp-fin) != 0'
sudo tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'
sudo tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply' //抓取所有ping的ICMP数据包
sudo tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' //过滤还有数据的网络包
sudo tcpdump -ni eth0 'tcp[20:2]=0x4745 or tcp[20:2]=0x4854' //0x4745 get前两个字符, 0x4854 http 前两个字符
tcpdump指令
于 2021-03-15 10:02:10 首次发布