socat的下载和基础使用

Posted XnobodyT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socat的下载和基础使用相关的知识,希望对你有一定的参考价值。

简介一下socat的下载和使用,内容比较简介。

1.socat的下载

apt-get install -y socat

2.socat的简单使用

这里的简单使用其实就是指建立虚拟串口进行通信。

(1)创建虚拟串口

socat -d -d pty,raw,echo=0 pty,raw,echo=0

其中,pty表示伪终端,raw表示以原始数据形式进行传输,echo=0表示输入字符时不回显。
终端显示如下信息,表示成功创建了两个虚拟串口:

2023/04/16 14:23:10 socat[27095] N PTY is /dev/pts/1
2023/04/16 14:23:10 socat[27095] N PTY is /dev/pts/2
2023/04/16 14:23:10 socat[27095] N starting data transfer loop with FDs [5,5] and [7,7]

这里打开的端口不一定是1和2,可以结合自己情况进行修改。

(2)打开两个终端分别连接虚拟串口

在第一个终端中输入以下命令连接第一个虚拟串口:

screen /dev/pts/1 9600

其中,screen是一个用于连接终端的命令行工具,/dev/pts/1是第一个虚拟串口名,9600为波特率。

在第二个终端中输入以下命令连接第二个虚拟串口:

screen /dev/pts/2 9600

(3)传送和接收消息

在刚打开的端口输入信息,就可以在另一个端口看到发送的消息了。

如何使用 netcat/socat/telnet 手动连接到 websocket?

【中文标题】如何使用 netcat/socat/telnet 手动连接到 websocket?【英文标题】:How do I connect to a websocket manually, with netcat/socat/telnet? 【发布时间】:2014-10-22 12:55:51 【问题描述】:

我正在尝试“手动”连接到reference websocket echo server,以了解协议的工作原理(为此我使用的是 socat)。但是,服务器总是在不提供答案的情况下关闭连接。知道为什么吗?

这是我的工作:

socat - TCP:echo.websocket.org:80

然后,我在终端中粘贴以下文本:

GET /?encoding=text HTTP/1.1
Origin: http://www.websocket.org
Connection: Upgrade
Host: echo.websocket.org
Sec-WebSocket-Key: P7Kp2hTLNRPFMGLxPV47eQ==
Upgrade: websocket
Sec-WebSocket-Version: 13

我在同一台机器上用开发者工具嗅探连接的参数,在 Firefox 中,它完美地工作:因此,我认为它们是正确的。但是在那之后,服务器会立即关闭连接,而不提供答案。为什么?如何“手动”实现协议?

我想在我的终端中输入测试并让服务器回复我输入的内容(它在网络浏览器中工作)。

【问题讨论】:

【参考方案1】:

我认为您想修改套接字流以将 \n(换行)转换为 CRLF(回车和换行)。执行info socat 会产生包含此修饰符的详细信息:

crnl   Converts the default line termination character NL ('\n',  0x0a)
       to/from CRNL ("\r\n", 0x0d0a) when writing/reading on this chan-
       nel (example).  Note: socat simply strips all CR characters.

所以我认为你应该能够做到这一点:

socat - TCP:echo.websocket.org:80,crnl

【讨论】:

【参考方案2】:

我想补充一点,我的 WebSocket 工具 websocat 可以帮助调试 WebSocket 协议,尤其是与 socat 结合使用时:

$ websocat - ws-c:sh-c:"socat -v -x - tcp:echo.websocket.org:80" --ws-c-uri ws://echo.websocket.org
> 2018/07/03 16:30:06.021658  length=157 from=0 to=156
 47 45 54 20 2f 20 48 54 54 50 2f 31 2e 31 0d 0a  GET / HTTP/1.1..
 48 6f 73 74 3a 20 65 63 68 6f 2e 77 65 62 73 6f  Host: echo.webso
 63 6b 65 74 2e 6f 72 67 0d 0a                    cket.org..
 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 55 70 67 72  Connection: Upgr
 61 64 65 0d 0a                                   ade..
 55 70 67 72 61 64 65 3a 20 77 65 62 73 6f 63 6b  Upgrade: websock
 65 74 0d 0a                                      et..
 53 65 63 2d 57 65 62 53 6f 63 6b 65 74 2d 56 65  Sec-WebSocket-Ve
 72 73 69 6f 6e 3a 20 31 33 0d 0a                 rsion: 13..
 53 65 63 2d 57 65 62 53 6f 63 6b 65 74 2d 4b 65  Sec-WebSocket-Ke
 79 3a 20 59 76 36 32 44 31 57 6d 7a 79 79 31 65  y: Yv62D1Wmzyy1e
 69 6d 62 47 6d 68 69 61 67 3d 3d 0d 0a           imbGmhiag==..
 0d 0a                                            ..
--
< 2018/07/03 16:30:06.164057  length=201 from=0 to=200
 48 54 54 50 2f 31 2e 31 20 31 30 31 20 57 65 62  HTTP/1.1 101 Web
 20 53 6f 63 6b 65 74 20 50 72 6f 74 6f 63 6f 6c   Socket Protocol
 20 48 61 6e 64 73 68 61 6b 65 0d 0a               Handshake..
 43 6f 6e 6e 65 63 74 69 6f 6e 3a 20 55 70 67 72  Connection: Upgr
 61 64 65 0d 0a                                   ade..
 44 61 74 65 3a 20 54 75 65 2c 20 30 33 20 4a 75  Date: Tue, 03 Ju
 6c 20 32 30 31 38 20 31 33 3a 31 35 3a 30 30 20  l 2018 13:15:00 
 47 4d 54 0d 0a                                   GMT..
 53 65 63 2d 57 65 62 53 6f 63 6b 65 74 2d 41 63  Sec-WebSocket-Ac
 63 65 70 74 3a 20 55 56 6a 32 74 35 50 43 7a 62  cept: UVj2t5PCzb
 58 49 32 52 4e 51 75 70 2f 71 48 31 63 5a 44 6e  XI2RNQup/qH1cZDn
 38 3d 0d 0a                                      8=..
 53 65 72 76 65 72 3a 20 4b 61 61 7a 69 6e 67 20  Server: Kaazing 
 47 61 74 65 77 61 79 0d 0a                       Gateway..
 55 70 67 72 61 64 65 3a 20 77 65 62 73 6f 63 6b  Upgrade: websock
 65 74 0d 0a                                      et..
 0d 0a                                            ..
--
ABCDEF
> 2018/07/03 16:30:12.707919  length=13 from=157 to=169
 82 87 40 57 f5 88 01 15 b6 cc 05 11 ff           ..@W.........
--
< 2018/07/03 16:30:12.848398  length=9 from=201 to=209
 82 07 41 42 43 44 45 46 0a                       ..ABCDEF.
--
ABCDEF
> 2018/07/03 16:30:14.528333  length=6 from=170 to=175
 88 80 18 ec 05 a8                                ......
--
< 2018/07/03 16:30:14.671629  length=2 from=210 to=211
 88 00                                            ..
--

如果手动驱动socat -v -x - TCP:echo.websocket.org:80,crnl(在另一个答案中提到)出现故障,您可以将其与 WebSocat 驱动的 socat 进行比较,就像上面描述的会话一样。

带有 socat 调试转储的反向(服务器)示例:

socat -v -x tcp-l:1234,fork,reuseaddr exec:'websocat -t ws-u\:stdio\: mirror\:'

【讨论】:

WebSocat 这正是我测试 iOS 应用所需要的,感谢分享?【参考方案3】:

或者,这是一种仅使用核心 php 从命令行连接和读取来自wss 安全 websocket 流 的流的方法。

php -r '$sock=stream_socket_client("tls://echo.websocket.org:443",$e,$n,30,STREAM_CLIENT_CONNECT,stream_context_create(null));if(!$sock)echo"[$n]$e".PHP_EOL;elsefwrite($sock,"GET / HTTP/1.1\r\nHost: echo.websocket.org\r\nAccept: */*\r\nConnection: Upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: ".rand(0,999)."\r\n\r\n");while(!feof($sock))var_dump(fgets($sock,2048));'

其他类似的例子,从另一个 wss 服务器拉取:(不要 rekt)

php -r '$sock=stream_socket_client("tls://stream.binance.com:9443",$e,$n,30,STREAM_CLIENT_CONNECT,stream_context_create(null));if(!$sock)echo"[$n]$e".PHP_EOL;elsefwrite($sock,"GET /stream?streams=btcusdt@kline_1m HTTP/1.1\r\nHost: stream.binance.com:9443\r\nAccept: */*\r\nConnection: Upgrade\r\nUpgrade: websocket\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Key: ".rand(0,999)."\r\n\r\n");while(!feof($sock))var_dump(explode(",",fgets($sock,512)));'

【讨论】:

以上是关于socat的下载和基础使用的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 socat 写入打开 QSerialPort

socat 转发 和 nginx 包转发

Linux环境下 RabbitMQ 的下载与安装

socat 端口转发工具,脚本一键安装配置

如何使用 netcat/socat/telnet 手动连接到 websocket?

sh 使用bash和[nc | socat]的http请求示例(在unix域套接字中)