socat-命令使用

参考 Blog

简介

socat, SOcket CAT, 主要用于为两个 data sources 建立联系. (可以是 file, Unix socket, UDP, TCP 或标准输入)

socat 支持 two-way communication, 即发送方和接收方是双向的. (身份可以互换)

安装

在 Archlinux 上为:

1
sudo pacman -S socat

基本语法

1
socat <options> <address> <address>

连接 STDIO 到一个 TCP stream source

这里用 nc (“netcat”) 命令做示例. 在一个终端中运行:

1
nc -l localhost 1234

(-l 指 “listen”, 监听本地的 1234 端口)

在另一个终端中用 socat 将当前 standard input 与 TCP stream 相关联:

1
socat STDIO TCP6:localhost:1234

此时在运行 socat 的终端中键入字符并回车, 则会显示在 nc 终端中.

监听一个 port 并将其与另一个 port 关联

1
2
docker run -p 80:80 nginx
socat TCP-LISTEN:1234,reuseaddr,fork TCP:localhost:80

在另一个终端运行:

1
socat STDIO TCP4:localhost:1234

键入 GET / 测试.

单向流模式

默认情况下 socat 是 bidirectional stream protocol. 可以用 0u 选项启用 unidirectional mode.

创建文件

1
2
$ socat -u STDIO FILE:test.txt,create
Hello socat!

此时, 第一个 address 的 stream data 便会流入第二个 address 中.

反过来可以当 cat 用:

1
socat -u FILE:test.txt,create STDIO

使用 -U 参数时行为反过来. (即第二个 address 的 data 流入第一个 address)

参数添加中, 和 : 的区别

  • : 用于分隔不同的地址组件, TCP:www.google.com:80, 这里的 “协议”, “目标主机名” 和 “目标端口号” 就是三种地址组件
  • , 用于分隔同一地址组件的不同参数, 如 TCP-LISTEN:1234,fork,reuseaddr, 这里 TCP-LISTEN1234 是不同地址组件, forkreuseaddr 都是 “端口号” 的参数

连接两个伪终端

1
socat PTY,link=/dev/ttyS10 PTY,link=/dev/ttyS11
  • PTY, “Pseudo Terminal”, 一种特殊的设备, 可以模拟真实终端的行为
  • link=PTY 类型的参数

socat-命令使用
http://example.com/2024/05/03/socat-命令使用/
作者
Jie
发布于
2024年5月3日
许可协议