资讯详情

tcpdump抓包规则命令大全

一、抓取http协议包

获取get请求

tcpdump -nn -i eth1 -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

获取post请求

tcpdump -s 0 -i eth1 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)' 

监听端口

tcpdump -i lo0 port 8075 -X -e -v -n -vv

二、抓tcp协议包-举例

下面的例子都是抓取的eth以0接口为例,如果不添加-i eth0意味着抓取所有接口包括lo。

1、抓取包含10.10.10.122的数据包

tcpdump -i eth0 -vnn host 10.10.10.122

2、抓取包含10.10.10.0/24网段的数据包

下面的例子都是抓取的eth以0接口为例,如果不加-i eth0意味着抓取所有接口包括lo。

1、抓取包含10.10.10.122的数据包

tcpdump -i eth0 -vnn host 10.10.10.122

2、抓取包含10.10.10.0/24网段的数据包

tcpdump -i eth0 -vnn net 10.10.10.0/24

3.捕获包含端口22的数据包

tcpdump -i eth0 -vnn port 22

4、抓取udp协议的数据包

tcpdump -i eth0 -vnn udp

5、抓取icmp协议的数据包

tcpdump -i eth0 -vnn icmp

6、抓取arp协议的数据包

tcpdump -i eth0 -vnn arp

7、抓取ip协议的数据包

tcpdump -i eth0 -vnn ip

8、抓取源ip是10.10.10.122数据包。

tcpdump -i eth0 -vnn src host 10.10.10.122

9、抓取目的ip是10.10.10.122数据包

tcpdump -i eth0 -vnn dst host 10.10.10.122

10.抓取源端口为22数据包

tcpdump -i eth0 -vnn src port 22

11、抓取源ip是10.10.10.253且目的ip是22的数据包

tcpdump -i eth0 -vnn src host 10.10.10.253 and dst port 22

12、抓取源ip是10.10.10.122或数据包含端口为22

tcpdump -i eth0 -vnn src host 10.10.10.122 or port 22

13、抓取源ip是10.10.10.122和端口不是22的数据包

[root@ ftp]# tcpdump -i eth0 -vnn src host 10.10.10.122 and not port 22

14、抓取源ip是10.10.10.2且目的端口是22,或源ip是10.10.10.目的端口为80数据包。

tcpdump -i eth0 -vnn ( src host 10.10.10.2 and dst port 22 ) or ( src host 10.10.10.65 and dst port 80 )

15、抓取源ip是10.10.10.目的端口为22或源ip是10.10.10.目的端口是80数据包。

tcpdump -i eth0 -vnn ‘src host 10.10.10.59 and dst port 22’ or ’ src host 10.10.10.68 and dst port 80 ’

16.记录捕获的数据包/tmp/fill在文件中,在获取100个数据包后退出程序。

tcpdump –i eth0 -vnn -w /tmp/fil1 -c 100

17、从/tmp/fill记录中读取tcp协议的数据包

tcpdump –i eth0 -vnn -r /tmp/fil1 tcp

18、从/tmp/fill读取记录包括10.10.10.58的数据包

tcpdump –i eth0 -vnn -r /tmp/fil1 host 10.10.10.58

常用方法:

tcpdump -nnnv arp # 查找ARP攻击时确定攻击原MAC经常使用地址。 tcpdump -nnnv udp port 53 # DNS服务器53端口ARP查看攻击源时使用攻击。 tcpdump -nnnv udp and not port 53 # 可以确定非53端口是否有大流量UDP攻击 tcpdump -nnnv port 80 and host 192.168.0.1 # 找出从192.168.0.180端口收到或发送IP包。 tcpdump -nnnv ip host 210.27.48.1 and ! 210.27.48.2 #获取主机210.27.48.1除了和主机210.27.48.除所有主机通信外,所有主机通信ip包

tcpdump -nnnv host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 ) # 截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信

tcpdump -nnnv host ! 192.168.15.129 and ! 192.168.15.130 and dst port 80 # 捕获除主机192外.168.15.129与192.168.15.130 且到本机目标80端口的数据包。

tcpdump -nnnv src 192.168.15.129 and port 53 # 捕获由192.168.15.从129到本机53端口的数据包。无论是否UDP还是TCP

二、命令格式选项简介

tcpdump host 172.16.29.40 and port 4600 -X -s 500

tcpdump其命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ]

-a 将网络地址和广播地址转换为名称; -d 以人们能理解的汇编格式给出匹配信息包的代码; -dd 以C语言程序段的格式给出匹配信息包的代码; -ddd 以十进制的形式给出匹配信息包的代码; -e 在输出行打印数据链路层的头部信息; -f 将外部的Internet地址以数字形式打印; -l 将标准输出变成缓冲行; -n 不进行IP将地址转换为主机名; #eth0 < ntc9.1165 > router.domain.net.telnet,使用-n后变成了: eth0 < 192.168.0.9.1165 > 192.168.0.1.telnet。 -t 不打印输出每行时间戳; -v 在ip可包括在包中ttl以及服务类型的信息; -vv 输出详细的报文信息; -c 在收到指定的包的数目后,tcpdump就会停止; -F 从指定文件中读取表达式,忽略其他表达式; -i 指定监控网络接口; -r 从指定的文件中读取包(这些包通常通过-w产生选项); -w 将包直接写入文件中,不进行分析和打印; -T 监听包直接解释为指定类型的报纸,常见类型有rpc(远程调用)和snmp(简网络管理协议) -nn 不转换端口名称。 #使用上述信息-nn后来变成:eth0 < ntc9.1165 > router.domain.nt.23。  

三、tcpdump的表达式介绍

表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表 达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会 被截获。 在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host, net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是 host. 第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src , 这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27. 48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则 缺省是src or dst关键字。 第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在 FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和e ther具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会 监听所有协议的信息包。 #-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx  

除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less, greater,还有三种逻辑运算,取非运算是 ‘not ’ ‘! ‘, 与运算是’and’,’&&’;或运算 是’o r’ ,’||’; 这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来 说明。 (1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包: #tcpdump host 210.27.48.1 (2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令: #tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 ) (3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: #tcpdump ip host 210.27.48.1 and ! 210.27.48.2 (4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令: #tcpdump tcp port 23 host 210.27.48.1  

四、 tcpdump 的输出结果介绍

下面我们介绍几种典型的tcpdump命令的输出信息

(1) 数据链路层头信息

使用命令#tcpdump --e host ice ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条 命令的输出结果如下所示: 21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice. telnet 0:0(0) ack 22535 win 8760 (DF) 分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该 数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它 表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的 目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice. telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.  

(2) ARP包的TCPDUMP输出信息

使用命令#tcpdump arp 得到的输出结果是: 22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a) 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a) 分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是 ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE 的MAC地址。

(3) TCP包的输出信息

用TCPDUMP捕获的TCP包的一般输出信息是: src > dst: flags da ta-seqno ack window urgent options src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) “.” (没有标记); data-seqno是数据包中的数据的顺序号, ack是 下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.

(4) UDP包的输出信息

用TCPDUMP捕获的UDP包的一般输出信息是: route.port1 > ice.port2: udp lenth UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机 ICE的port2端口,类型是UDP, 包的长度是lenth

五、抓包生产实战

1、使用tcpdump排查MySQL数据库tps飙升的问题

当时程序中并没有记录所有执行的sql语句。因此,没有一个现成的数据文件供分析。Sql语句是通过网络以文本方式传输到mysql服务器端的。因此我们完全可以通过tcpdump这个工具把所有的sql语句捕获到。

首先,为了便于比对,我先把一台服务器上的代码回滚到上线前的版本。

其次,我在两台服务器上同时执行tcpdump命令,以捕获所有执行的sql脚本。这两台服务器分别运行着上线前的旧版本程序和上线后的新版本程序。抓包命令如下:

$sudo tcpdump -i eth0 -A -s 3000 port 3306 > ~/sql.log

注意,我们在使用tcpdump的时候加了-A参数,这样就可以把sql语句都显示出来了。更多tcpdump使用,可以查看文章 调试利器之tcpdump详解

大约执行1分钟后,同时停止执行。这个时候,sql.log文件中已经包含了这段时间执行的所有sql语句。示例如下:

$grep ‘update’ ./sql.log | head
…5u.vD…update session_table set expire=’2014-12-12 20:01:23’ where sess_id = ‘demostring123’ limit 1

既然我们现在已经有了所有执行的sql语句,我们就可以很容易的通过使用grep, wc 等命令分析出是那些sql语句执行次数猛增了。

2、抓k8s pod包

需求:查询k8s 哪个pod访问地址10.1.2.148

[root@k8s-wgx-master-100 ~]# tcpdump -i cni0 -vnn dst host 10.1.2.148
tcpdump: listening on cni0, link-type EN10MB (Ethernet), capture size 262144 bytes
-----------
16:52:55.419444 IP (tos 0x0, ttl 64, id 29694, offset 0, flags [DF], proto TCP (6), length 60)
    10.130.2.77.38704 > 10.1.2.148.80: Flags [S], cksum 0x1992 (incorrect -> 0x9594), seq 570124070, win 29200, options [mss 1460,sackOK,TS val 4051375320 ecr 0,nop,wscale 9], length 0
16:52:55.420007 IP (tos 0x0, ttl 64, id 29695, offset 0, flags [DF], proto TCP (6), length 52)
    10.130.2.77.38704 > 10.1.2.148.80: Flags [.], cksum 0x198a (incorrect -> 0x718d), ack 782493155, win 58, options [nop,nop,TS val 4051375321 ecr 4142053680], length 0
16:52:55.428356 IP (tos 0x0, ttl 64, id 29697, offset 0, flags [DF], proto TCP (6), length 52)
    10.130.2.77.38704 > 10.1.2.148.80: Flags [.], cksum 0x198a (incorrect -> 0x6cb9), ack 534, win 60, options [nop,nop,TS val 4051375329 ecr 4142053688], length 0
16:52:55.428909 IP (tos 0x0, ttl 64, id 29698, offset 0, flags [DF], proto TCP (6), length 52)
    10.130.2.77.38704 > 10.1.2.148.80: Flags [F.], cksum 0x198a (incorrect -> 0x6cb6), seq 685, ack 535, win 60, options [nop,nop,TS val 4051375330 ecr 4142053688], length 0
16:52:55.470916 IP (tos 0x0, ttl 64, id 3063, offset 0, flags [DF], proto TCP (6), length 60)
    10.130.2.77.38710 > 10.1.2.148.80: Flags [S], cksum 0x1992 (incorrect -> 0x0064), seq 4280033019, win 29200, options [mss 1460,sackOK,TS val 4051375372 ecr 0,nop,wscale 9], length 0
16:52:55.471468 IP (tos 0x0, ttl 64, id 3064, offset 0, flags [DF], proto TCP (6), length 52)
    10.130.2.77.38710 > 10.1.2.148.80: Flags [.], cksum 0x198a (incorrect -> 0x4b37), ack 3610955327, win 58, options [nop,nop,TS val 4051375372 ecr 4142053731], length 0
16:52:55.471555 IP (tos 0x0, ttl 64, id 3065, offset 0, flags [DF], proto TCP (6), length 776)

最终查询pod ip为:10.130.2.77  -->  10.1.2.148

标签: 红外光电传感器st198a

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司