Tcpdump是一个在Unix/Linux系统上广泛使用的命令行网络抓包工具。它能够捕获经过网络接口的数据包,并将其以可读的格式输出到终端或文件中。Tcpdump是一个强大的命令行工具,能够捕获和分析网络数据包,为网络管理员和安全专业人员提供了深入了解网络通信的途径。本文将介绍Tcpdump的基本用法、功能和一些常见的应用场景。
在我的专栏介绍《Wireshark从入门到精通》了大量关于wireshark图形界面,命令行,插件,使用技巧等诸多内容,为什么还要介绍Tcpdump呢,最主要的原因如下:
图2
图2 -i参数将捕获指定网络接口上的所有流量,在没有制定输出文件的情况下,会输出到终端,因此使用-w参数输出到文件。如果在捕获数据包的时候想要做更多的限制,例如限制捕获数据包的数量,限制每个数据包的大小,可以使用如下的命令:
tcpdump -i <interface> -s <snaplen> -c <count>
-s 选项可以限制每一个捕获的数据包大小,使用 -c 选项可以设置捕获的数据包数量,达到指定数量后自动停止,有助于减小输出量。
图3
图3默认情况下只会显示pcap的一些摘要信息,要想显示payload的信息,需要使用-A参数,如图4:
图4
图4的 -A参数会将payload以ASCII的形式打印出来。
上述无论是数据包的抓取还是文件的解析,都没有使用过滤器,因此默认会抓取所有的数据包,默认读取展示所有的数据包。要想抓取或者展示特定的数据包,则需要借助BPF表达式,捕获过滤规则使用BPF语法,主要提供以下三类原语,这几类原语可以通过运算符组合成为复杂的过滤规则。常见的运算符包括逻辑运算符and or not ,即与或非,以及比较运算符> < 等。当然理解这些概念之前,可能需要对网络协议有一定的了解,关于网络协议内容,可以参考专栏《网络攻防协议实战分析》,见这里。
1,类型原语,包括地址原语 host 和net、端口原语 port port range:
host含义比较广泛,既可以表示以太网层的主机地址,也可以是IP层主机地址,也可以是主机名。因此可以使用如三种表达式:
ether host 00:00:5e:00:53:00
host 192.168.0.115
host test
net可以用于过滤多个IP地址,当然当一个域名www.example.com 对应着多个IP地址的时候,也相当于过滤多个IP。
net 192.168.0.0/24
port 53 过滤单个端口
portrange 1-1024 过滤一组端口
2,方向原语,主要是src和dst:
src host 192.168.0.115 源IP地址192.168.0.115
dst host 192.168.0.116 目的IP地址192.168.0.116
3,协议原语,包括常见的ether,arp,rarp,ip,ip6,tcp,udp。如果想要确认是否支持该协议的捕获过滤,在图1中输入该协议的名称,如果过滤规则变绿说明支持,如果为红则不支持。
not arp and port not 53 非ARP以及非53号端口报文
ip[2:2] > 100 IP协议第三个字节开始取两个字节表示的长度(也就是IP协议的length值)大于100个字节
例如只过滤host的值为特定地址的数据包的命令如下:
图5
可以看到使用src表达式只会过滤出源IP地址是特定地址的数据包,当然也可以使用逻辑运算符将类型原语,协议原语,方向原语组合过滤出更为精准的结果。当然也可以在抓包的时候使用,只捕获想要的数据包。关于BPF表达式的更多的内容详见官网,这里。
当然关于tcpdump的更多命令的详解可以使用man tcpdump
进行查看,也可以参考这里,里面总结了常见的参数含义以及常见的BPF表达式的的用法,如图6:
图6
TCPDUMP作为一款强大的网络抓包工具,为网络管理、安全分析和协议研究提供了有力支持。通过熟练掌握TCPDUMP的基本用法和高级功能,能够更有效地解决各种网络相关和安全相关的问题。
本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里。