惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
L
LangChain Blog
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
宝玉的分享
宝玉的分享
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
D
Docker
B
Blog
Engineering at Meta
Engineering at Meta
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
I
InfoQ
G
Google Developers Blog
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
U
Unit 42

V2EX - 技术

牛逼了,我的阿里云百炼 Coding Plan Pro 莫名被永久封禁,联系客服,无法解封。寻求替代。 Antigravity 断连 Local-first 软件收录站 从 X 上搬运来的白嫖 GPT Plus 教程 阿里云百炼 Coding Plan Pro 套餐 新增当日 token 限制 大家的 Claude 弹了 kyc 嘛 现在 Google 的 Gemini 和 AI 模式降智的厉害啊 用的 TAG 家的 T, ip 跳变是否影响使用 claude 同一 apple 账户能给不同 claude 账号充值么 做了个 Go 的 MCP Server 框架,一行代码把 Gin API 接入 AI 请教各位,想回归技术,如何系统学习 Agent? OpenAI GPT-IMAGE-2 提示词合集 你是说, claude opus4.6 写代码的能力不如 gpt5.4? 关于智谱 Max 套餐要不要升级续费呢? App → CLI → App ? Github 账号被 404 了,现在没法恢复,求各位大佬指点 cursor 的次数套餐以后应该都用不了新模型了 openrouter 使用国外模型 买了咸鱼低价 Gemini pro,账号差点被盗。突然发现国内诈骗成本为零 Gemini 手机版客户端登陆总是在此国家/地区无法使用 gemini 感觉 gpt 这些低价渠道要爆了 claude code 和 codex 在 vibe coding 还有质的区别吗? 阿里 Coding Plan 一天三变, Lite 版本到期不能续费了 RAG 难以让人满意啊 2026 年了,这个世界还存在互联网精神🥹 两个账号阵亡,尼区 Claude Pro 订阅 分享下最近低价 GPT Codex 的来源(源头) OpenAI 发布 Codex 重大更新:支持自动操作电脑与长期任务自动化 使用 claude 从 0 开始开发一个校友会系统可行吗 同一个 appleid 可以给不同 chatGPT 账号订阅 plus 吗?
写了个 Go 库:在 TCP 应用协议开始前做认证,也支持端口敲门
UG4anS3JspYD · 2026-05-18 · via V2EX - 技术

最近整理了一个 Go 库,叫 libknock 。

它解决的问题比较窄: 有些 TCP 服务不太想让随机连接直接打到应用协议解析层,比如内部管理端口、agent/collector 、私有 RPC 、gRPC 服务、自定义 TCP 协议之类。

传统做法一般是:

  • 直接暴露 TCP 端口,让 TLS / HTTP / gRPC / 业务协议自己处理
  • 前面再套一层 proxy / gateway
  • 靠防火墙、VPN 、内网环境隔离
  • 或者用 port knocking 临时放行来源 IP

libknock 的思路是把这类能力做成 Go 里的底层网络库,放在 net.Listener / net.Dialer 这一层。

服务端大概是:

ln, _ := net.Listen("tcp", ":9000")
ln = libknock.WrapListener(ln, knockCfg)

for {
    conn, err := ln.Accept()
    if err != nil {
        return err
    }

    go handleConn(conn)
}

客户端大概是:

d := libknock.Dialer{
    Base: &net.Dialer{},
    Config: knockCfg,
}

conn, err := d.DialContext(ctx, "tcp", "example.com:9000")

连接建立后,客户端先发一个 binary auth frame 。服务端验证 client secret 、timestamp 、nonce 、replay cache ,通过以后才把一个干净的 net.Conn 交给上层程序。

也就是说,上层协议不用知道 libknock 存在。 如果后面是 TLS ,TLS 看到的还是正常 ClientHello ;如果后面是自定义 TCP 协议,业务 handler 看到的就是自己的业务首包。

除了 TCP 前置认证,也可以组合 port knocking / firewall gate:

client
  -> knock
  -> temporary allow / session
  -> TCP connect
  -> TCP pre-auth
  -> application protocol

不过它不是传统意义上的“端口敲门工具”。port knocking 只是可选的一层 gate ;核心还是 Go 程序可嵌入的 TCP pre-application authentication SDK 。

主要特性:

  • Go 原生 net.Listener / net.Dialer 包装
  • TCP 建连后、应用协议开始前认证
  • binary auth frame
  • client secret 校验
  • timestamp window
  • nonce replay 防护
  • 认证失败默认直接关闭连接
  • 不解析、不修改上层应用协议
  • 可用于普通 TCP 、自定义二进制协议、TLS 、HTTP 、gRPC
  • 可选 port knocking / firewall gate / relay gateway

适合的场景大概是:

  • 内部管理端口
  • agent / collector 长连接
  • 私有 RPC / gRPC 服务
  • 自定义 TCP 协议
  • 数据采集、边缘节点、运维控制面
  • 不想让应用协议解析器直接面对随机 TCP 输入的服务

不适合的场景:

  • 想要开箱即用保护任意未改造二进制程序,这种更适合 relay/gateway
  • 想替代 TLS / mTLS / 业务鉴权
  • 想做 VPN 或完整隧道
  • 只想要一个传统 knockd 替代品

现在还在早期阶段,主要想看看有没有人对这种“TCP pre-application authentication + optional port knocking”的组合有类似需求。

仓库地址: https://github.com/libknock/libknock

欢迎拍砖,尤其是 Go API 设计、net.Conn 包装方式、port knocking 和 TCP auth 的边界、安全默认值这几块。