选择哪个工具主要取决于你的需求。如果需要简单的连接和数据传输,netcat 足够用;如果需要加密和代理支持,ncat 是更好的选择;如果需要更复杂的网络操作,socat 提供了更强的功能。

GitHub - valorisa/socat-1.8.0.1_for_Windows: socat 1.8.0.1-x86_64 [2024-08-24] for Windows 7, 10 & 11. socat is a relay for bidirectional data transfer between two independent data channels.

socat

socat

Cygwin

Socat - 多用途中继

摘要

  • 什么: "netcat++"(扩展设计,新实现)
  • 操作系统: AIX, BSD, Linux, Solaris 等(UNIX)
  • 许可证: GPL2
  • 安装: tar x...; ./configure; make; make install
  • 文档: READMEsocat.htmlsocat.1
  • 界面: 命令行
  • 示例: socat TCP6-LISTEN:8080,reuseaddr,fork PROXY:proxy:www.domain.com:80
  • 关键字: tcp, udp, ipv6, 原始ip, unix-socket, pty, 管道, 监听, socks4, socks5,
    proxy-connect, ssl-client, ssl-server, 文件描述符, readline, stdio,
    exec, system, 文件, open, tail -f, termios, setsockopt, chroot,
    fork, perm, owner, trace, dump, dgram, ext3, resolver, 数据报,
    多播, 广播, 接口, 套接字, udplite, dccp, sctp, 通用, ioctl

更新内容
最近版本发布

  • 2025-02-21:发布了 Socat 版本 1.8.0.3。此版本修复了许多小问题,并提供了一些小改进,详见文件 CHANGES。实验性的 POSIXMQ 功能得到了改进,增加了几个新选项,现在被认为是稳定的。

  • 2024-12-11:发布了 Socat 版本 1.8.0.2。此版本修复了 readline.sh 中的任意文件覆盖漏洞(Socat 安全公告 9,CVE-2024-54661)。

  • 2024-08-24:发布了 Socat 版本 1.8.0.1。此版本修复了版本 1.8.0.0 中的一些回归问题(详见下文),并修复了其他一些小问题,详见文件 CHANGES


socat 由 Gerhard Rieger 和贡献者开发 - 详见 www.dest-unreach.org
socat 版本 2.0.0-b90+ 于 2020年9月18日 13:14:12 发布
   运行环境:CYGWIN_NT-10.0-26100 版本 2025-10-09 17:21 UTC,发行版 3.6.5-1.x86_64,机器架构 x86_64
功能特性:
  #define WITH_STDIO 1               支持标准输入输出
  #define WITH_FDNUM 1               支持文件描述符编号
  #define WITH_FILE 1                支持文件操作
  #define WITH_CREAT 1               支持创建文件
  #define WITH_GOPEN 1               支持通用打开接口
  #define WITH_TERMIOS 1             支持终端控制
  #define WITH_PIPE 1                支持管道
  #define WITH_UNIX 1                支持 UNIX 域套接字
  #undef WITH_ABSTRACT_UNIXSOCKET 不支持抽象 UNIX 套接字
  #define WITH_IP4 1                 支持 IPv4
  #define WITH_IP6 1                 支持 IPv6
  #define WITH_RAWIP 1               支持原始 IP 套接字
  #define WITH_GENERICSOCKET 1       支持通用套接字接口
  #undef WITH_INTERFACE            不支持接口绑定
  #define WITH_TCP 1                 支持 TCP 协议
  #define WITH_UDP 1                 支持 UDP 协议
  #undef WITH_SCTP                不支持 SCTP 协议
  #define WITH_LISTEN 1              支持监听套接字
  #define WITH_SOCKS4 1              支持 SOCKS4 代理
  #define WITH_SOCKS4A 1             支持 SOCKS4A 代理
  #define WITH_PROXY 1               支持代理功能
  #define WITH_SYSTEM 1              支持系统命令执行
  #define WITH_EXEC 1                支持执行外部程序
  #define WITH_READLINE 1            支持 readline 库
  #undef WITH_TUN                  不支持 TUN/TAP 虚拟网卡
  #define WITH_PTY 1                 支持伪终端
  #define WITH_OPENSSL 1             支持 OpenSSL
  #undef WITH_FIPS                 不支持 FIPS 模式
  #define WITH_LIBWRAP 1             支持 TCP Wrappers(访问控制)
  #define WITH_SYCLS 1               支持系统调用日志
  #define WITH_FILAN 1               支持文件分析功能
  #define WITH_RETRY 1               支持重试机制
  #define WITH_MSGLEVEL 0            消息级别(0 = 调试)

说明:

  • 这段输出显示了 socat 的版本信息、运行环境和支持的功能模块。
  • 带 #define 表示该功能已启用,带 #undef 表示未启用。
  • 功能涵盖协议支持(TCP/UDP/IP)、系统接口(文件、管道、终端)、代理与安全(SOCKS、OpenSSL、TCP Wrappers)等。

Socat (SOcket CAT: Netcat 的增强版) 是一种用于在两个独立数据通道之间进行双向数据传输的中继工具。每个数据通道可以是一个文件、管道、设备(如串行线或伪终端)、套接字(UNIX、IP4、IP6——原始、UDP、TCP)、SSL 套接字、代理连接、文件描述符(如标准输入)等。它还支持两者的组合。这些模式包括“监听”套接字、命名管道和伪终端的生成。

一些使用 socat 的例子包括:

  • TCP 中继(一次性或守护进程)
  • 外部 SOCKS 代理
  • Unix 套接字的 Shell 接口
  • IPv6 中继
  • Netcat 和 rinetd 的替代
  • 将 TCP 定向程序转发到串行线
  • 在网络连接中为运行客户端或服务器脚本创建相对安全的环境(如使用 su 和 chroot

有关更多信息和示例,请访问:Socat 示例


适用于 Windows 7、8.1、10、11 和 Server 的 Socat 版本 1.8.0.1

socat 1.8.0.1-x86_64 可用于 Windows 7、8.1、10、11 和 Server,版本发布于 2024 年 8 月 24 日。

如果您想从源文件编译 Socat,请按照以下步骤进行。否则,您可以直接下载预编译的文件 socat-1.8.0.1.7z,通过以下快捷方式进行下载:
socat-1.8.0.1.7z 下载链接 ,按快捷键(Ctrl + Shift + S)。

首先,如果尚未安装,请下载并安装 Cygwin(最新版本):
下载 Cygwin 安装程序

**socat****netcat****ncat** 都是用于网络通信的工具,它们能帮助用户在网络中进行数据传输,尤其在调试、测试或搭建网络服务时非常有用。尽管它们都具有类似的基本功能——进行网络连接和数据传输,但它们在功能、灵活性和用途方面有所不同。以下是对这三者的对比和区别:

1. Netcat (nc)

Netcat 是一个非常简单和轻量的网络工具,广泛应用于网络调试和测试。它非常灵活,支持TCP和UDP协议。

主要特点:

  • 基本功能:Netcat 最常用于创建 TCP/UDP 连接,监听端口,发送数据,接收数据等。
  • 操作简单:它使用简单的命令行参数来启动连接和监听端口。
  • 不支持 SSL/TLS 加密(不如 ncat 强大)。
  • 灵活性:它可以作为客户端和服务器运行。
  • 常用用途:端口扫描、TCP/UDP 连接、简单的代理和数据传输。

使用示例:

  • 创建服务器端监听 1234 端口:
    bash
    nc -l 1234
  • 连接到远程主机的 1234 端口:
    bash
    nc remote_host 1234

2. Ncat (from Nmap)

Ncat 是由 Nmap 项目开发的一个网络工具,功能更为强大,特别是在与 Nmap 配合使用时。它是 netcat 的扩展版本,除了拥有基本的 netcat 功能外,还提供了额外的特性,比如 SSL/TLS 支持、代理功能以及对多个连接的支持。

Ncat 7.98 ( https://nmap.org/ncat )
用法: ncat [选项] [主机名] [端口]

假设时间单位为秒,附加 'ms' 表示毫秒,'s' 表示秒,'m' 表示分钟,'h' 表示小时(例如 500ms)。
  -4                         仅使用 IPv4
  -6                         仅使用 IPv6
  -C, --crlf                 使用 CRLF 作为换行符
  -c, --sh-exec <命令>       通过 /bin/sh 执行给定的命令
  -e, --exec <命令>          执行给定的命令
      --lua-exec <文件名>    执行给定的 Lua 脚本
  -g hop1[,hop2,...]         松散源路由跳点(最多 8 个)
  -G <n>                     松散源路由跳点指针(4, 8, 12, ...)
  -m, --max-conns <n>        最大 <n> 个同时连接
  -h, --help                 显示此帮助信息
  -d, --delay <时间>         在读写之间等待
  -o, --output <文件名>      将会话数据转储到文件中
  -x, --hex-dump <文件名>    将会话数据以十六进制转储到文件中
  -i, --idle-timeout <时间>  空闲读写超时
  -p, --source-port <端口>   指定使用的源端口
  -s, --source <地址>        指定使用的源地址(不影响 -l)
  -l, --listen               绑定并监听传入连接
  -k, --keep-open            在监听模式下接受多个连接
  -n, --nodns                不通过 DNS 解析主机名
  -t, --telnet               响应 Telnet 协商
  -u, --udp                  使用 UDP 代替默认的 TCP
      --sctp                 使用 SCTP 代替默认的 TCP
  -v, --verbose              设置详细级别(可以多次使用)
  -w, --wait <时间>          连接超时
  -z                         零 I/O 模式,仅报告连接状态
      --append-output        追加输出文件,而不是覆盖
      --send-only            仅发送数据,忽略接收;在 EOF 时退出
      --recv-only            仅接收数据,永远不发送
      --no-shutdown          接收 stdin 的 EOF 时继续半双工操作
  -q <时间>                  在 stdin EOF 后等待 <时间> 然后退出。
      --allow                仅允许指定主机连接到 Ncat
      --allowfile            一个允许连接到 Ncat 的主机文件
      --deny                 拒绝指定主机连接到 Ncat
      --denyfile             一个拒绝连接到 Ncat 的主机文件
      --broker               启用 Ncat 的连接代理模式
      --chat                 启动一个简单的 Ncat 聊天服务器
      --proxy <地址[:端口]>  指定要代理的主机地址
      --proxy-type <类型>    指定代理类型("http", "socks4", "socks5")
      --proxy-auth <认证>    使用 HTTP 或 SOCKS 代理服务器进行身份验证
      --proxy-dns <类型>     指定解析代理目标的 DNS 类型
      --ssl                  使用 SSL 连接或监听
      --ssl-cert             指定用于监听的 SSL 证书文件(PEM 格式)
      --ssl-key              指定用于监听的 SSL 私钥文件(PEM 格式)
      --ssl-verify           验证证书的信任性和域名
      --ssl-trustfile        包含受信任 SSL 证书的 PEM 文件
      --ssl-ciphers          指定使用的 SSL 加密套件列表
      --ssl-servername       请求特定的服务器名称(SNI)
      --ssl-alpn             使用的 ALPN 协议列表
      --version              显示 Ncat 版本信息并退出

请参见 ncat(1) 手册页获取完整的选项、描述和使用示例。

主要特点:

  • SSL/TLS 加密:Ncat 支持通过 SSL 或 TLS 进行加密通信,比 netcat 更安全。
  • 支持代理:Ncat 可以通过 HTTP/SOCKS 代理转发连接。
  • 多协议支持:支持多种协议(TCP, UDP, UNIX socket 等),能够更灵活地配置和使用。
  • 脚本支持:可以与 Nmap 脚本配合使用,实现复杂的网络操作。
  • 与 Nmap 集成:作为 Nmap 的一部分,可以与 Nmap 扫描工具无缝集成。

使用示例:

  • 启动一个带 SSL 的服务器监听 1234 端口:
    bash
    ncat --ssl -l 1234
  • 使用代理连接到远程主机:
    bash
    ncat --proxy proxy.example.com:8080 remote_host 1234

3. Socat (SOcket CAT)

Socat 是一个比 netcatncat 更加强大和灵活的工具,广泛用于复杂的网络和端口转发、代理、隧道等应用。它支持多种协议和地址类型,并且可以更细粒度地控制数据流。

socat 由 Gerhard Rieger 和贡献者开发 - 详见 www.dest-unreach.org
用法:
socat [选项] <bi-地址> <bi-地址>
   选项:
      -V     打印版本和功能信息到标准输出,并退出
      -h|-?  打印帮助文本,描述命令行选项和地址
      -hh    类似 -h,但还会列出所有常见地址选项名称
      -hhh   类似 -hh,但还会列出所有可用的地址选项名称
      -d[ddd]         增加详细信息输出(最多使用4次;推荐使用2次)
      -D     在循环前分析文件描述符
      -ly[facility]  将日志记录到 syslog,使用指定的 facility(默认是 daemon)
      -lf<logfile>   将日志记录到文件
      -ls            将日志记录到 stderr(如果没有其他日志选项,默认使用此选项)
      -lm[facility]  混合日志模式(初始化时使用 stderr,然后使用 syslog)
      -lp<progname>  设置用于日志记录的程序名称
      -lu            使用微秒时间戳记录日志
      -lh            在日志消息中添加主机名
      -v     显示详细的数据流量,文本格式
      -x     显示详细的数据流量,十六进制格式
      -b<size_t>     设置数据缓冲区大小(默认是 8192)
      -s     宽松模式(出错时继续)
      -t<timeout>    在关闭第二个通道之前等待指定的秒数
      -T<timeout>    总的空闲超时时间,单位秒
      -u     单向模式(从左到右)
      -U     单向模式(从右到左)
      -g     不检查选项组
      -L <lockfile>  尝试获取锁定,或者失败
      -W <lockfile>  尝试获取锁定,或者等待
      -4     如果未明确指定版本,优先使用 IPv4
      -6     如果未明确指定版本,优先使用 IPv6

主要特点:

  • 多协议支持:Socat 支持比 netcat 和 ncat 更多的协议和地址类型,包括 TCP, UDP, SCTP, UNIX sockets, 文件描述符等。
  • 双向管道:它能够处理双向流的转发,可以从一个端口或文件流转发数据到另一个端口或文件流。
  • 加密支持:支持 SSL/TLS 加密(类似 ncat)。
  • 复杂的功能:它支持许多高级功能,如端口转发、虚拟串行端口、UNIX 域套接字和标准 I/O 操作等。
  • 脚本化:它可以和脚本语言结合使用,提供更多的定制化支持。

使用示例:

  • 将本地端口 1234 的流量转发到远程服务器的 5678 端口:
    bash
    socat TCP-LISTEN:1234,fork TCP:remote_host:5678
  • 使用 SSL 加密进行通信:
    bash
    socat OPENSSL-LISTEN:1234,cert=server.pem,key=server.key,fork OPENSSL:remote_host:5678,verify=0

比较总结

特性 Netcat (nc) Ncat (from Nmap) Socat
协议支持 TCP/UDP TCP/UDP, UNIX socket, SSL/TLS TCP/UDP, UNIX socket, SSL/TLS, SCTP, 文件描述符等
SSL/TLS 支持 不支持 支持 支持
代理功能 不支持 支持 HTTP/SOCKS 代理 支持 SOCKS 代理及更多高级功能
命令行复杂度 简单 相对简单,但比 netcat 多一些功能 更复杂,支持更多自定义配置和高级功能
多重连接支持 基本支持(-l 启动监听) 支持 支持,支持双向管道、流转发等复杂用法
用途 基本的端口扫描、网络测试、简单的数据传输 适用于更复杂的加密通信、代理、网络调试 高级的端口转发、代理、网络调试、流转发等
脚本支持 与 Nmap 配合使用 可以与其他工具结合进行高级自定义

结论

  • Netcat 是一个非常简洁且基础的工具,适用于轻量级的网络调试和数据传输。
  • Ncat 提供了更多的安全性(SSL/TLS)和代理功能,适合需要更强大网络功能的用户,特别是配合 Nmap 使用时。
  • Socat 是功能最强大、最灵活的工具,适用于复杂的网络配置,如多协议支持、端口转发、加密通信等高级操作。

选择哪个工具主要取决于你的需求。如果需要简单的连接和数据传输,netcat 足够用;如果需要加密和代理支持,ncat 是更好的选择;如果需要更复杂的网络操作,socat 提供了更强的功能。

 

posted @ 2025-06-30 19:33  suv789  阅读(77)  评论(0)    收藏  举报