网站首页 > 开源技术 正文
在某些情况下,也许您想查看docker daemon和docker client之间的通信的数据流;也许您遇到docker命令不像您预期的那样工作;或者您想编写一个自己的docker客户端来使用API与docker daemon交互。在这些情况下,使用socat来查看docker client与docker daemon的交互就非常有用了。
socat是一个十分强大的命令行工具,它允许你在几乎任何类型的两个数据通道之间中继数据,从而可以嗅探到两个数据通道的通信,进行分析。可以把它看成是一个增强版本的netcat。
我们知道docker是典型的client/server架构的程序,通常默认的情况下,docker配置为通过本地的Unix domain socker来通信,如下图:
通过在客户端的请求和服务器的socker之间插入一个proxy Unix domain socker,使用socat,就可以嗅探到客户端和服务器端的通信。注意需要有root或者sudo的权限来使这种方法工作。如下图:
使用如下的命令来建立proxy socket同时用socat进行监听:
$ sudo socat -v UNIX-LISTEN:/tmp/dockerapi.sock UNIX-CONNECT:/var/run/docker.sock
上面的命令中-v使输出可读,该命令阻塞在前台运行。如果想让命令在后台运行,只需要在命令的结尾添加一个"&"符号。UNIX-LISTEN部分告诉socat在一个Unix socket上进行监听,UNIX-CONNECT告诉socat连接到Docker的Unix socket上。
下面打开另外一个命令行控制台,使用docker client发送一个命令到上面的proxy socket(即/tmp/dockerapi.sock),该socket会由socat将API调用中继到docker server的socket上,并且命令的具体内容会由socat监听到,命令如下:
$ sudo docker -H unix:///tmp/dockerapi.sock ps -a
socat监听到的内容:
> 2024/07/10 20:54:14.149900 length=92 from=0 to=91
HEAD /_ping HTTP/1.1\r
Host: api.moby.localhost\r
User-Agent: Docker-Client/26.1.1 (linux)\r
\r
< 2024/07/10 20:54:14.150454 length=316 from=0 to=315
HTTP/1.1 200 OK\r
Api-Version: 1.45\r
Builder-Version: 2\r
Cache-Control: no-cache, no-store, must-revalidate\r
Content-Length: 0\r
Content-Type: text/plain; charset=utf-8\r
Docker-Experimental: false\r
Ostype: linux\r
Pragma: no-cache\r
Server: Docker/26.1.1 (linux)\r
Swarm: inactive\r
Date: Wed, 10 Jul 2024 12:54:14 GMT\r
\r
> 2024/07/10 20:54:14.151629 length=113 from=92 to=204
GET /v1.45/containers/json?all=1 HTTP/1.1\r
Host: api.moby.localhost\r
User-Agent: Docker-Client/26.1.1 (linux)\r
\r
< 2024/07/10 20:54:14.152650 length=1853 from=316 to=2168
HTTP/1.1 200 OK\r
Api-Version: 1.45\r
Content-Type: application/json\r
Docker-Experimental: false\r
Ostype: linux\r
Server: Docker/26.1.1 (linux)\r
Date: Wed, 10 Jul 2024 12:54:14 GMT\r
Content-Length: 1650\r
\r
[{"Id":"5863ebaa1c8c13d6d90301a27cc60dce290d9713b64f2741ffdb5c05595d79b8","Names":["..."],...}]
可见,docker ps -a命令就是通过对docker server发送一个特定格式的HTTP的GET请求,第21行显示出了这个请求的格式。从第26行开始是docker server的HTTP响应。这样,我们便监听到了docker client和docker server间的实际通信内容。
所以socat不但可以用来debug Docker,而且还可以用于其它任何的网络服务,它是一个非常强大的工具。
猜你喜欢
- 2024-09-16 K8s新增Node(k8s新增node节点)
- 2024-09-16 Yocto Project Quick Build 翻译(totalview翻译)
- 2024-09-16 如何在Wordpress中加密保护网站视频和网页内容?
- 2024-09-16 使用socat反向Shell多台机器(nc 反向shell)
- 2024-09-16 RabbitMQ消息服务用户手册(rabbitmq消息数据类型)
- 2024-09-16 hideNsneak:一款功能强大的渗透测试基础设施管理工具
- 2024-09-16 ANDRAX:最新的Android智能手机上的渗透测试平台
- 2024-09-16 SOCAT(NC加强版)(socat nc)
- 2024-09-16 Kali Linux渗透工具【八】:系统命令注入漏洞工具 – Commix使用
- 2024-09-16 MYSQL在线DDL工具gh-ost你了解多少?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)