网络故障排查和流量分析利器-Tcpdump命令

Tcpdump是一个在Unix/Linux系统上广泛使用的命令行网络抓包工具。它能够捕获经过网络接口的数据包,并将其以可读的格式输出到终端或文件中。Tcpdump是一个强大的命令行工具,能够捕获和分析网络数据包,为网络管理员和安全专业人员提供了深入了解网络通信的途径。本文将介绍Tcpdump的基本用法、功能和一些常见的应用场景。

Tcpdump VS Wireshark

在我的专栏介绍《Wireshark从入门到精通》了大量关于wireshark图形界面,命令行,插件,使用技巧等诸多内容,为什么还要介绍Tcpdump呢,最主要的原因如下:

  • 在处理数十万,数百万数量级的数据包的时候tcpdump展现出比wireshark/tshark更为强大的性能,使得tcpdump仍旧由一定的用武之地。
  • tcpdump是多数Unix/Linux等系统自带的功能,要想在这些系统上使用最新的wireshark,需要自己下载源码编译,不够方便。
  • 支持BPF过滤器能够满足常见场景的需求,命令行的方式能导出到文本格式利于后续的分析。
  • 在处理大流量数据包额时候,先使用Tcpdump过滤然后再使用Wireshark详细分析是一种不错的策略。

Tcpdump使用举例

Tcpdump的使用非常简单,支持的参数如下:

图1

捕获数据包

图2

图2 -i参数将捕获指定网络接口上的所有流量,在没有制定输出文件的情况下,会输出到终端,因此使用-w参数输出到文件。如果在捕获数据包的时候想要做更多的限制,例如限制捕获数据包的数量,限制每个数据包的大小,可以使用如下的命令:

bash 复制代码
tcpdump -i <interface> -s <snaplen> -c <count>

-s 选项可以限制每一个捕获的数据包大小,使用 -c 选项可以设置捕获的数据包数量,达到指定数量后自动停止,有助于减小输出量。

解析数据包

图3

图3默认情况下只会显示pcap的一些摘要信息,要想显示payload的信息,需要使用-A参数,如图4:

图4

图4的 -A参数会将payload以ASCII的形式打印出来。

BPF过滤器

上述无论是数据包的抓取还是文件的解析,都没有使用过滤器,因此默认会抓取所有的数据包,默认读取展示所有的数据包。要想抓取或者展示特定的数据包,则需要借助BPF表达式,捕获过滤规则使用BPF语法,主要提供以下三类原语,这几类原语可以通过运算符组合成为复杂的过滤规则。常见的运算符包括逻辑运算符and or not ,即与或非,以及比较运算符> < 等。当然理解这些概念之前,可能需要对网络协议有一定的了解,关于网络协议内容,可以参考专栏《网络攻防协议实战分析》,见这里

1,类型原语,包括地址原语 host 和net、端口原语 port port range:

host含义比较广泛,既可以表示以太网层的主机地址,也可以是IP层主机地址,也可以是主机名。因此可以使用如三种表达式:

bash 复制代码
ether host 00:00:5e:00:53:00
host 192.168.0.115
host test 

net可以用于过滤多个IP地址,当然当一个域名www.example.com 对应着多个IP地址的时候,也相当于过滤多个IP。

bash 复制代码
net 192.168.0.0/24
bash 复制代码
port 53 过滤单个端口
portrange 1-1024 过滤一组端口

2,方向原语,主要是src和dst:

bash 复制代码
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中输入该协议的名称,如果过滤规则变绿说明支持,如果为红则不支持。

bash 复制代码
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村中少年原创文章,未经允许不得转载,博主链接这里

相关推荐
Lws9 小时前
CS144 lab0(个人理解)
网络协议
C++忠实粉丝13 小时前
计算机网络socket编程(2)_UDP网络编程实现网络字典
linux·网络·c++·网络协议·计算机网络·udp
添砖java_85713 小时前
UDP数据报套接字编程
网络·网络协议·udp
莫固执,朋友14 小时前
网络抓包工具tcpdump 在海思平台上的编译使用
网络·ffmpeg·音视频·tcpdump
lxkj_202415 小时前
修改ffmpeg实现https-flv内容加密
网络协议·https·ffmpeg
千羽星弦15 小时前
Apache和HTTPS证书的生成与安装
网络协议·https·apache
程序猿小D18 小时前
第三百三十节 Java网络教程 - Java网络UDP服务器
java·开发语言·网络·网络协议·udp·多线程
半桶水专家18 小时前
tcpdump抓取流量包详解
网络·测试工具·tcpdump
是理不是里_1 天前
常见的网络协议汇总(涵盖了不同的网络层次)
网络·网络协议
Peter_chq1 天前
【计算机网络】HTTP协议
linux·c语言·开发语言·网络·c++·后端·网络协议