首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >socat ,连接不同数据源的中继转发程序

socat ,连接不同数据源的中继转发程序

作者头像
YaoQi
发布2025-07-14 19:05:44
发布2025-07-14 19:05:44
19500
代码可运行
举报
运行总次数:0
代码可运行

socat(socket cat)是一个基于命令行的实用程序,它建立两个双向字节流并在它们之间传输数据。

有点类似于netcat (即nc命令),nc是单纯面向网络的,socat连接的更多。

Ubuntu 系统上安装socate:

代码语言:javascript
代码运行次数:0
运行
复制
apt install socat

socat可以连接许多不同类型的内容,包括:

  • 文件
  • 管道
  • 文件描述符(标准输入输出,等)
  • 设备 (串口, 伪终端, 等)
  • 套接字 (UNIX套接字, IP4, IP6, UDP, TCP等)
  • SSL 接口
  • 代理 CONNECT 连接
  • GNU 行编辑器 (readline)
  • 程序

命令的基本格式就是 socat 后加可选参数和两个地址:

代码语言:javascript
代码运行次数:0
运行
复制
socat [options] <address> <address>

下边看些具体示例:

代码语言:javascript
代码运行次数:0
运行
复制
socat - TCP4:www.example.com:80

上述命令,把STDIO,也就是标准输入输出(在命令行中,很多命令会把“-”当作STDIO,这不是shell的功能,是程序自己实现的),转发到TCP4协议的主机和端口上。

所以,可以和命令行管道"|"联合使用

代码语言:javascript
代码运行次数:0
运行
复制
socat TCP4-LISTEN:81 TCP4:192.168.1.10:80

上述命令,在本地建立TCP4侦听81端口,转发到192.168.1.10:80端口上,很简单的一个应用层端口转发就实现了。

但是这样只能连接一个连接,支持一个客户端。

代码语言:javascript
代码运行次数:0
运行
复制
socat TCP4-LISTEN:81,fork,reuseaddr TCP4:192.168.1.10:80

上述命令,增加了fork,reuseaddr参数,这样就可以连接多个客户端到81端口,都转发给后边的地址了。

代码语言:javascript
代码运行次数:0
运行
复制
socat FILE:test1.txt,create  FILE:test2.txt,create

上述命令,会把test1.txt内容读出写入test2.txt,反过来可以加-U参数。

注:默认双方地址都是以读写权限打开的,-u、-U是单向参数,-u只允许读左侧写入右侧,-U反过来。

代码语言:javascript
代码运行次数:0
运行
复制
socat - PROXY:proxy.example.com:www.baidu.com:80,proxyport=1080

上述命令,把标准输入输出,连接到代理服务器后的百度网站。

注:socat也支持SOCKS4,SOCKS5代理

就到这儿吧,更多示例,见

http://www.dest-unreach.org/socat/doc/socat.html#EXAMPLES

参考:

https://www.redhat.com/en/blog/getting-started-socat

http://www.dest-unreach.org/socat/doc/socat.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漫跑的小兔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档