tcpdump使用过滤条件抓包(基础篇)

引言

这是有关网络协议的第三篇文章。

前两篇文章分享了tcpdump和tshark最基本的用法。这篇文章原本是想翻译tcpdump官方文档,但是网上已经有了现成的翻译版本,作者已经对比较难懂的部分做了说明,当然作者也有略过一部分的说明。

Tcpdump实际上非常复杂,需要对网络协议有全面又细致的掌握,有兴趣可以参考tcpdump官方文档

这篇文章主要从指定过滤条件表达式捕获包的角度去分享一些基本的过滤条件表达式。原本想一篇博客写完,google了一番之后,发现还有很多比较实用的命令,所以分开写。

tcpdump常用选项介绍

  • -n 禁止IP名称解析。
  • -nn 禁止IP和端口名称解析。
  • -i 指定捕获哪个网卡的网络数据包。
  • -w 指定将包写入哪个文件,如果文件不存在则创建该文件;如果存在则覆盖其内容。
  • -f 指定过滤表达式,例如指定捕获哪个端口,哪个协议等。
  • -r 指定从哪个文件读取网络数据包文件。
  • -F 指定使用哪个文件的过滤表达式抓包。
  • -D 列出所有可以使用tcpdump抓包的网卡。
  • -c 指定捕获或者读取包的个数,-c后面直接接数字即可。
  • -l 抓包时保存到文件的同时查看包的内容。
  • -t 不打印时间戳。
  • -tt 秒级时间戳。
  • -ttt 打印时间戳到微秒或者纳秒,取决于 –time-stamp-precision option 选项。
  • -s 指定每个包捕获的字节数。
  • -S 打印绝对的tcp序列号,而不是相对的序列号。
  • -v/-vv/-vvv 打印详细信息,v的个数越多, 打印内容越详细。

上面是常用的选项,更多的选项请参考tcpdump官方文档,下面将对使用过滤条件抓包进行基本的介绍。

命令概览

这篇博客要分享的主要命令如下:

#协议为tcp,目标端口或源端口为80
tcpdump -nni ens33 -w packets.pcap 'tcp port 80'
#协议为tcp,目标端口为80
tcpdump -nni ens33 -w packets.pcap 'tcp dst port 80' -c10
#协议类型为tcp,源端口为80
tcpdump -nni ens33 -w packets.pcap 'tcp src port 80' -c10
#读取文件中协议类型为tcp,目标端口为80的包
tcpdump -nnr packets.pcap 'tcp dst port 80' -c10
#将packets.pcap文件中目标端口为443的包转存到dst_port_443.pcap中
tcpdump -r packets.pcap 'dst port 443' -w dst_port_443.pcap 
#指定IP地址为14.215.177.39
tcpdump -nni ens33 host 14.215.177.39 -c5
#源IP地址为192.168.248.134
tcpdump -nni ens33 src 192.168.248.134 -c5
#目标IP地址为192.168.248.134
tcpdump -nni ens33 dst 192.168.248.134 -c5
#通往网络192.168.248.0/24
tcpdump -nni ens33 net 192.168.248.0/24 -c5

实用命令

1. 测试-D选项

根据官方文档的说明,-D选项用于列出系统中所有tcpdump可以进行抓包的网卡。

虚拟机测试代码:

[sunft@localhost ~]$ tcpdump -D
1.bluetooth0 (Bluetooth adapter number 0)
[sunft@localhost ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::176e:36f2:18ab:c561  prefixlen 64  scopeid 0x20<link>
        inet6 fd15:4ba5:5a2b:1008:c7f1:b0a6:ecf:6bfc  prefixlen 64  scopeid 0x0<global>
        ether 00:0c:29:59:4f:1a  txqueuelen 1000  (Ethernet)
        RX packets 77  bytes 11417 (11.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15  bytes 2598 (2.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 880  bytes 95324 (93.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 880  bytes 95324 (93.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:2b:fd:d5  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

普通Linux机器测试代码:

[root@localhost ~]# tcpdump -D
1.eth0
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.usbmon1 (USB bus number 1)
5.usbmon2 (USB bus number 2)
6.any (Pseudo-device that captures on all interfaces)
7.lo

说明:
不知道是因为虚拟机的原因还是版本的原因,在虚拟机上 -D 选项并未正确列举出所有可用的网卡,而 ifconfig 则正确列出了可用的网卡。

在列举所有的可用网卡时不建议使用tcpdump -D</

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值