如何捕获单个 docker 容器的数据包

Posted

技术标签:

【中文标题】如何捕获单个 docker 容器的数据包【英文标题】:How to capture packets for single docker container 【发布时间】:2017-01-14 17:18:51 【问题描述】:

主机上运行着许多容器。我想为其中的一个容器捕获数据包。有没有办法做到这一点?

【问题讨论】:

Wireshark 是你所需要的 按mac地址过滤网络。 ***.com/questions/24611001/… 和 github.com/manell/wireshark 检查以上两个链接可能会有所帮助。 我也在努力寻找这个。这是需要做的,但我正在努力获得正确的命令。 1、在host中找到docker创建的接口。请记住,一个是 docker 容器中的内部接口,一个是主机中的接口。 2. 我们可以简单地使用 $tcpdump -i 在那个接口上做 tcpdump 【参考方案1】:

您可以将一个容器的网络命名空间绑定到另一个容器:

docker run -it --rm --net container:<container_name> \
  nicolaka/netshoot tcpdump ...

要了解更多关于上面使用的 netshoot 图像,请参阅:https://github.com/nicolaka/netshoot

【讨论】:

【参考方案2】:

来自和用于带有 Wireshark 的工作站:

docker exec -ti <container id> cat /sys/class/net/eth0/iflink

28
ip link | grep 28

28: veth11b0a6c@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default

【讨论】:

【参考方案3】:

使用nsenter -n -t pid命令,进入同一个网络命名空间,然后执行tcpdump

【讨论】:

以上是关于如何捕获单个 docker 容器的数据包的主要内容,如果未能解决你的问题,请参考以下文章

使用burpsuite等代理工具抓取docker容器中的数据包

尝试从主机连接到 mysql docker 容器时出现“读取初始通信数据包”错误

如何让Wireshark可以捕获无线网卡的数据包

如何部署 Calico 网络?- 每天5分钟玩转 Docker 容器技术(67)

如何解码分析wireshark捕获的数据包

如何使用 SharpPcap 捕获 HTTP 数据包