通知:即日起,禁止携带Note 7登机,且不得作为航空货物托运或承运
06-17
1.简介 在网络排查过程中,经常需要抓包。 Windows有wireshark,Linux中最常用的是tcpdump,也是问得最多的一种。
问题:“iptables被限制后,tcpdump还能抓包吗?”,首先看数据包进入操作系统和退出的顺序:网卡nic -> tcpdump -> iptables(netfilter) -> app -> iptables( netfilter) -> tcpdump -> 网卡nic很明显。数据包到达网卡后,tcpdump有能力直接捕获,不受iptables的影响。
此时数据包还没有到达iptables的PREROUTING链。到达APP后,处理后的数据包将从iptables中出去。
,最终会走到POSTROUTING链,然后到tcpdump,所以此时受到iptables的OUTPUT和POSTROUTING链的影响。这两条链的规则决定了tcpdump是否可以捕获出站数据包。
iptables各链的工作顺序如下(图片来自网络):本文将总结日常工作中的一些用法和技巧,同时还附上tcpdump官方文档: -i any host ..1.1 #-i指定网络卡一样。此时,如果与对端主机有数据交互,则屏幕上有输出信息,并且该信息不会保存在文件中。
例如下面的icmp数据包:CTRL+C向进程发送SIGINT信号,中断tcpdump当前的抓包,你会发现这些数据包会默认显示在屏幕上。如果直接用tcpdump分析简单的数据包是没有问题的。
但在大报文交互场景下,需要对特定流进行过滤。这种情况下用tcpdump分析的效率会很低。
正确的做法是用tcpdump抓包并保存为抓包文件。 (.pcap和.cap都可以),然后使用wireshark进行分析。
与此同时,这里仍然存在问题。默认情况下,tcpdump会将IP反向解析为主机名或域名。
-nn 参数可以禁用反向解析以增加可读性。2. 写入文件并检查消息(-w、-r)。
那么改进后的抓包命令可以是: 代码语言:txt copy tcpdump -i any host ..1.1 -nn -v -w client.pcap-nn :禁用反向解析 -v:显示详细抓包信息 -w:写入client.pcap,你可以看到第一条命令。 IP 将不再被解码为主机名或域名。
第二个命令-w写入客户端。在 .pcap 之后,使用 -r 参数指定要查找的消息文件的内容。
3. 指定源IP 或目标IP 或网段(src、dst、net)。如果只想抓一个方向的流量,可以用 src 指定源,用 dst 指定目标: 代码语言:txt copy tcpdump -i any src host ..1.1 -nn 只会抓一个方向的流量。
如图所示,只有icmp回复和arp报文来自1.1方向。 arp缓存表过期后,会发送广播获取mac地址。
dst 指定到达目的方向的报文,过滤本端向对端发送的 icmp 请求: 代码语言:txt copy tcpdump -nn -i any dst ..1.1 指定网段: 代码语言:txt copy tcpdump -nn -i 任何网络。 .1.1/.指定每个数据包捕获的字节数(-s)。
有时候我们在分析数据包的时候,只需要分析头部即可。无需分析每个数据包的数据部分。
这可以最大限度地减少捕获文件的大小。大小,-s指定每条消息前面捕获多少字节:代码语言:txt copy tcpdump -nn -i any -s 84 host ..1.1 #imcp协议默认为“56字节”数据字节+“28字节” ICMP头,共84字节。
如果不指定-s参数,tcpdump默认只会捕获每条消息的前56个字节。 -s 0 可以不限制字节数,每次都捕获整个消息。
包: 代码语言:txt 复制 tcpdump -nn -i any -s 0 host ..1.1 如果是icmp,icmp头56字节,默认64字节: 5.指定端口和协议(端口,最好是捕获有问题的端口或协议比捕获所有端口范围和协议更能对症下药,语法也很简单: 代码语言:txt copy tcpdump -nn -i any -s 0 icmp #只捕获icmp协议。 icmp运行在网络层,所以不需要指定端口来捕获icmp,那么可以这样编写tcp端口捕获: 代码语言:txt copy tcpdump -nn -i any - s 60 tcp port 80 #作为演示,这里只捕获了60个头。
同样的原理,对于byte字节也适用,那么udp可以这样写: 代码语言:txt copy tcpdump -nn -i any -s 0 udp port 22捕获端口范围,需要使用 portrange 参数: 代码语言:txt copy tcpdump -nn -i any tcp portrange 53-80 如果不确定协议,只需指定端口: 代码语言:txt copy tcpdump -nn -i any -s 0 port .tcpdump 的逻辑表达式(或、与、非)逻辑语句,顾名思义,只要接触过一点编程的话,就会知道它指的是是或否,以及或、和、不是。其中,not也可以用作!。
这三个参数比较常用,可以帮助我们过滤掉有用的信息,并在它引用的地方输入。使用 和 指定目标和协议: 代码语言:txt copy tcpdump -nn -i any -s 0 host ..1.1 和 icmp 使用 或 指定多个过滤条件: 代码语言:txt copy tcpdump -nn -i any -s 0 host ..1.1 或 icmp 或 src net ..1.1/32 使用 或 或 !排除过滤条件:代码语言:txt copy tcpdump -nn -i any -s 0 ! net .16.0.0/16 和 icmp 以及! tcp 指定抓包的网段掩码就够了。
综上所述,您可以举一反三,组合起来灵活运用。只要抓包逻辑语法正确,哪怕又臭又长:代码语言:txt copy tcpdump -nn -i any -s 0 dst host ..1.and icmp and src net ..1.1/32 或者\( 主机 ..1.1 \) 和 ! tcpbash 解析每个命令的最大字符数。
那些又臭又长又无意义的语句是没有用的。它不适合在生产环境中使用。
相反,您可以在日常练习中拼凑并测试多种组合。当您达到熟练程度后,您可以轻松找到您想要获取哪些包以及如何在生产环境中使用它们。
7、指定数据包大小过滤(大于、小于) tcpdump 提供了指定每个数据包大小的过滤方法,这在需要过滤大数据包或特定大小数据包的场景下特别有用。过滤大于字节的数据包: 代码语言: txt copy tcpdump -nn -s 0 -i any host ..1.1 及以上和 icmp 过滤小于字节的数据包: 代码语言: txt copy tcpdump -nn -s 0 -i any Host 。
.1.1 与 less 和 icmp 一起使用,缩小范围: 代码语言:txt 复制 tcpdump -nn -s 0 -i any host ..1.1 与 less 和greater .Flags 标签解释 以下命令捕获完整的连接,包括 3 个双向握手和四向挥手: 各个Flags的含义如下: Flags含义 [S] SYN [.] ACK [S.] SYN, ACK [P.] PUSH [R.] RST [F.] FIN [DF] Don't Fragment(不分片),当DF=0时,允许分片 [FP.]FIN、PUSH、ACK。前面提到,如果使用 tcpdump 不容易直观地分析消息,可以使用 -w 将其保存到文件中,然后使用wireshark 进行分析。
:建立三次握手后,Tcp Keep-Alive保持连接,然后客户端主动挥手断开连接。客户端对应的行为如下: 9、指定抓包数量、包大小、轮询抓包(-c、-W、-C、-G) 在某些场景下,是需要分割抓包文件并轮询抓包,那么可以使用这些参数: -c 指定抓包数量 -W 写入抓包文件的最大数量,以MB为单位 -C 写入的大小上限抓包文件 -c 指定抓包 2 个: 代码语言:txt copy tcpdump -i any -s 0 net ..1.1/32 -c 2- C 指定写入文件大小上限为 1M: 代码语言: txt copy tcpdump -i any -s 0 -C 1 -v -w client.pcap -W 指定写入10个抓包文件,每个文件仅抓包1M,循环写入: 代码语言:txt copy tcpdump -i任何-s 0 -C 1M -v -W 10 -w client.pcap保存格式会在文件后缀中添加一个0-N的数字。
-G参数指定多少秒轮询并保存文件,通常采用时间格式。命令:代码语言:txt copy tcpdump -nn -i any -s 0 -G 5 -Z root -v -w %m-%d-%H:%M:%S.pcap #每五秒保存一次文件。
-Z参数指定每次写入新文件时,都会以root权限执行。 -w 时间格式是date命令的时间格式值,可以在时间之间使用。
-G 通常与 -C 配合使用,每次指定每个文件的固定大小: 代码语言:txt copy tcpdump -nn -i any -s 0 -C 1 -G 5 -v -w %m-%d -%H:%M:%S.pcap 还可以与 timeout 命令一起使用,在固定时间后停止抓包: 代码语言:txt copy timeout 10 tcpdump -nn -i any -s 0 -G 5 -v - w %m -%d-%H:%M:%S.pcap 仅捕获 10 秒,每 5 秒轮询并保存文件。 10. 捕获具有指定标志位的数据包。
虽然不常用来捕获具有指定Flag位的数据包,但wireshark通常用于分析和过滤。不过,如果你熟悉tcpdump上的这个功能,并且知道你想要什么数据包,那么tcpdump可以在这一层进行过滤。
发送对您有用的消息并减少不必要的消息数量。只捕获SYN标志位不为0,且只捕获一个数据包: 代码语言:txt copy tcpdump -nn -i any -s 0 -c 1 'tcp[tcpflags] & tcp-syn != 0' 捕获一次完整的握手所需flags:代码语言:txt copy tcpdump -nn -i any -s 0 'tcp[tcpflags] & (tcp-syn|tcp-ack|tcp-fin) != 0' 与host ..1.1同时,也可以用二进制表示,但可读性较差:代码语言:txt copy tcpdump -nn -i any -s 0 'tcp[13] & (1|2|18) != 0' and net ..1.1 /32 和 tcp 端口 80 tcp 字段存储在 tcp 标头的第 14 个字节中。
在编程中,从0开始计数,所以tcp13代表tcp头字段。附上过滤常用的几个字段的含义: 表达式含义 tcp13=2 捕获SYN包,二进制格式为:tcp23=18 捕获返回SYN的ACK包,二进制格式为:tcp13&2=2 捕获SYN和SYN对应的ACK包 tcp13=24 捕获PSH-ACK包 tcp13&1=1 捕获FIN-ACK包 tcp13&4=4 捕获RST包 其它协议如icmp: 代码语言:txt copy tcpdump -nn -i any -c 2 -s 0 host ..1.1 and 'icmp[icmptype] = icmp-echo or icmp[icmptype] = icmp-echoreply' 3.总结上面总结的是??一些比较常用的方法和工作中的技巧。
在不同的问题场景下,如果知道要抓什么包,知道自己需要什么包,抓包就越好。有了精准,定位问题就不会像大海捞针一样,分析包的过程也会变得更加高效、从容。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-21
06-18
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用