1.31. tcpdump跟踪分组

只是知道哪个应用程序在使用特定的端口并不足以跟踪到问题所在。有时候还需要检查传输 的数据。 常用于Linux上的抓包

1.31.1. 安装tcpdum

yum -y install tcpdump

$ sudo apt-get install tcpdump

$ sudo yum install libpcaptcpdump

默认情况下tcpdump 会一直执行并嗅探网络分组,直到按下Ctrl-C或发送SIGTERM信号。

选项 -c 可以限制嗅探的分组数:

# tcpdump -w /tmp/tcpdump.raw -c 50

1. 只显示HTTP分组

# tcpdump -r /tmp/tcpdump.raw port http

2.只显示本机生成的HTTP分组

# tcpdump -r /tmp/tcpdump.rawsrc port http

3.查看分组载荷(payload)以及头部

# tcpdump -X -r /tmp/tcpdump.raw host noucorp.com and port http
tcpdump 可用于跟踪过载网段的问题源、产生异常流量的主机、网络环路、网卡故障、恶意分组等。


利用选项 -w 和 -r , tcpdump 可以将分组数据以原始格式保存,允许随后以普通用户身份查
看。举例来说,如果在凌晨3点出现了大量网络分组冲突,你可以设置一项 cron 作业,安排在凌
晨3点的时候运行 tcpdump ,然后对比检查正常时段的网络分组。

1.31.2. Linux系统下的网络抓包

[root@bogon ~]# tcpdump -nn -i ens32
[root@bogon ~]# tcpdump -nn -i ens32 port 22


[root@bogon ~]# tcpdump -nn -i ens32 -c 3
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens32, link-type EN10MB (Ethernet), capture size 262144 bytes
01:52:41.394331 IP 192.168.6.2.22 > 192.168.6.205.50489: Flags [P.], seq 1871374054:1871374250, ack 2529069835, win 76, length 196
01:52:41.394748 IP 192.168.6.205.50489 > 192.168.6.2.22: Flags [.], ack 196, win 2048, length 0
01:52:41.395320 IP 192.168.6.2.22 > 192.168.6.205.50489: Flags [P.], seq 196:472, ack 1, win 76, length 276
3 packets captured
3 packets received by filter
0 packets dropped by kernel


# -w 将抓取的包存储到某个文件中
[root@bogon ~]# tcpdump -nn -i ens32 -c 10 -w /root/tcpdump.txt

1.31.3. 使用方法举例

1)想要截获210.27.48.1的主机收到的和发出的所有数据包,命令如下:

tcpdump host 210.27.48.1

2)想要截获主机210.27.48.1和主机210.27.48.2或210.27.48.3的通信,使用了转义符号

tcpdump host 210.27.48.1 and \(210.27.48.2 or 210.27.48.3 \)

3)想要获取主机210.27.48.1和所有主机(除了210.27.48.2)通信的IP包,命令如下:

tcpdump ip host 210.27.48.1 and !210.27.48.2

4)想要获取主机210.27.48.1接收或发出的smtp包,命令如下:

tcpdump tcp port 25 and host 210.27.48.1

5)如果怀疑系统正受到拒绝服务攻击(DoS),网络管理员可以通过截获发往本机的所有ICMP包,来确定目前是否有大量的ping指令流向服务器,此时可用如下命令:

tcpmdump icmp -n -i eth0

6)想要将其结果生成详细的报告,命令如下:

tcpdump tcp port 25 and host 211.147.1.11 > awstat.txt