socat——新瑞士军刀

socat是netcat的一个重要变种,算是netcat的超集,拥有更强大的功能。

基本命令

socat [参数] <地址1> <地址2>

使用socat需要提供两个地址,socat的工作就是将左右两边的地址通过数据流的方式连接起来

最简单的地址就是减号 ‘ – ’ ,代表标准输入输出

socat 支持的协议

TCP, TCP-LISTEN, UDP, UDP-LISTEN, OPEN, EXEC, SOCKS, PROXY

以上协议可以用于端口监听、链接、文件和进程读写,代理桥接等等

默认情况下socat是双向传输的,所以两边的位置关系是不必要纠结的

参数说明

用法:
socat [选项] <双向地址> <双向地址>

选项
-V 将版本和功能信息打印到标准输出,然后退出
-h | -? 打印描述命令行选项和地址的帮助文本
-hh 类似于-h,加上所有常用地址选项名称的列表
-hhh 类似于 -hh,加上所有可用地址选项名称的列表
-d[ddd] 增加详细程度(最多使用 4 次;推荐使用 2 次)
-D 在循环之前分析文件描述符
-ly[facility] 记录到 syslog,使用 facility(默认为守护进程)
-lf<日志文件> 记录到文件
-ls 记录到 stderr(如果没有其他日志则默认)
-lm[facility] 混合日志模式(初始化期间的 stderr,然后是 syslog)
-lp<progname> 设置用于日志记录的程序名称
-lu 使用微秒记录时间戳
-lh 添加主机名以记录消息
-v 数据流量的详细文本转储
-x 数据流量的详细十六进制转储
-r <file> 从左到右流动的数据的原始转储
-R <file> 从右向左流动的数据的原始转储
-b<size_t> 设置数据缓冲区大小 (8192)
-s 草率(出错继续)
-t<timeout> 在关闭第二个通道之前等待几秒钟
-T<timeout> 以秒为单位的总不活动超时
-u 单向模式(从左到右)
-U 单向模式(从右到左)
-g 不检查选项组
-L <lockfile> 尝试获取锁,否则失败
-W <lockfile> 尝试获取锁,或者等待
-4 如果未明确指定版本,则首选 IPv4
-6 如果未明确指定版本,则首选 IPv6

双向地址:
      pipe[,<opts>]	groups=FD,FIFO
      <single-address>!!<single-address>
      <single-address>
      
单向地址:
      single-address:
      <address-head>[,<opts>]

重要请求头附加参数:

	重要请求头附加参数:
      - :标准输入输出流
      STDIN :标准输入流
      STDOUT :标准输出流
      <file> :打开一个文件作为数据流
      TCP :建立一个TCP连接作为数据流
      TCP-LISTEN :建立一个UDP监听端口
      UDP :建立一个TCP连接作为数据流
      UDP-LISTEN :建立一个UDP监听端口
      EXEC :执行一个程序作为数据流
      OPEN :打开一个文件作为数据流
      
	TCP-LISTEN选项组:
      fork :允许多次连接,即建立连接后将父进程转到子进程,父进程继续尝试生成更多连接
      reuseaddr :允许其他一个端口多次绑定,即一个被占用的端口仍然可以继续被其他主机连接
      bind 指定监听绑定的IP地址    # 示例:socat _ TCP-LISTEN:8080,bind=192.168.0.2
      max-children=<count> 限制并发子进程的数量
      
	EXEC选项组:
      path=<string> :覆盖PATH环境变量以使用<string>搜索程序
      
	FORK选项组:
	EXEC 或 SYSTEM 地址使用子进程调用程序,并在 socat 和程序之间传输数据。进程间通信 机制可以通过以下选项受到影响。默认情况下,将创建一个 CWsocketpair() 并将其分配给子进程的 stdin 和 stdout,而 STDERR 继承自 SOCAT 进程,子进程使用文件描述符 0 和 1 与主 SOCAT 进程通信。
	  pipes :为进程间通信创建一对未命名管道,而不是套接字对
	  openpty :使用使用 CWopenpty() 创建的伪终端而不是默认终端(套接字对或 ptmx)与子进程建立通信。
	  ptmx :使用通过打开 /dev/ptmx 或 /dev/ptc 而不是默认的伪终端与子进程建立通信 (套接字对)。
	  pty :使用伪终端而不是套接字对与子进程建立通信。使用可用机制创建 pty。如果开放 和 ptmx 都可用,它使用 ptmx,因为这符合 POSIX 标准(示例)。
	  ctty :使 pty 成为子进程的控制 tty(示例)。
	  stderr :通过将 stderr 作为 stdout 的 CWdup() 来将子进程的 stderr 定向到其输出通道(示例)。
	  
	OPEN选项组:
	  create :如果文件不纯在,则自动创建文件

使用

监听端口

socat - TCP-LISTEN:8080               # 终端1 上启动 server 监听 TCP
socat - TCP:localhost:8080            # 终端2 上启动 client 链接 TCP

UDP同理

端口转发

socat TCP-LISTEN:8080,fork,reuseaddr  TCP:192.168.1.3:80

反弹shell

socat TCP-LISTEN:8080,fork,reuseaddr  EXEC:/usr/bin/bash,pty,stderr   # 服务端
socat - TCP:localhost:8080                        # 客户端

文件传输

socat -u TCP-LISTEN:8080 open:record.log,create    # 服务端接收文件
socat -u open:record.log TCP:localhost:8080        # 客户端发送文件

透明代理

第一句是用于 socks 代理的,第二句用于 HTTP 代理:

socat TCP-LISTEN:<本地端口>,reuseaddr,fork SOCKS:<代理服务器IP>:<远程地址>:<远程端口>,socksport=<代理服务器端口>
socat TCP-LISTEN:<本地端口>,reuseaddr,fork PROXY:<代理服务器IP>:<远程地址>:<远程端口>,proxyport=<代理服务器端口>
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇