MoonnaT —— NAT 画像与打洞编排纯核(RFC 8489 报文自实现,决策面纯函数,时间注入,autonat v2 纪律)
| 包 | 内容 |
|---|---|
| thy1016/moonnat/core | 纯核:STUN 编解码 + 画像机 + 打洞 reducer + 探针口 port + Binding 事务 + NatPump 驱动器;依赖仅 moonbitlang/async |
| thy1016/moonnat/adapter/udp | 探针口真 UDP 实现(UdpProbeSocket) |
moon add thy1016/moonnatlet socket = @udp.UdpProbeSocket::listen(addr_text="0.0.0.0:0")
let pump = @core.NatPump::new(
socket,
policy=@core.PunchPolicy::make(
max_sends=6,
use_port_prediction=true,
retry_delay_ms=200L,
),
callbacks=@core.NatPumpCallbacks::new(
on_picture=fn(p : @core.NatPicture) -> Bool { true }, // no-go 可在此裁
on_established=fn(addr : UInt32, port : Int32) -> Unit { ... },
on_abandoned=fn(reason : String) -> Unit { ... },
),
next_nonce=crypto_nonce, // 熵注入口(生产 CSPRNG;测试计数器)
)
// 双服务器 STUN 探测入账(server 地址配置注入,本仓零默认名单)
let _ = pump.probe_once(server_id=0, server_addr=s1, server_port=3478, window_ms=500)
let _ = pump.probe_once(server_id=1, server_addr=s2, server_port=3478, window_ms=500)
// 画像出炉 → 打洞环跑到终态(回声/dial-back 全自动)
pump.launch(picture=pump.picture())
let final_state = pump.drive(attempt_window_ms=300)Install
Download zipMoonnaT —— NAT 画像与打洞编排纯核(RFC 8489 报文自实现,决策面纯函数,时间注入,autonat v2 纪律)