Docker 容器抓包

背景介绍

程序在运行期间出现问题时,通常会通过抓包的方式来分析、定位问题。非容器应用一般可以通过 fiddler、wireshark 等工具进行抓包,那么,运行在容器的应用一般通过什么方式进行抓包呢?

容器应用一般可以通过 tcpdump、ngrep 等兼容 Linux 的命令行工具进行抓包,如果只对 http 进行抓包,可以简单使用 ngrep。以下将介绍如何使用 ngrep 对容器进行抓包。

案例演示

我们使用 nginx 的镜像启动两个容器 http-server,http-client 分别代表服务端和客户端,同时对服务端和客户端进行抓包进行分析。

  • 启动 http-server

docker run --name http-server -d nginx:alpine

380a7c7d87ff29c79631a7b5479ff338.png

  • 启动 http-client

docker run --name http-client --link http-server:http-server -d nginx:alpine

eb8596b9987faca6c6119ab423d1cc39.png

  • 安装 ngrep

docker exec -it http-server sh


# 修改源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories


apk update
apk add ngrep


docker exec -it http-client sh


# 修改源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories


apk update
apk add ngrep

34e215b014628a25758a42d03c72c885.png

由于本文示例使用的是 alpine 的操作系统,所以上述指令只针对 alpine,其它操作系统请参考:

# ubuntu or debian
# sed -i 's|https\?://[^/]\+/|http://mirrors.aliyun.com/|' /etc/apt/sources.list
apt-get update -y
apt-get install ngrep -y


# centos 7
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum update -y
yum install ngrep -y
  • 启动 ngrep

启动 ngrep 并监听 80 端口:

ngrep port 80

5236a08ffff5f1d2c18dfb25df3d9b28.png

  • GET 请求抓包分析

curl http://http-server/?name=ErikXu

f35d96771edc29bc4b969f7758c10293.png

dcdb4a54a887d28c1aad72f4d91875f8.png

从上图可以看出客户端和服务端的抓包内容是相同的,都是 3 个包:

第一个是从客户端(172.17.0.3:44076)发送给服务端(172.17.0.2:80)的包,请求方式为 GET,请求地址是 /?name=ErikXu。

第二个是服务端回给客户端的包,返回状态码 200。

第三个也是服务端回给客户端的包,返回 html 的内容。

  • POST 请求抓包分析

curl -X POST "http://http-server" -H  "accept: */*" -H  "Content-Type: application/json" -d "{\"name\":\"string\",\"body\":\"string\"}"

e8a445a50224e2671fe52f5a71406513.png

f35acf8d44f05f639e6e97743e1714c0.png

从上图可以看出客户端和服务端的抓包内容是相同的,都是 2 个包:

第一个是从客户端(172.17.0.3:44076)发送给服务端(172.17.0.2:80)的包,请求方式为 POST,请求地址是 /,请求体内容是 {"name":"string","body":"string"}。

第二个是服务端回给客户端的包,返回状态码 405 及相关提示信息。

参考总结

以上就是本文希望分享的内容,如果大家有什么问题,欢迎在公众号 - 跬步之巅留言交流。

原创不易,觉得不错还请一键三连,您的支持是我持续输出的最大动力。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值