教你快速在linux上使用tcpdump抓包

背景

在遇到网络问题时,我们不确定到底在哪一步中断了,导致程序无法正常的收发数据。这个时候就需要逐个排查问题。排查网络问题就好比时排查下水管道哪里堵了一样。排查网络问题我们通常叫做抓包。

分析

所谓的抓包,即抓取网络数据包。实际上抓包就是监听网络流量。这个就好比在下水管道里每一个接头处打开排查,看看从源头放进去的水会不会到达当前的接头处,这样就可以确定这一段管道是否通畅。就这样,一节节的排查,最终就可以找到堵的地方。找到之后就在针对性的分析这一节的特征和配置,最终解决问题。

Linux的网络抓包工具叫做tcpdump。这个命令一般系统都安装了,所以可以直接使用。

下面是tcpdump的命令格式:

tcpdump version 4.99.1

libpcap version 1.10.1 (with TPACKET_V3)

OpenSSL 1.1.1m  14 Dec 2021

Usage: tcpdump [-AbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ] [--count]

        [ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]

        [ -i interface ] [ --immediate-mode ] [ -j tstamptype ]

        [ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ]

        [ -r file ] [ -s snaplen ] [ -T type ] [ --version ]

        [ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ]

        [ --time-stamp-precision precision ] [ --micro ] [ --nano ]

        [ -z postrotate-command ] [ -Z user ] [ expression ]

这里有很多参数,这里不展开讲。只那几个重点的参数来说明,分别是-i、host、port和-w。

-i interface,指的是接口,即网卡。网卡名称可以使用ifconfig 或 ip addr命令查询到:

这里的eth0是实际的网卡,而docker0则是虚拟网卡,都是网卡,都可以作为被抓包的参数。

使用下面的命令可以监听eth0网卡的流量:

tcpdump -i eth0

可以看到,开启监听后就看到了两条流量进到eth0网卡。持续观察会有大量的流量进来。这样说明这个网卡是在正常工作。

不过这里监听到的流量是所有进到eth0的流量。有时候我们在抓包时,会执行特定的动作来测试,比如ping或telnet。在大量的流量中很容易错过观察。所以最好有一个办法可以过滤IP和端口,这样就可以把不必要的流量排除掉,进而确认端口是否正常联通。

使用下面的命令可以实现tcpdump根据IP和端口过滤:

tcpdump -i eth0 host 要过滤出来的IP and port 要过滤的端口

例如:tcpdump -i eth0 host 103.144.218.22 and port 443

如果这个IP访问了443,且通过的是eth0进来的,那么监听就会打印日志。这样打印出来的就是都是这个IP的443端口的。可以用来分析这个IP的请求情况。如果有流量进来,说明网卡是可以正常接收流量的。如果服务没有接收到请求,那么就可能是网卡到服务的这一段有问题。

如果是部署的容器,则请求还要经过容器的网卡docker0进入到容器,再传递到服务程序。如果服务不能正常处理请求,在eth0可以正常接收到请求的情况下,则需要进一步排查docker0是否能够接收到请求。只需要把前面的eth0换成docker0即可。然后再在页面上请求一下就可以检测了。

依次类推,一直到服务程序。如果服务程序能够处理请求,则还要反向检测,即看看从服务响应从容器返回到宿主机,再从宿主机返回到客户端。这期间还会经过docker0,再到eth0,再返回客户端。一来一回,都要一步步的确认。

不过因为这些流量不直观,再加上流量很多,肉眼很难分析。这个时候就可以将流量日志导出到文件,再用wireshark流量分析工具来打开文件,软件会自动解析日志,这样看起来会更清晰。

此时使用-w参数,指定文件名即可。

tcpdump -i eth0 host 要过滤出来的IP and port 要过滤的端口 -w 1.dat

需要注意的是,1.dat的文件内容是二进制的,不是文本文件,所以直接打开是乱码。需要使用wireshark流量分析工具打开。这软件的具体使用,在这里就不展开了。

总结

网络抓包并没有多高大上,入门还是相当简单的。我们目前学会了基本的判断流量的有无、指定IP和端口的流量的有无,已经可以应对大部分的抓包需求了。至于更高级的,则需要学习网络知识,针对不通的协议,请求的交互是不同的,需要针对性的研究了。

来源: 教你快速在linux上使用tcpdump抓包-七秒鱼笔记

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值