socat 代理和端口转发

发布时间: 更新时间: 总字数:948 阅读时间:2m 作者: IP:上海 网址

socat(SOcket CAT)是一个命令行程序,实现建立两个双向字节流,并在它们之间传输数据。支持代理IP、TCP、UDP、IPv6、PIPE、socket等协议

介绍

安装

# Ubuntu
apt install socat

# CentOS
yum install socat

# Mac
brew install socat
  • 源码
$ wget http://www.dest-unreach.org/socat/download/socat-1.8.0.0.tar.gz
$ tar -zxvf socat-1.8.0.0.tar.gz
$ cd socat-1.8.0.0
$ ./configure
$ make
$ make install

help

socat -h ...

使用

格式

socat [options] <address> <address>

说明:

  • 两个 address 分别代表 接收发送 数据端
  • 常见的 address
    • -STDINSTDOUT 表示标准输入输出,可以使用横杠 - 代替
    • <path-of-file> 一个文件作为数据流
    • tcp-connect:<host>:<port> 建立一个 TCP 连接作为数据流,UDP 同理
    • tcp-listen:<port> 建立一个 TCP 监听端口,UDP 同理
    • exec:<command-line> 执行一个程序作为数据流

示例

参考

文件

# 读文件
socat - /var/log/syslog

# 写文件
echo "hi socat" | socat - /tmp/hello.txt
  • 文件传送:通过 2000 端口将 demo.tar.gz192.168.0.2 传到 192.168.0.3
# 192.168.0.2
socat -u open:demo.tar.gz tcp-listen:2000,reuseaddr

# 192.168.0.3
socat -u tcp:192.168.0.2:2000 open:demo.tar.gz,create

网络管理

# 连接其他端口
socat - TCP:192.168.0.3:3306

# 监听一个新端口
socat TCP-LISTEN:8000 -

端口转发

类似于 iptables 的功能

  • TCP 转发
socat -d -d -lf /var/log/socat.log tcp4-listen:3306,bind=192.168.0.2,reuseaddr,fork TCP4:192.168.0.3:3306

说明:

  • -d -d 日志输出级别

  • -lf /var/log/socat.log 日志路径

  • tcp4-listen:<port> 转发端口,监听在本地 TCP IPv4 协议的端口(3306)

    • bind 绑定监听的本地 IP 地址,默认全部 IP
    • reuseaddr 绑定一个本地端口
    • tcp4:<host>:<port> 指的将转发到的服务端的 IP 和端口
  • TCP 代理,range 限制指定IP可以访问22端口

socat TCP-LISTEN:22,fork,range=10.10.10.10/32 TCP:192.168.0.2:22
  • UDP 转发
socat -d -d -lf /var/log/socat.log UDP4-LISTEN:123,bind=192.168.0.2,reuseaddr,fork UDP4:192.168.0.3:123
  • NAT 通过 Socat 将内部机器端口映射到公网上,有公网IP的机器上执行
socat tcp-listen:1234 tcp-listen:3306

web 代理

# 代理 baidu 为 socket 文件
socat UNIX-LISTEN:/tmp/x.socket,fork,reuseaddr TCP:www.baidu.com:443

# 将 socket 文件代理为端口
socat TCP-LISTEN:9090,fork,reuseaddr UNIX-CONNECT:/tmp/x.socket

# 访问服务
curl -k -i -v -H "host: www.baidu.com" https://127.0.0.1:9090

反射 shell

  • 172.17.0.2 启动服务
socat TCP4-LISTEN:12345,fork STDOUT
  • 其他机器上,连接 Linux 172.17.0.2,执行它的 bash 命令
socat -d -d TCP4:172.17.0.2:12345 EXEC:'bash',pipes
本文总阅读量 次 本站总访问量 次 本站总访客数