Linux下抓包工具tcpdump使用

Linux下的tcpdump工具用于抓取网络传输数据,本文介绍了如何安装、监视特定网络接口,以及基本和高级的过滤语法,包括过滤主机、端口、网络、协议等,帮助理解网络数据包的抓取和分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Linux tcpdump命令用于倾倒网络传输数据;

执行tcpdump指令可列出经过指定网络界面的数据包文件头;

tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

安装

yum install -y tcpdump

普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

tcpdump

监视指定网络接口的数据包

如果不指定网卡,默认tcpdump只会监视第一个网络接口;

tcpdump -i 网卡

参数说明

  • -a 尝试将网络和广播地址转换成名称。
  • -c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
  • -d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
  • -dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
  • -ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
  • -e 在每列倾倒资料上显示连接层级的文件头。
  • -f 用数字显示网际网络地址。
  • -F<表达文件> 指定内含表达方式的文件。
  • -i<网络界面> 使用指定的网络截面送出数据包。
  • -l 使用标准输出列的缓冲区。
  • -n 不把主机的网络地址转换成名字。
  • -N 不列出域名。
  • -O 不将数据包编码最佳化。
  • -p 不让网络界面进入混杂模式。
  • -q 快速输出,仅列出少数的传输协议信息。
  • -r<数据包文件> 从指定的文件读取数据包数据。
  • -s<数据包大小> 设置每个数据包的大小。
  • -S 用绝对而非相对数值列出TCP关联数。
  • -t 在每列倾倒资料上不显示时间戳记。
  • -tt 在每列倾倒资料上显示未经格式化的时间戳记。
  • -T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
  • -v 详细显示指令执行过程。
  • -vv 更详细显示指令执行过程。
  • -x 用十六进制字码列出数据包资料。
  • -w<数据包文件> 把数据包数据写入指定的文件。

基本语法

1、过滤主机

  • 抓取所有经过eth1,目的或源地址是172.16.20.254的网络数据
tcpdump -i eth1 host 172.16.20.254
  • 指定源地址
tcpdump -i eth1 src host 172.16.20.254
  • 指定目的地址
tcpdump -i eth1 dst host 172.16.20.254

2、过滤端口

  • 抓取所有经过eth1,目的或源端口是22的网络数据
tcpdump -i eth1 port 22
  • 指定源端口
tcpdump -i eth1 src port 22
  • 指定目的端口
tcpdump -i eth1 dst port 22

3、网络过滤

tcpdump -i enp1s0 net 10.10

tcpdump -i enp1s0 src net 10.10(指定源端口)

tcpdump -i enp1s0 dst net 10.10(指定目的端口)

4、协议过滤

tcpdump -i eth1 arp
tcpdump -i eth1 ip
tcpdump -i eth1 tcp
tcpdump -i eth1 udp
tcpdump -i eth1 icmp

5、常用表达式

非 : ! or not  
且 : && or and
或 : || or or
  • 抓取所有经过enp1s0,目的地址是172.16.20.254或10.10.1.10端口是22的TCP数据;
tcpdump -i enp1s0 '((tcp) and (port 22) and ((dst host 172.16.20.254) or (dst host 10.10.1.10)))'
  • 抓取所有经过enp1s0,目标MAC地址是00:01:02:03:04:05的ICMP数据;
tcpdump -i enp1s0 '((icmp) and ((ether dst host 00:01:02:03:04:05)))'
  • 抓取所有经过enp1s0,目的网络是10.10,但目的主机不是10.10.1.100的TCP数据;
tcpdump -i enp1s0 '((tcp) and ((dst net 10.10) and (not dst host 10.10.1.100)))'

高级包头过滤

proto[x:y]          : 过滤从x字节开始的y字节数。比如ip[2:2]过滤出3、4字节(第一字节从0开始排)
proto[x:y] & z = 0  : proto[x:y]和z的与操作为0
proto[x:y] & z !=0  : proto[x:y]和z的与操作不为0
proto[x:y] & z = z  : proto[x:y]和z的与操作为z
proto[x:y] = z      : proto[x:y]等于z

操作符 : >, <, >=, <=, =, !=

IP头

只针对IPv4

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |Version|  IHL  |Type of Service|          Total Length         |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |         Identification        |Flags|      Fragment Offset    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Time to Live |    Protocol   |         Header Checksum       |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                       Source Address                          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                    Destination Address                        |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                    Options                    |    Padding    | <-- optional
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                            DATA ...                           |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 待补充。。。

参考:http://linuxwiki.github.io/NetTools/tcpdump.html#_4

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值