2017-05-09 58 views
0

我已经创建了一个从ubuntu:16.04docker image派生的泊坞窗图像,并基于此图像启动了一个容器。在这个容器中,我尝试使用tcpdump捕获GRE数据包。然而,当我在容器内运行tcpdump -i <interface> proto gre,我得到以下错误:Docker Ubuntu 16.04 LTS - 使用tcpdump捕获GRE数据包

tcpdump: unknown ip proto 'gre' 

任何想法如何这可能是固定?

注意:容器使用主机网络堆栈(即,容器开始--net="host"

在此先感谢。

+0

显示Dockerfile – user2915097

回答

0

按照pcap-filter手册页,你只能指定以下PROTOSFDDITRWLANIPIP6,ARP,RARPdecnet,tcp and udp

但是,您可以使用切片运营商喜欢这个:"ip[9:1]=47"

如果你指的RFC791 Section 3.1,你会看到,IP报头的协议字段是报头的10字节,或位于偏移量9的1字节字段,这是ip[9:1]分离的。此外,如在RFC2784, Section 4指定(以及被登记为协议号47 IANA),GRE是协议47.

NOTES

  • 虽然PCAP过滤器和tcpdump手册页不要t使用术语切片来描述[]运算符,Wireshark在wireshark-filter手册页中确实使用了这个术语,因此我在这里也使用它。
  • tcpdump示例使用了一个等号=在他们的榜样,而Wireshark使用双等号==在他们的榜样。在实践中,他们都工作,所以随意使用任何一个。
  • 由于您只对单个字节感兴趣,因此您实际上不需要指定分段运算符中的长度值,"ip[9]==47"也可以正常运行。
+0

谢谢克里斯托弗看看这个。用'原取代的是(我),我能跑用'原主机(其上泊坞窗容器中运行)上gre'过滤器的tcpdump(二)泊坞窗 – jithinpt

+0

我内47'正常工作:一对夫妇点尝试过“ip proto 47”,但在我的测试中失败了。我可能会运行tcpdump/libpcap的旧版本(目前无法检查);你在主机上和docker中运行什么版本的tcpdump/libpcap? –

+0

另外,如果“ip proto gre”起作用,那么似乎pcap-filter文档需要更新。 –