web-dev-qa-db-ja.com

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)

TCPフラグを失うことなく、l4プロトコルが常に出力に表示されるようにする方法はありますか?または、少なくともこれがUDPである場合に常に表示する方法はありますか?

または、DNSとSNMPを整理するために、いくつかの複雑なlogstashフィルタリングを行う必要がありますか?

ありがとうございました

2
Pierre Bardou

それがあなたの意図であるかどうかはわかりませんが、-vオプションを使用するだけで、「proto」がある次のような出力が得られます。

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

私はあなたの優先順位がどのパケットがTCPであり、どのパケットがUDPであるかをフィルタリングすることを除外することであると言っていますか?

これが問題の完全な解決策であるかどうかは完全にはわかりませんが、1つのオプションは、レベル4プロ​​トコルでtcpdumpからの出力をフィルタリングすることです。

これは、UDPパケットを表示するために次のように実行できます。

tcpdump 'udp'

TCPパケットのみを表示するのと同じです:

tcpdump 'tcp'
0
PicoutputCls