Linux命令----tcpdump

简介

用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

实用命令实例

1. 默认启动

tcpdump

直接启动tcpdump将监视第一个网络接口上所有流过的数据包

2. 监听指定网络接口数据包

tcpdump -i ens32

3. 监视指定主机的数据包

指定IP,例如截获所有 59.78.139.215 的主机收到的和发出的所有的数据包

tcpdump -i ens32 host 59.78.139.215

指定IP,例如截获所有 59.78.139.215 的主机收到的和发出的所有的数据包,- v将输出详细数据包信息

tcpdump -i ens32 -v host 59.78.139.215

打印主机 59.78.139.215 与主机 59.78.139.216 或者与主机 59.78.139.217 间通信的数据包

tcpdump -i ens32 host 59.78.139.215 and (59.78.139.216 or 59.78.139.217)

打印主机 59.78.139.215 与任何其他主机之间通信的IP数据包, 但不包括与主机 59.78.139.216 之间的数据包

tcpdump -i ens32 host 59.78.139.215 and not 59.78.139.216

截获主机 59.78.139.215 发送的所有数据

tcpdump -i ens32 src 59.78.139.215

监视所有送到主机hostname的数据包

tcpdump -i ens32 dst 59.78.139.215

4. 监视指定主机和端口的数据包

如果想要获取主机 59.78.139.215 接收或发出的telnet包,使用如下命令

tcpdump -i ens32 tcp port 23 and host 59.78.139.215

对本机的udp 123 端口进行监视 123 为ntp的服务端口

 tcpdump -i ens32 udp port 123

5. 监视指定协议的数据包

tcpdump -i ens32 arp host 59.78.139.215
tcpdump -i ens32 ip
tcpdump -i ens32 tcp
tcpdump -i ens32 udp
tcpdump -i ens32 icmp

监视主机 59.78.139.215的ARP协议包,然后ping 59.78.139.216 得到以下结果:

监视网络接口ens32的ICMP协议包,然后ping 59.78.139.216 得到以下结果:

6. tcpdump 与wireshark

Wireshark(以前是ethereal)是Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的图形化抓包工具。
还好有Tcpdump。我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包

tcpdump tcp -i ens32 -t -s 0 -c 100 and dst port ! 22 and src net 59.78.139.215 -w ./target.cap

(1) tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2) -i eth1 : 只抓经过接口eth1的包
(3) -t : 不显示时间戳
(4) -s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5) -c 100 : 只抓取100个数据包
(6) dst port ! 22 : 不抓取目标端口是22的数据包
(7) src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8) -w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

7. 使用tcpdump抓取HTTP包

tcpdump -XvvennSs 0 -i ens32 tcp[20:2]=0x4745 or tcp[20:2]=0x4854

0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"

注意:tcpdump 对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序(如Wireshark)进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

原文地址:https://www.cnblogs.com/shanyingwufeng/p/7127181.html