我正在尝试使用 tcpdump 自动处理 pcap(以将它们存储在 ELK 中)。我的问题是我需要访问 TCP 标志,但我无法识别数据包是 TCP 还是 UDP。
如果我使用-q
,则目标端口号后面有一个非常明显的字段,但不会显示 TCP 标志:
Oct 04 16:47:21.058974 00:08:e3:ff:fc:04 00:00:5e:00:01:19 171: 10.193.47.54.3389 > 10.60.2.87.54075: tcp 117 (DF) [tos 0x2 (E)] (ttl 127, id 14452, len 157)
Oct 04 16:47:21.058990 2c:76:8a:53:2f:d6 00:08:e3:ff:fc:04 157: 10.60.7.17.54934 > 10.194.151.66.53522: udp 115 (ttl 62, id 0, len 143, bad ip cksum 0! -> c90d)
如果我删除该-q
标志,该字段大部分会消失。它只填充 UDP 数据包,但不是每次都填充(尤其是 DNS 和 SNMP 请求)。
Oct 04 16:49:52.964277 00:08:e3:ff:fc:04 00:00:5e:00:01:19 0800 172: 10.194.5.11.53 > 10.202.7.126.55187: 61642 NXDomain 0/1/0 (130) (ttl 126, id 10111, len 158)
Oct 04 16:51:59.321776 2c:76:8a:53:2f:d6 00:08:e3:ff:fc:04 0800 128: 10.60.2.46.161 > 10.194.125.121.41624: |30|54|02|01|04|05C=toto47 |a2|48GetResponse(60)|02|02|02|01|02|01|30|3c |30|12|06|0c.1.3.6.1.2.1.25.5.1.1.2.4305=|02|022824 |30|13|06|0c.1.3.6.1.2.1.25.5.1.1.1.4305=|02|03539869 |30|11|06|0c.1.3.6.1=[|snmp] (ttl 62, id 0, len 114, bad ip cksum 0! -> e7d6)
有没有办法让 l4 协议始终显示在输出中,而不会丢失 TCP 标志?或者至少始终显示这是 UDP 吗?
或者我必须进行一些复杂的 logstash 过滤来整理 DNS 和 SNMP?
谢谢
答案1
我不确定这是否是你的本意,但你只需使用 -v 选项,然后你就会得到这样的输出,其中有“proto”:
1507132726.499248 IP (tos 0x0, ttl 64, id 60959, offset 0, flags [DF], proto UDP (17), length 59)
答案2
我说的对吗?你的首要任务是过滤出哪些数据包是 TCP 数据包,哪些是 UDP 数据包?
tcpdump
虽然我不完全确定这是否能完全解决你的问题,但其中一个选择是通过 4 级协议过滤输出。
可以按如下方式执行此操作以仅显示 UDP 数据包:
tcpdump 'udp'
仅显示 TCP 数据包的等效操作是:
tcpdump 'tcp'