跳转至

核心概念

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)

  • 适用场景:双方均位于内网(例如:公司电脑访问家里的主机)
  • 核心思想:借助第三方信令协调连接,但数据流量 点对点直连

  • 工作流程(简化):

    1. 相互发现
      双方使用约定的口令,在公共 MQTT 服务器上订阅同一主题(主题由口令+专用哈希算法生成)。

    2. 安全信令
      所有通过 MQTT 交换的信息均使用口令加密(AES256-GCM),信令服务器无法获取也无法篡改通信内容。

    3. 打洞连接
      双方通过 STUN 获取各自的外部映射地址,并交换信息,随后进行 TCP/UDP 打洞, 使 NAT 设备允许直接建立连接。

  • 优势

    1. 无需公网 IP
    2. 数据流量不经过第三方中转
    3. 延迟低、速度快、隐私性好
  • 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 1234gonc -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