Docker Ubuntu 16.04 LTS - 使用tcpdump捕获GRE数据包

时间:2017-05-09 02:58:40

标签: ubuntu docker tcpdump

我创建了一个源自ubuntu:16.04 docker image的泊坞窗图片,并根据此图片启动了一个容器。在这个容器中,我尝试使用tcpdump捕获GRE数据包。但是,当我在容器中运行tcpdump -i <interface> proto gre时,出现以下错误:

tcpdump: unknown ip proto 'gre'

知道如何解决这个问题吗?

注意:容器使用主机网络堆栈(即容器以--net="host"启动)

提前致谢。

1 个答案:

答案 0 :(得分:0)

根据pcap-filter手册页,您只能指定以下 protos 以太 fddi tr wlan ip ip6 ,arp, rarp decnet tcp udp

但是,您可以使用切片运算符代替:"ip[9:1]=47"

如果您参考RFC791 Section 3.1,您会看到IP标头的 Protocol 字段是标头的第10个字节,或者是位于偏移9的1字节字段,是ip[9:1]隔离的。此外,如RFC2784, Section 4中所述(以及IANA注册为协议号47),GRE是协议47。

备注

  • 虽然pcap-filter和tcpdump手册页没有使用术语切片来描述[]运算符,但Wireshark确实在tcpdump运算符中使用了这个术语{3}}手册页,因此我也在这里使用它。
  • =示例在其示例中使用单个等号==,而Wireshark在其示例中使用双等号"ip[9]==47"。在实践中,它们都有效,所以请随意使用其中任何一个。
  • 由于您只对单个字节感兴趣,因此您实际上并不需要在 slice 运算符中指定长度值,template <class T> struct Container {}; template <> struct Container<int> {}; 将起作用也是。