我创建了一个源自ubuntu:16.04
docker image的泊坞窗图片,并根据此图片启动了一个容器。在这个容器中,我尝试使用tcpdump
捕获GRE数据包。但是,当我在容器中运行tcpdump -i <interface> proto gre
时,出现以下错误:
tcpdump: unknown ip proto 'gre'
知道如何解决这个问题吗?
注意:容器使用主机网络堆栈(即容器以--net="host"
启动)
提前致谢。
答案 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。
备注强>:
tcpdump
手册页没有使用术语切片来描述[]
运算符,但Wireshark确实在tcpdump
运算符中使用了这个术语{3}}手册页,因此我也在这里使用它。=
示例在其示例中使用单个等号==
,而Wireshark在其示例中使用双等号"ip[9]==47"
。在实践中,它们都有效,所以请随意使用其中任何一个。template <class T>
struct Container {};
template <>
struct Container<int> {};
将起作用也是。