核心概念
gonc 传承了经典 netcat (nc) 简洁的“管道”设计哲学,在此基础上,引入了若干关键能力扩展:
-p2p(穿透):集成 STUN/MQTT 协议,实现零配置的自动化 P2P 内网穿透。-k(守护):支持服务端持久化监听,断线自动重连,胜任后台服务角色。-mux(并发):引入多路复用技术,单条物理连接即可承载高并发逻辑流。-e(赋能):打破“仅执行 Shell”的限制,内置 SOCKS5、HTTP Server 等微服务模块。-tls(安全):支持 TLS 1.3 加密与双向身份认证,拒绝明文传输。
1. 连接模式:直连 vs P2P(NAT 穿透)
传统的 netcat 以及大多数网络工具都基于 Client–Server (C/S) 模型,
这通常要求服务端具备 公网 IP,或至少开放并可被访问的端口。
然而在现实网络环境中(家庭宽带、公司内网、4G/5G), 大多数设备都位于 NAT(网络地址转换) 和防火墙之后,无法被直接访问。
为了解决这一问题,gonc 在保留传统直连能力的同时,引入了 P2P(Peer-to-Peer)连接模式。
传统直连(Direct Connect)
- 适用场景:公网服务器,或两台机器位于同一局域网
- 工作方式:A 直接向 B 的
IP:Port发起 TCP/UDP 连接 -
gonc 用法:
- 服务端:
gonc -l <port> - 客户端:
gonc <ip/domain> <port>
- 服务端:
这种模式简单、可靠,但对网络环境要求较高。
P2P NAT 穿透(Peer-to-Peer)
- 适用场景:双方均位于内网(例如:公司电脑访问家里的主机)
-
核心思想:借助第三方信令协调连接,但数据流量 点对点直连
-
工作流程(简化):
-
相互发现
双方使用约定的口令,在公共 MQTT 服务器上订阅同一主题(主题由口令+专用哈希算法生成)。 -
安全信令
所有通过 MQTT 交换的信息均使用口令加密(AES256-GCM),信令服务器无法获取也无法篡改通信内容。 -
打洞连接
双方通过 STUN 获取各自的外部映射地址,并交换信息,随后进行 TCP/UDP 打洞, 使 NAT 设备允许直接建立连接。
-
-
优势:
- 无需公网 IP
- 数据流量不经过第三方中转
- 延迟低、速度快、隐私性好
- gonc 参数:
gonc -p2p <口令>
2. 监听模式:临时 vs 持续监听(-k / -keep-open)
传统 netcat 的 -l 监听模式只能接受一次连接,连接结束后即退出。 gonc 对监听模式进行了增强:在 -l 的基础上,通过 -k(--keep-open)参数可以持续接受并处理多个客户端连接。
结合 -e 参数,gonc 可以在同一监听端口上反复执行指定命令,从而持续对外提供服务。 同时,得益于 Go 语言高效的并发模型(goroutines),gonc 的内置服务模块(如 :s5s、:httpserver)能够轻松运行在监听模式下,用于快速搭建代理服务器或 HTTP 文件服务器。
3. 多路复用 (Multiplexing / Mux)
穿透 NAT 或 防火墙 往往成本较高,而建立好的连接更是宝贵资源。
gonc 通过内置的多路复用(smux / yamux),在单条底层连接上并发承载多个逻辑会话,避免队头阻塞,让一次成功的连接发挥最大价值。
4. 动态服务模块 (-e)
在传统的 netcat 中,-e 参数通常用来绑定 /bin/bash 以获取反弹 Shell。
gonc 极大地扩展了这个概念。-e 不仅可以执行外部程序,还可以执行内置的 Go 函数。
我们将这些内置函数称为 Built-in Services。
| 模块 | 描述 | 类比 |
|---|---|---|
:sh |
交互式 Shell | 远程桌面 (命令行版) |
:s5s |
标准SOCKS5+HTTP 代理服务器 | VPN 网关 |
:httpserver |
HTTP 文件服务 | Python 的 SimpleHTTPServer |
:nc |
gonc本身,直接调用函数,不用创建进程 | netcat |
:mux |
多路复用的SOCKS5代理和HTTP文件服务器 | SSH隧道 |
:tp |
透明代理 | 有点创新,找不到类比 |
这些模块就是懒人福利。文件快传,端口转发,反向Shell,一切都打包在 gonc 这一个二进制文件里送给你。
5. 传输层协议:TCP vs KCP-over-UDP
TCP和KCP都是可靠传输。gonc 允许你根据网络质量选择底层的“卡车”。
- TCP (默认):可靠,有序。适合网络质量好的环境。
- KCP (
-kcp):激进的传输协议。- 它是基于 UDP 的,但通过算法保证了可靠性。
- 它通过牺牲带宽(多发数据包)来换取低延迟。
- 适用场景:跨国连接、丢包率高的弱网环境(如拥堵的公共 WiFi 或 4G 信号差的地方)。
6. 安全模型
gonc 奉行“默认安全”的原则,但提供了不同层级的选项。
(1) TLS + PSK
gonc 采用 TLS + PSK(Pre-Shared Key) 的方式,实现零配置的双向认证加密通信。
只有持有相同共享密钥的通信双方,才能成功建立连接。
gonc 默认使用基于 ECDHE 的现代加密协议与符合 AEAD 规范的加密套件:
- TCP 连接:使用 TLS 1.3
- UDP 会话:使用 DTLS 1.2
该模式提供完整的双向认证、端到端加密与前向安全性,能够有效抵御中间人攻击和被动窃听。
在传统 TLS 使用场景中,用户通常需要自行生成、分发并维护证书,配置过程较为繁琐。
在 gonc 中,预共享的 PSK 即成为信任根:程序会从 PSK 字符串派生出所需的密钥材料与证书结构,
在无需用户手动管理证书的情况下,实现安全的TLS通讯。
在网络层面,传输流量呈现为标准的 TLS 协议特征。
(2) P2P 连接加密
在 P2P 模式下,双方约定的口令作为 PSK(Pre-Shared Key),默认启用TLS + PSK模式。
在建立 P2P 连接之前,通过 MQTT 交换的信令消息同样受到保护。 这些消息使用口令派生的 PSK,采用 AES-256-GCM(AEAD)进行加密与认证, 确保即使 MQTT 服务器不可信,也无法解密或篡改协商过程中的敏感信息。
(3) shadowstream:低特征流量加密模式(-ss)
针对P2P模式,除了默认的强加密模式外,gonc 还提供 -ss 参数,用于启用 shadowstream 加密模式。
该模式采用 AES-256-CTR 流加密算法,其设计目标并非替代 TLS,
而是降低传输流量的可识别特征,使数据在传输层面看起来更加“普通”。
在 shadowstream 模式下,gonc 会在通过 MQTT 通道交换 NAT 地址的同时,
协商一次性的 ECDHE 会话密钥。每个连接均使用独立密钥,
同样具备前向安全性(Forward Secrecy),确保历史通信不会因PSK泄露而被解密。然而,在整体安全规范和成熟度上不及 TLS 1.3。
因此,shadowstream 更适合对流量特征敏感、但可接受安全取舍的特定场景。
(4) 单纯TLS
例如 gonc -tls -l 1234 和 gonc -tls 127.0.0.1 1234 之间的通讯虽然是TLS加密的,但没有设置PSK相当于建立TLS过程中忽略证书校验,这无法抵御中间人攻击。
(5) 单纯PSK
没有提供-tls参数,仅-psk虽然具备加密,性能也更快,原始流量看起来无明显特征,但是,这种加密方式不具备向前安全性,也就是说哪天psk泄露了,可以解密以往被保存的流量。
安全的PSK需要用程序随机生成,不建议自己构建。
# 参数-psk . 可以帮你生成具备128位安全系数的PSK字符串
gonc -psk .
# 服务端,使用TLS监听4443端口
gonc -tls -psk mysecret123 -l 4443
# 客户端,你可以测试,必须使用相同的PSK才能建立连接,互发消息
gonc -tls -psk mysecret123 127.0.0.1 4443