如何用tcpdump识别udp数据包

我正在尝试使用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标志? 或者至less总是显示,如果这是UDP?

或者我将不得不做一些复杂的logstash过滤来整理DNS和SNMP?

谢谢

我是说你的优先级是过滤出哪些数据包是TCP,哪些是UDP?

虽然我不完全确定这是对您的问题的完整解决scheme,但一种select是通过级别4协议过滤来自tcpdump的输出。

这可以如下完成,只显示UDP数据包:

 tcpdump 'udp' 

相当于只显示TCP数据包是:

 tcpdump 'tcp' 

我不知道是你的意图,但你只是使用-v选项,然后你有这样的输出,你有“原型”:

 1507132726.499248 IP (tos 0x0, ttl 64, id 60959, offset 0, flags [DF], proto UDP (17), length 59)