如何使用 wireshark 捕获 docker 容器流量?

如何使用 wireshark 捕获 docker 容器流量?

我正在尝试理解一些使用 docker 和 wireshark 捕获和分析数据包的基本网络概念。我对此很陌生,所以如果我需要澄清任何事情,或者我完全以错误的方式处理这个问题,请告诉我。

我做了一些测试。我使用常规命令行(Windows 10)和 ubuntu docker 容器的命令行进行了这些测试。我认为最简单的方法是从任一命令行执行 ping 操作,然后查看它在 Wireshark 上显示的内容。下面是我将如何引用一些相关的 IP 地址:

  • 我在 Windows CLI 上调用“ipconfig/all”时获得的 IPv4 地址:windows IPV4
  • 我调用以下命令获取“临时 IPv6 地址”:windows temporary IPv6
  • 我在 ubuntu 终端上输入“ip a”得到的地址:ubuntu IP

以下是我运行的测试及其结果,在 wireshark 中分析所有接口,混杂模式已关闭:

  • 从 Windows CLI ping 一个网站,协议显示为 ICMPv6,wireshark 中的源 IP 显示为 Windows 临时 IPv6。
  • 从 ubuntu docker 容器 cli ping 一个网站,协议显示为 ICMP,源 IP wireshark 显示是 windows IPV4

在这些测试中,我从未在任何地方看到 ubuntu IP。事实上,当我在 wireshark 上检查与每个接口关联的 ip 地址时,我也没有在那里看到它。

为什么我在 wireshark 上看不到 docker 容器的 ip 地址?它不应该有自己的接口吗?

以下是我的最终目标,提供一些背景信息:我想运行一个 voip 程序并跟踪进出它的所有数据,以便更好地了解它的工作原理以及如何保护我的隐私。根据一些研究,最好的方法是将该程序隔离在 docker 容器中,并通过 wireshark 跟踪进出该 docker 容器的所有流量。我对 voip、docker、wireshark 和网络都很陌生,所以弄清楚这一切很困难。

我担心的另一个问题是,当我在 wireshark 的数据包中过滤我 ping 过的特定网站时,我什么也找不到,只有 ip 地址。这让我很担心,因为这的全部目的是能够分析进出程序的所有数据。ping 中的任何信息是否被遗漏在数据包之外?或者这些信息只是被加密了?

答案1

西门子已将之前公司内部的EdgesharkMIT 许可下的工具。Edgeshark 由部署在 Docker (Linux) 主机上的一项(实际上是两项)服务以及 Wireshark extcap 插件组成。Edgeshark 有一个 Web UI,可显示容器主机内的虚拟网络,此外还允许启动 Wireshark 实时捕获会话。

无需事先修改任何容器。只需部署

wget -q --no-cache -O - \
  https://github.com/siemens/edgeshark/raw/main/deployments/wget/docker-compose.yaml \
  | docker compose -f - up

另外安装Edgeshark extcap 插件适用于 Linux 和 Windows。

有一个在线手册以及有关如何部署和理解您将看到的内容的在线帮助。

相关内容