一、什么是tcpdump

tcpdump是Linux系统上最常用的抓包工具,用来抓取网络通信中的数据包,并进行分析。

另外,因为大多数网络安全设备(如防火墙)底层系统也是Linux,所以各种网络安全设备一般也内置tcpdump。

二、什么时候会用到tcpdump

1、当业务系统发生故障,比如客户端app无法连接服务器端,那么可以在服务器端进行tcpdump抓包,看客户端的连接请求是否到达了服务器。这样来排除是网络故障,还是软件上的bug。

2、tcpdump抓包是针对接口的,有时因为网络安全设备(如防火墙)配置错误,会导致数据报文误过滤。这个时候,则可以在防火墙的2个接口分别使用tcpdump进行抓包,如果发现进口有包,出口没了,那一定是被防火墙拦截了。

这样排错,比在防火墙一大堆过滤规则中进行排查要快速的多。

3、当然,tcpdump抓取各种协议报文,可以用来分析和学习。

三、tcpdump使用举例

1、抓取ens33接口所有报文,慎用。

这个在生产环境中,因为有大量报文产生,所以可能瞬间导致服务器资源耗尽,所以一定要慎用。

[root@ServerA ~]# tcpdump -i ens33

linux wireshark 网络抓包 linux抓包详解_tcpdump


]即使在实验环境,也很短的时间产生了19019个包

2、抓取和主机1.1.1.1之间的包

[root@ServerA ~]# tcpdump -i ens33 host 1.1.1.1 -n

这里的host 1.1.1.1是指定和哪个主机相关,-n是不进行ip和域名的解析

linux wireshark 网络抓包 linux抓包详解_linux_02

3、抓取和主机1.1.1.1之间的telnet包

[root@ServerA ~]# tcpdump -i ens33 host 1.1.1.1 and port 23 -n

这里用到了and,就是并且的条件,然后指定端口号为23

linux wireshark 网络抓包 linux抓包详解_linux_03

4、抓取和1.1.1.1之间,端口号不是23的包

这里用到!,也就是非的意思,排除23端口的包,所以能看到25(smtp),67(dhcp)以及没端口的icmp,但是看不到23。其实已经做了telnet的操作,只是tcpdump在这里不捕获。

linux wireshark 网络抓包 linux抓包详解_云安全_04

5、抓取和192.168.0.0/24网段相关的dns包

[root@ServerA ~]# tcpdump -i ens33 net 192.168.0 and port 53 -n

linux wireshark 网络抓包 linux抓包详解_linux_05

6、抓取的报文不需要在屏幕显示,而是写入一个文件

[root@ServerA ~]# tcpdump -i ens33 net 192.168.0 and port 53 -n -w /root/dns.pcap

tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes

^C23 packets captured

23 packets received by filter

0 packets dropped by kernel

[root@ServerA ~]# ls -l /root/dns.pcap

-rw-r–r-- 1 tcpdump tcpdump 2991 Apr 2 16:04 /root/dns.pcap

[root@ServerA ~]#

可以通过scp将文件下载到windows,然后通过wirshark打开(当然也可以直接用tcpdump -r直接打开)

linux wireshark 网络抓包 linux抓包详解_wireshark_06