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

我创build了一个从ubuntu:16.04 docker镜像派生的docker镜像,并基于此镜像启动了一个容器。 在这个容器中,我尝试使用tcpdump捕获GRE数据包。 但是,当我在容器中运行tcpdump -i <interface> proto gre ,出现以下错误:

 tcpdump: unknown ip proto 'gre' 

任何想法如何可以解决?

:容器使用主机networking堆栈(即容器以--net="host"

提前致谢。

根据pcap-filter手册页,您只能指定以下protosetherfdditrwlanipip6 ,arp, rarpdecnettcpudp

但是,你可以使用像这样的切片运算符: "ip[9:1]=47"

如果您参考RFC791第3.1节 ,您将看到IP头的协议字段是头的第10个字节,或位于偏移量9的1字节的字段,这是ip[9:1]隔离的内容。 另外,如RFC2784第4节 (以及与IANA一起被注册为协议号47)中所规定的,GRE是协议47。

注意事项

  • 虽然pcap-filter和tcpdump手册页不使用术语切片来描述[]运算符,但Wireshark在wireshark-filter手册页中使用了这个术语,因此我也在这里使用它。
  • tcpdump示例在其示例中使用单个等号= ,而Wireshark在其示例中使用双等号== 。 在实践中,他们都工作,所以随意使用任何一个。
  • 既然你只关心一个字节,你实际上不需要在slice运算符中指定长度值, "ip[9]==47"也可以。