在日常网络排障中,如果你想要“秒杀”问题,抓包几乎是必备技能。
tcpdump
,则是耳熟能详的抓包神奇。
今天收集了一些实用的 tcpdump
使用示例,使用它们可提升你的网络故障排除和安全测试能力。
熟练掌握下面的 tcpdump
使用示例,可以帮助你更好的了解自己的网络。
对于自己部署玩的一些服务器来说,也会派上用场。
01
01 常用参数
下面的命令是使用 tcpdump
时常见的参数。
$ sudo tcpdump -i eth0 -nn -s0 -v port 80
-i:进行抓包的接口,通常是以太网卡或无线适配器,但也可能是
vlan
或其它东西。如果只有一个网络适配器,不用指定也行。
-nn :单个 (n) 不会解析主机名。两个 (nn) 不会解析主机名或端口。
这不仅对于查看 IP/端口号很方便,而且在抓包大量数据时也很方便,因为名称解析会减慢抓包速度。
-s0:抓包大小。 -s0 会将大小设置为无限制 。
如果您想抓包所有流量,或者从网络流量中提取二进制文件/文件,则需要此选项。
-v:详细,使用 (-v) 或 (-vv) 会增加输出中显示更详细信息,通常会显示更多协议特定的信息。
port 80 :端口过滤器,这里设置的是抓包端口 80 上的流量。
02 显示 ASCII 文本
-A
参数使得输出中包含抓包的 ascii
字符串。这样便于结合 grep
或其他命令解析输出。
另一个可以同时显示十六进制输出和 ascii
的参数是 -X
。
$ sudo tcpdump -A -s0 port 80
03 根据协议抓包
比如,过滤 UDP 流量,可以指定udp
,也可以指定使用协议17
,这两个命令效果一样。
TCP
对应的协议是 6。
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
04 根据 IP 抓包
使用 host
过滤器将同时抓包前往(目标)和来自(源)IP 地址的流量。
$ sudo tcpdump -i eth0 host 10.10.1.1
或者使用 src
或 dst
仅抓包单向流量。
$ sudo tcpdump -i eth0 src 10.10.1.20$ sudo tcpdump -i eth0 dst 10.10.1.20
05 抓包内容写入文件
将抓包文件写入磁盘,这样就可以用其它工具,比如 Wireshark 来分析。
$ sudo tcpdump -i eth0 -s0 -w test.pcap
06 行缓冲模式
指定缓冲模式,比如行缓冲(-l
)或数据包缓冲(-C
),可以让 tcpdump
的输出立即发送到管道命令,在故障排除时立即做出响应。
$ sudo tcpdump -i eth0 -s0 -l port 80 | grep 'Server:'
不指定缓冲模式,有可能会得不到预期的结果。
07 组合过滤器
在上面的示例中,可以使用使用下面的逻辑符号来组合不同的过滤器。
and or &&or or ||not or !
02
Tcpdump
命令参数很多,常常有多种方法可以实现同样的结果。
使用哪种方法取决于所需的输出以及线路上的流量。比如,在繁忙的千兆位链路上进行抓包可能会迫使您使用特定的低级数据包过滤器。
下面的示例中,将列举一些以最简单(因此最快)的方式获得结果的方法。
01 提取 HTTP 用户代理
从 HTTP 请求标头中提取 HTTP 用户代理。
$ sudo tcpdump -nn -A -s1500 -l | grep "User-Agent:"
通过使用 egrep
和多个匹配规则,可以从请求中获取用户代理和主机(或任何其他标头)。
$ sudo tcpdump -nn -A -s1500 -l | egrep -i 'User-Agent:|Host:'
02 仅捕获 HTTP GET 和 POST 数据包
仅指定与 GET
匹配的数据包。
0
$ sudo tcpdump -A -s0 port 80
只选择 POST
请求。
1
$ sudo tcpdump -A -s0 port 80
注意,使用此过滤器抓包的数据中可能不包含 POST 数据,因为POST
请求很可能会被拆分为多个 TCP
数据包。
上面的表达式中的十六进制是与 GET
和 POST
请求中的 ascii
对应的。
03 提取 HTTP 请求的 URL
从流量中解析主机和 HTTP
请求位置。
如果服务不在80 端口,则需要指定端口。
2
$ sudo tcpdump -A -s0 port 80
04 在 POST 请求中提取 HTTP 密码
3
$ sudo tcpdump -A -s0 port 80
05 从服务器和客户端抓包 Cookie
通过搜索 Set-Cookie
(来自服务器)和 Cookie
(来自客户端)来抓包 cookie
。
4
$ sudo tcpdump -A -s0 port 80
06抓包所有 ICMP 数据包
5
$ sudo tcpdump -A -s0 port 80
07 非 ECHO/REPLY 的 ICMP 数据包
对 icmp
类型进行过滤,以选择非标准 ping
包的 icmp
包。
6
$ sudo tcpdump -A -s0 port 80
08 抓包 SMTP/POP3 电子邮件
可以提取电子邮件正文和其他数据,下面的例子中仅解析电子邮件收件人。
7
$ sudo tcpdump -A -s0 port 80
09 NTP 的查询和响应的故障排除
8
$ sudo tcpdump -A -s0 port 80
10 抓包 SNMP 的查询和响应
使用 onesixtyone
快速 SNMP
协议扫描器,然后在本地网络上测试 SNMP
服务并捕获 GetRequest
和 GetResponse
。
模拟SNMP
扫描:
9
$ sudo tcpdump -A -s0 port 80
抓包SNMP
查询和扫描:
0
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
11 抓包 FTP 的凭证和命令
1
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
12 滚动抓包文件
针对大流量或长时间抓包时,自动创建固定大小的新文件会很有帮助,一般使用参数 -W
、 -G
和 -C
来完成。
下面的示例中,文件 capture-(hour).pcap
将每 (-G) 3600
秒(1 小时)创建一次,这些文件将在第二天被覆盖。
因此,最终应该得到 capture-{1-24}.pcap
,如果小时为 15
,则新文件为 (/tmp/capture-15.pcap
)。
2
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
13 抓包 IPv6 流量
使用 ip6
过滤器捕获 IPv6
流量。
可以使用 proto 6
或 proto 17
指定了 TCP
或UDP
协议。
3
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
从先前保存的抓包文件中读取UDP
的 IPv6
流量。
4
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
14 检测网络流量中的端口扫描
5
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
15 显示 Nmap NSE 脚本测试的示例过滤器
在 Nmap
机器上模拟NSE
脚本:
6
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
在目标机器上抓包:
7
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
16 抓包非本地主机上的开始和结束的数据包
通过选择 tcp-syn
和 tcp-fin
数据包,可以显示每个已建立的 TCP 会话,其中包含时间戳,但不包含数据。
8
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
17 抓包 DNS 请求和响应
比如下面的示例中可以看到对 Google
公共 DNS
的出站 DNS
请求和 A 记录(IP 地址)响应。
9
$ sudo tcpdump -i eth0 udp$ sudo tcpdump -i eth0 proto 17
18 抓包 HTTP 数据包
仅抓包端口 80 上的 HTTP 流量,避免抓包 TCP
会话 (SYN / FIN / ACK
)。
0
$ sudo tcpdump -i eth0 host 10.10.1.1
19 在 tcpdump 中抓包,在 Wireshark 中查看
一般方法是通过tcpdump
抓包之后保存成文件,再将文件拷贝到Wireshark
中查看。
不过,除此之外,还可以通过 SSH
连接将抓包的内容实时提供给 Wireshark
。
不要忘记 not port 22
,加上这个就不会捕获 SSH
流量了。
1
$ sudo tcpdump -i eth0 host 10.10.1.1
20 按数据包数量排名主机
列出一段时间内或数据包数量最多的通话者。
使用简单的命令行字段提取来获取 IP 地址,对出现的次数进行排序和计数。
用于排序和计数的流量与计数参数 -c
相关。
2
$ sudo tcpdump -i eth0 host 10.10.1.1
21 抓包 所有明文密码
下面的示例中,重点关注标准纯文本协议,并选择 grep
处理任何与用户或密码相关的内容。
通过 grep
的 -B5
选项,只获取前 5 行(可以提供有关的密码的上下文、主机名、IP 地址、系统)。
3
$ sudo tcpdump -i eth0 host 10.10.1.1
22 DHCP 示例
监视 DHCP
请求和回复, DHCP
请求在端口 67
上显示,回复在端口 68
上显示。
使用参数 -v 可以查看协议选项和其他详细信息。
4
$ sudo tcpdump -i eth0 host 10.10.1.1
文章来源:网络
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...