tcpdump能够分析网络行为,性能和应用产生或接收网络流量。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息,从而使用户能够进一步找出问题的根源。
也可以使用 tcpdump 的实现特定目的,例如在路由器和网关之间拦截并显示其他用户或计算机通信。通过cpdump分析非加密的流量,如Telnet或HTTP的数据包,查看登录的用户名、密码、网址、正在浏览的网站内容,或任何其他信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。
有很多用户喜欢使用柏克莱数据包过滤器来限制 tcpdump 产生的数据包数量,这样BPF会只把“感兴趣”的数据包到上层软件,可以避免从操作系统内核向用户态复制其他数据包,降低抓包的CPU的负担以及所需的缓冲区空间,从而减少丢包率。
参数
- -i: 指定网卡 any为所有网卡
- -w: 保存到指定文件
- -v: 详细显示指令执行过程;
- -vv: 更详细显示指令执行过程;
- -x: 用十六进制字码列出数据包资料;
- -n: 不把主机的网络地址转换成名字;
- -c: 数据包个数
- -s: 数据包长度,0代表完整数据包
监听指定端口的数据包
tcp
udp
过滤主机
- 抓取所有经过enp0s3,目的或源地址是 192.168.1.101 的网络数据
1
| tcpdump -i enp0s3 host 192.168.1.101
|
- 指定源地址
1
| tcpdump -i enp0s3 src host 192.168.1.101
|
- 指定目的地址
1
| tcpdump -i enp0s3 dst host 192.168.1.101
|
- 截获主机192.168.1.101 和主机192.168.1.102 或192.168.1.103的通信
1
| tcpdump -i enp0s3 host 192.168.1.101 and \(192.168.1.102 or 192.168.1.103 \)
|
- 如果想要获取主机192.168.1.101除了和主机192.168.1.102之外所有主机通信的ip包,使用命令:
1
| tcpdump ip host 192.168.1.101 and !192.168.1.102
|
dhcp包抓取
1
| tcpdump -i eth0 -c 8 -s 0 -w /mnt/sdcard/dhcp.pcap 'udp and port 67 and port 68' &
|
dhcp使用的是udp 67和68端口
常用表达式
非 : ! or “not” (without the quotes)
且 : && or “and”
或 : || or “or”
- 抓取目的地址是192.168.1.254或192.168.1.200端口是80的TCP数据
1
| tcpdump '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
|
当然上也可以像之前的加上指定网卡 -i enp0s3
1
| tcpdump -i enp0s3 '((tcp) and (port 80) and ((dst host 192.168.1.254) or (dst host 192.168.1.200)))'
|
- 抓取目标MAC地址是00:01:02:03:04:05的ICMP数据
1
| tcpdump '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
|
可以加上具体网卡
- 抓取目的网络是192.168,但目的主机不是192.168.1.200的TCP数据
1
| tcpdump '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'
|