tcpdump的使用

监控80端口的http 请求并显示详细信息

tcpdump -i eth0  -A -s 0 'port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

实战:基础用法

我们先通过几个简单的示例来介绍 tcpdump 基本用法。

1. 不加任何参数,默认情况下将抓取第一个非 lo 网卡上所有的数据包

$ tcpdump 

2. 抓取 eth0 网卡上的所有数据包

$ tcpdump -i eth0

3. 抓包时指定 -n 选项,不解析主机和端口名。这个参数很关键,会影响抓包的性能,一般抓包时都需要指定该选项。

$ tcpdump -n -i eth0

4. 抓取指定主机 192.168.1.100 的所有数据包

$ tcpdump -ni eth0 host 192.168.1.100

5. 抓取指定主机 10.1.1.2 发送的数据包

$ tcpdump -ni eth0 src host 10.1.1.2

6. 抓取发送给 10.1.1.2 的所有数据包

$ tcpdump -ni eth0 dst host 10.1.1.2

7. 抓取 eth0 网卡上发往指定主机的数据包,抓到 10 个包就停止,这个参数也比较常用

$ tcpdump -ni eth0 -c 10 dst host 192.168.1.200

8. 抓取 eth0 网卡上所有 SSH 请求数据包,SSH 默认端口是 22

$ tcpdump -ni eth0 dst port 22

9. 抓取 eth0 网卡上 5 个 ping 数据包

$ tcpdump -ni eth0 -c 5 icmp

10. 抓取 eth0 网卡上所有的 arp 数据包

$ tcpdump -ni eth0 arp

11. 使用十六进制输出,当你想检查数据包内容是否有问题时,十六进制输出会很有帮助。

$ tcpdump -ni eth0 -c 1 arp -X
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
12:13:31.602995 ARP, Request who-has 172.17.92.133 tell 172.17.95.253, length 28
    0x0000:  0001 0800 0604 0001 eeff ffff ffff ac11  ................
    0x0010:  5ffd 0000 0000 0000 ac11 5c85            _..........

12. 只抓取 eth0 网卡上 IPv6 的流量

$ tcpdump -ni eth0 ip6

13. 抓取指定端口范围的流量

$ tcpdump -ni eth0 portrange 80-9000

14. 抓取指定网段的流量

$ tcpdump -ni eth0 net 192.168.1.0/24