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

推荐订阅源

博客园 - 司徒正美
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
WordPress大学
WordPress大学
罗磊的独立博客
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Help Net Security
S
SegmentFault 最新的问题
C
Check Point Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
Engineering at Meta
Engineering at Meta
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
D
DataBreaches.Net
雷峰网
雷峰网
GbyAI
GbyAI
宝玉的分享
宝玉的分享

Go 编程语言

WorkBuddy + 企业微信 有人用过吗? - V2EX 业务系统开发语言从 PHP / Python 转向 Go 如何实现数据的存储 - V2EX [2026 最新] Go 1.27 泛型方法完全解读 - V2EX Go 后台接入 SSO 后,本地用户表应该怎么退? - V2EX clbtransport - 自带负载均衡的 http.Transport 简易替代 - V2EX 基于 go+react 开发的一款可私有化部署、任务驱动的代码托管平台 iForge - V2EX 分享一个还在 RC 阶段的项目:把 C 编译成不依赖 cgo 的 Go package - V2EX [工业边缘网关] EdgeX 更新啦,增加了 MCP,可以被 AI 接管了,可以让 AI 控制物理世界啦 [工业边缘网关] EdgeX 更新啦 上线了官网 顺便更新版本 v0.10.0 有了 Agent,后台脚手架是该退场,还是变成约束层? 强兼 Claude Code:左 DeepSeek V4,右 Kimi K3 构建时自动注入版本号:从 Git tag 到 Go 可执行文件 [边缘计算] 想借助 AI 来开发 边缘网关接入 AI 解决设备通信 不知道有没有需求 [Go]工业边缘计算网关 edgex 业余时间独立开发 持续更新半年咯 求个 star eget:不用等中央仓库,直接安装 GitHub 和任意下载站的工具 gookit/gcli v3.8:新增支持共享选项、文档生成和参数重排 V2EX 我开源了一款极简的 P2P 文件传输与 VPN 工具 (Win/Mac/ Linux /Android) gookit/gcli v3.5.0 发布 - 简单易用、功能丰富的 Go 命令行应用与工具库 用 Go gRPC 信令对接 Android WebRTC:大家一般怎么划分网关和客户端边界? 在服务端用 Pion + FFmpeg + RNN 做 WebRTC 通话降噪,值得吗? 这两种 lint 报错场景, v 友们一般怎么处理 tikrok 的部分来时路 tikrok 第 7 代微服务重构: Golang 微服务 grpc 接口与服务实现隔离方案 Tikrok v6.0 新的生产级架构,成本不变,但是部署复杂略有增加 go 打包的二进制程序怎么反编译 [边缘计算开源] 工业数据采集网关 版本更新 用 golang 写了,一套面向个人音乐资产的本地优先音乐系统 做了个 Go 的 MCP Server 框架,一行代码把 Gin API 接入 AI 写了个 Go 库解决 LLM 流式输出断线重连的问题
写了个 Go 库:在 TCP 应用协议开始前做认证,也支持端口敲门
UG4anS3JspYD · 2026-05-18 · via Go 编程语言

最近整理了一个 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 的边界、安全默认值这几块。