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手册页,您只能指定以下protos : ether , fddi , tr , wlan , ip , ip6 ,arp, rarp , decnet , tcp和udp 。
但是,你可以使用像这样的切片运算符: "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"
也可以。
- docker-compose swarm:强制容器在特定主机上运行
- 是否有可能分配一个特定的节点来创build容器与docker群?
- 如何通过Nomad作业文件将文件复制到Docker容器
- 无法从Docker容器访问互联网
- Docker – 使用Redis,Postgres,ElasticSearch,NGINX,Workers和多个ruby应用程序设置Web应用程序的build议
- 在$ PATH中找不到可执行文件
- dockerfile java.lang.NumberFormatException:对于inputstring:“5B [”
- tcpdump报告Docker容器中以–privileged开头的错误
- 无法连接到使用Java API在本地虚拟机上运行的ElasticSearch Docker群集