Dokcer 容器内抓包
这篇文章讲述一种在 Docker 容器内抓包的方法。
背景知识
nsenter 是一个可以用来进入到目标程序所在 Namespace 中运行命令的工具,一般常用于在宿主机上调试容器中运行的程序。
一个比较典型的用途就是进入容器的网络命名空间。通常容器为了轻量级,大多都是不包含较为基础网络管理调试工具,比如:ip、ping、telnet、ss、tcpdump 等命令,给调试容器内网络带来相当大的困扰。
nsenter 命令可以很方便的进入指定容器的网络命名空间,使用宿主机的命令调试容器网络。
除此以外,nsenter 还可以进入 mnt、uts、ipc、pid、user 等命名空间,以及指定根目录和工作目录。
抓包步骤
1. 查看容器的进程id
1 | docker inspect --format "{{.State.Pid}}" <container id/name> |
2. 进入容器的命名空间
1 | nsenter -n -t <container root id> |
3. 容器内抓包(指定网卡和端口)
1 | sudo tcpdump -i lo tcp port 18051 -vvv -w 18051.out |
内容输出到 18051.out 文件
4. 使用 Wireshark 查看文件