选择哪个工具主要取决于你的需求。如果需要简单的连接和数据传输,netcat 足够用;如果需要加密和代理支持,ncat 是更好的选择;如果需要更复杂的网络操作,socat 提供了更强的功能。
Socat - 多用途中继
摘要
- 什么: "netcat++"(扩展设计,新实现)
- 操作系统: AIX, BSD, Linux, Solaris 等(UNIX)
- 许可证: GPL2
- 安装:
tar x...; ./configure; make; make install - 文档:
README;socat.html,socat.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 是一个比 netcat 和 ncat 更加强大和灵活的工具,广泛用于复杂的网络和端口转发、代理、隧道等应用。它支持多种协议和地址类型,并且可以更细粒度地控制数据流。
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 提供了更强的功能。

浙公网安备 33010602011771号