-
超详细的网络抓包神器 tcpdump 使用指南(3)
- 作者:谢金冉 分类:电脑技术 发布时间:2021-07-10 05:52:00
pim , ah , esp , carp , vrrp , udp 和 tcp 。因为通常的协议名称是保留字段,所以在于 proto 指令一起使用时,必须根据 shell 类型使用一个或两个反斜杠(...
pim
, ah
, esp
, carp
, vrrp
, udp
和 tcp
。因为通常的协议名称是保留字段,所以在于 proto 指令一起使用时,必须根据 shell 类型使用一个或两个反斜杠(/)来转义。Linux 中的 shell 需要使用两个反斜杠来转义,MacOS 只需要一个。例如,抓取 icmp 协议的报文:
$ tcpdump -n proto \\icmp# 或者$ tcpdump -n icmp
Port 过滤器
Port 过滤器用来过滤通过某个端口的数据报文,关键字为 port
。例如:
$ tcpdump port 389
3. 理解 tcpdump 的输出
截取数据只是第一步,第二步就是理解这些数据,下面就解释一下 tcpdump 命令输出各部分的意义。
21:27:06.995846 IP (tos 0x0, ttl 64, id 45646, offset 0, flags [DF], proto TCP (6), length 64) 192.168.1.106.56166 > 124.192.132.54.80: Flags [S], cksum 0xa730 (correct), seq 992042666, win 65535, options [mss 1460,nop,wscale 4,nop,nop,TS val 663433143 ecr 0,sackOK,eol], length 021:27:07.030487 IP (tos 0x0, ttl 51, id 0, offset 0, flags [DF], proto TCP (6), length 44) 124.192.132.54.80 > 192.168.1.106.56166: Flags [S.], cksum 0xedc0 (correct), seq 2147006684, ack 992042667, win 14600, options [mss 1440], length 021:27:07.030527 IP (tos 0x0, ttl 64, id 59119, offset 0, flags [DF], proto TCP (6), length 40) 192.168.1.106.56166 > 124.192.132.54.80: Flags [.], cksum 0x3e72 (correct), ack 2147006685, win 65535, length 0
最基本也是最重要的信息就是数据报的源地址/端口和目的地址/端口,上面的例子第一条数据报中,源地址 ip 是 192.168.1.106
,源端口是 56166
,目的地址是 124.192.132.54
,目的端口是 80
。 >
符号代表数据的方向。
此外,上面的三条数据还是 tcp 协议的三次握手过程,第一条就是 SYN
报文,这个可以通过 Flags [S]
看出。下面是常见的 TCP 报文的 Flags:
[S]
: SYN(开始连接)[.]
: 没有 Flag[P]
: PSH(推送数据)[F]
: FIN (结束连接)[R]
: RST(重置连接)而第二条数据的 [S.]
表示 SYN-ACK
,就是 SYN
报文的应答报文。
4. 例子
下面给出一些具体的例子,每个例子都可以使用多种方法来获得相同的输出,你使用的方法取决于所需的输出和网络上的流量。我们在排障时,通常只想获取自己想要的内容,可以通过过滤器和 ASCII 输出并结合管道与 grep、cut、awk 等工具来实现此目的。
例如,在抓取 HTTP 请求和响应数据包时,可以通过删除标志 SYN/ACK/FIN
来过滤噪声,但还有更简单的方法,那就是通过管道传递给 grep
。在达到目的的同时,我们要选择最简单最高效的方法。下面来看例子。
提取 HTTP 用户代理
从 HTTP 请求头中提取 HTTP 用户代理:
$ tcpdump -nn -A -s1500 -l | grep "User-Agent:"
通过 egrep
可以同时提取用户代理和主机名(或其他头文件):
$ tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'
只抓取 HTTP GET 和 POST 流量
抓取 HTTP GET 流量:
$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'
也可以抓取 HTTP POST 请求流量:
$ tcpdump -s 0 -A -vv 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354'
注意:该方法不能保证抓取到 HTTP POST 有效数据流量,因为一个 POST 请求会被分割为多个 TCP 数据包。
上述两个表达式中的十六进制将会与 GET 和 POST 请求的
猜您喜欢
- 如何关闭Windows Defender防火墙,解开网..2024-04-04
- 谷歌浏览器安全设置大揭秘:让你轻松..2024-03-30
- 老电脑连接WiFi大揭秘:轻松上手,让..2024-03-28
- 如何轻松开启Windows Telnet,轻松掌握网..2024-03-25
- 腾达路由器最新登录入口,轻松掌握网..2024-03-20
- 解除网络限速,轻松提升电脑上网速度..2024-03-19
相关推荐
- 大番茄U盘装机系统要如何安装系统?..2021-04-06
- 内存品牌排名_内存厂商排名2020..2021-07-09
- 系统城推出机顶盒cpu排行_2020机顶盒..2021-07-09
- win7笔记本电脑无法连接无线网络的原..2023-02-10
- 如何安装虚拟机|虚拟机安装win系统详..2017-10-12
- 电脑右键复制粘贴不能用如何解决?教..2021-07-27