我想收集 tcpdump 示例,尽可能多!
例如:如何过滤 eth0 上的 FTP 密码;或者如何过滤 HTTP 404 错误等。
答案1
它不进行任何过滤,但是此示例创建了一个方便的连续数据包嗅探器:
tcpdump -n -C 128 -W 100 -z /home/user/compress_logs.pl -i br0 -w /home/user/packetlogs/packetlog.pcap &
-n
不要对 IP 进行反向查找,不要将端口号转换为文本描述,不要将 MAC 地址转换为名称等。-C 128
每 128,000,000 字节轮换一次捕获文件-W 100
将要轮换的捕获文件数量(参见-C
)限制为 100-z /home/user/compress_logs.pl
compress_logs.pl
在每个旋转的捕获文件上运行脚本-i br0
接口捕获br0
-w /home/user/packetlogs/packetlog.pcap
使用文件名/home/user/packetlogs/packetlog.pcap
&
这由 bash 解析;表示该命令应该在后台运行(异步)
将其放入 /etc/rc.local 以在启动时运行。它会捕获接口上的所有数据包br0
,这些接口可能是两个作为分接头的接口,也可能是两个连接到被动分接头的接口,或者一个连接到镜像交换机端口的接口(我在实践中用过这三种接口)
它写入约 128MB 的文件,并会自动轮换最多 100 个文件。当它捕获 128MB 的数据时,它会关闭该文件,打开一个新文件,并使用旧文件名作为参数来分叉指定的命令 - 在本例中是一个小型 Perl 脚本,用于压缩先前捕获的文件,以便更快地从 IDS 服务器传输。
当我需要长时间(比如一两天)监控某个连接并需要返回并查找在特定时间发生的事件时,我会使用这个。在 Wireshark 中处理小文件比处理一个巨大的 pcap 文件要容易得多。
答案2
仅捕获 HTTP POST 数据:
tcpdump tcp[2:2] = 80 and \(tcp[20:4] = 1347375956
or tcp[24:4] = 1347375956
or tcp[28:4] = 1347375956
or tcp[32:4] = 1347375956
or tcp[36:4] = 1347375956
or tcp[40:4] = 1347375956
or tcp[44:4] = 1347375956
or tcp[48:4] = 1347375956
or tcp[52:4] = 1347375956
or tcp[56:4] = 1347375956
or tcp[60:4] = 1347375956\)
有点笨重但肯定有用。tcp[2:2]
从 TCP 标头的位置 2 开始捕获 2 个字节(即端口,端口 80 用于 HTTP 流量)。
然后,我们要将 TCP 数据的前 4 个字节与“POST”进行比较。TCP 标头至少为 20(十进制)字节,但由于 TCP 选项的长度可变,从 0 到 40 字节(填充到 32 位边界并从 开始),我们必须测试从 20 到 60(十进制)的每 4 个字节。最后,1347375956
是 ASCII 文本“POST”的十进制大端二进制表示。对于其他 HTTP 类型,请使用以下值:
- GET
1195725856
(包括“GET”后的空格,因为我们正在与 4 个字节进行比较,所以需要空格) - 邮政
1347375956
- PUT
1347769376
(包括空格) - 删除
1145392197
(实际上只是“DELE”)
对于其他类型,请将 4 个 ASCII 字符转换为十六进制(必须精确使用 4 个字符),然后将十六进制字节视为一个数字并将其转换为十进制。例如,POST 为50 4f 53 54
。504f5354
转换为十进制为1347375956
。
答案3
将所有内容捕获到一个文件中(以便您稍后可以使用 Wireshark 或其他工具进行分析):
sudo tcpdump -i en0 -s0 -w ~/capture.pcap
-i en0
接口捕获en0
-s0
使用整个数据包(不截断--snarf 0)-w ~/capture.pcap
写入数据包捕获文件~/capture.pcap
答案4
如果您想监控 OpenWRT 路由器上的客户端 DNS 请求:
tcpdump -n -i br-lan dst port 53
-n
不要对 IP 进行反向查找,不要将端口号转换为文本描述,不要将 MAC 地址转换为名称等。-i br-lan
接口捕获br-lan
dst port 53
过滤目标端口 53,即 DNS 服务的端口