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

推荐订阅源

T
The Blog of Author Tim Ferriss
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - Franky
G
Google Developers Blog
罗磊的独立博客
美团技术团队
腾讯CDC
GbyAI
GbyAI
博客园 - 司徒正美
Recent Announcements
Recent Announcements
P
Privacy International News Feed
Security Latest
Security Latest
C
CXSECURITY Database RSS Feed - CXSecurity.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
IT之家
IT之家
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
Intezer
博客园 - 叶小钗
C
Cisco Blogs
Engineering at Meta
Engineering at Meta
Latest news
Latest news
博客园 - 聂微东
Apple Machine Learning Research
Apple Machine Learning Research
Scott Helme
Scott Helme
阮一峰的网络日志
阮一峰的网络日志
Cyberwarzone
Cyberwarzone
Microsoft Azure Blog
Microsoft Azure Blog
S
Schneier on Security
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threatpost
人人都是产品经理
人人都是产品经理
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
LangChain Blog
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
Stack Overflow Blog
Stack Overflow Blog
P
Privacy & Cybersecurity Law Blog
博客园 - 【当耐特】
Y
Y Combinator Blog
Last Week in AI
Last Week in AI
D
DataBreaches.Net
量子位
The Hacker News
The Hacker News
C
CERT Recently Published Vulnerability Notes
L
LINUX DO - 最新话题
S
Securelist

Go 编程语言

构建时自动注入版本号:从 Git tag 到 Go 可执行文件 - V2EX [边缘计算] 想借助 AI 来开发 边缘网关接入 AI 解决设备通信 不知道有没有需求 - V2EX [Go]工业边缘计算网关 edgex 业余时间独立开发 持续更新半年咯 求个 star - V2EX eget:不用等中央仓库,直接安装 GitHub 和任意下载站的工具 - V2EX gookit/gcli v3.8:新增支持共享选项、文档生成和参数重排 - V2EX V2EX 我开源了一款极简的 P2P 文件传输与 VPN 工具 (Win/Mac/ Linux /Android) - V2EX gookit/gcli v3.5.0 发布 - 简单易用、功能丰富的 Go 命令行应用与工具库 - V2EX 用 Go gRPC 信令对接 Android WebRTC:大家一般怎么划分网关和客户端边界? 在服务端用 Pion + FFmpeg + RNN 做 WebRTC 通话降噪,值得吗? 这两种 lint 报错场景, v 友们一般怎么处理 - V2EX tikrok 的部分来时路 tikrok 第 7 代微服务重构: Golang 微服务 grpc 接口与服务实现隔离方案 Tikrok v6.0 新的生产级架构,成本不变,但是部署复杂略有增加 go 打包的二进制程序怎么反编译 [边缘计算开源] 工业数据采集网关 版本更新 用 golang 写了,一套面向个人音乐资产的本地优先音乐系统 做了个 Go 的 MCP Server 框架,一行代码把 Gin API 接入 AI - V2EX 写了个 Go 库解决 LLM 流式输出断线重连的问题 - V2EX Tikrok v5.0 新的的底层实现 - V2EX OpenTelemetry 分布式追踪中的回溯采样:削减 60% 尾部采样成本 - V2EX 求推荐一个 go 里运行 js 的方案 - V2EX [边缘计算] 基于 GO 的采集网关持续更新啦 - V2EX [边缘计算开源] 基于 go 写了个独立运行的工业数据采集网关 后续阶段应该如何调整 - V2EX 然后 go-kratos 不怎么活跃了,连最火的 skills 都不搞, github 也没什么人回复了 - V2EX Excelize 开源基础库发布 2.10.1 版本更新 phper 转 go 最好的 web 框架是 goframe 吗? - V2EX A Visual Studio Code extension that displays the disk size of Go module dependencies in go.mod files. - V2EX miglite: Go 极简高效的数据库迁移工具 - V2EX 每秒万级 Tick 震荡:高频行情分发,该选 Golang 的并发原生还是 Rust 的极致性能? - V2EX 给 netcat 引入了 P2P 穿透、多路复用、强加密以及内置服务模块,并且完全开源 - V2EX 使用 "go.inlayHints.parameterNames": true 在 vscode 中开启类似 goland 的参数提示 - V2EX 下面代码中 f()会被重复执行吗?大佬帮忙解答一下~ - V2EX sublimetext 开发 GO 使用体验怎么样 - V2EX [开源] 将 react 的 hooks 和 组件化思路带入 go 的 TUI 开发。 - V2EX gocar 0.2.0 版本:新增自定义命令功能,实现真正的 go 的 cargo - V2EX go 新手,求问导入包失败问题 - V2EX 之前写的, JSR-310 风格的时间日期库, 1.0 了 - V2EX 为了方便学习 go, 使用 go 做了一个命令行版本的 go playground, 代码直接一键运行, 一键编译 - V2EX 虚心请教 Go 前辈们,关于入行 - V2EX 关于 Go 的工程经验 - V2EX 微信开发框架开源,基于 Go+Wails3+React - V2EX Golang 实现的开源 NVR 支持 GB28181 & ONVIF 啦 - V2EX Go 工具库 gookit/goutil v0.7.2 发布:增强功能与修复,提升开发体验 - V2EX go-carbon v2.6.15 正式版发布,已被 docker 官方组织使用 - V2EX 如何用 3–5 个高效问题快速识别 Golang 开发者的技术素养? - V2EX 有没有 go 的 ai 应用项目学习学习 - V2EX Go 环境版本管理用哪个- -有点疑惑 - V2EX Goland 下的通义千问不能选择模型,VScode 下面的通义千问可以选择模型 - V2EX 新手入门求指导 - V2EX 看 Go 的时间库不顺眼很久了,所以从别的语言里抄了一个 - V2EX go-dongle v1.2.0 发布,新增 SM2 非对称椭圆曲线加密算法支持 - V2EX Wails2+Vue3 本地的绑定文件和 Vite 上的不一致 - V2EX go 返回错误的时候, 返回的值应该可用吗 - V2EX Go 入门基础课(2025 Golang) - V2EX goland 中如何 debug wails - V2EX 日期函数获取上一个月 bug, 在一些特殊日子才出现,比如今天 10-31 - V2EX go-carbon v2.6.14 发布,一个轻量级、语义化的 golang 时间处理库 - V2EX goroutine 到底算不算一种 coroutine 的实现? - V2EX 为什么不用 gRPC-Go: VictoriaTraces 中实现 OTLP/gRPC 的幕后故事 - V2EX go 最新版的 map 并发读是安全的吗。 - V2EX 请问一下 golang 下有什么成熟稳定的串口通讯包? - V2EX golang.org/x/sync/syncmap 被 struct 裹挟时 使用前为什么必须为每个键初始化 不然取值得到 nil go-dongle v1.1.7 发布,新增 SM4 国密分组对称加密算法支持 在开发接口的过程中,如何快速验证结果? - V2EX go-carbon v2.6.13 发布,一个轻量级、语义化的 golang 时间处理库
写了个 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 的边界、安全默认值这几块。

  • 认证
  • 协议
  • 端口

    6 条回复    2026-05-19 15:51:02 +08:00

    povsister

    1

    povsister      5 月 18 日 via iPhone

    我们在生产环境遇到过有 bug 应用创建 slow tcp 和半开连接,导致目标应用 oom 。所以有没有什么能在 ip 层防御的,不进协议栈的那种

    lesismal

    3

    lesismal      5 月 18 日

    AI 太强了,去年中 sonnet 4.0 还是 4.1 之后,我就基本放弃自己手写了、但去年还偶尔自己写一点点。

    之前觉得 golang 如果用标准库 sql 要手写很多 for 循环,根据 sql 语句生成 golang 代码的库涉及到复杂业务逻辑中间夹杂很多 sql 的,修改之类的也是很麻烦,sqlx 、ent 以及那几个 orm 库过于啰嗦而且很多没必要的东西增加学习成本而且性能、隐藏细节带来的工程问题远大于 orm 之类的所谓便利性,即使其他语言我也是抵制使用 orm 这类脏东西的(小项目谁爱用都 ok ,因为没有瓶颈)。
    其实标准库 sql 包主要就是需要手写 for 循环 rows scan 这块麻烦,binding 搞好就轻松的多,所以自己搞了个 https://github.com/lesismal/sqlw ,以前自己用这个。

    但是 AI 来了,AI 不怕手写 for rows scan 这些的麻烦,所以现在我连自己的 sqlw 都不用了,全丢给 AI ,代码我也不 review ,让 AI 自己加适当的日志、监控各种,然后让 AI 自己分析慢日志之类的进行优化。剩下的就是自己测试一些不容易被 AI 自动化发现的问题、然后反馈给 AI 让它修复和优化。

    最近一些人吐槽 bun 换 rust ,infoq 文章评论区里,infoq 的人竟然还用 viber coding 之前的方式去评价不可能那么快合并到主分支——这相当于九品芝麻官里李总管那句“你用前朝的尚方宝剑斩本朝的官”,结果第二天就合并了。

    反正,我大概至少 8 、9 个月没有自己写过代码了。因为会聪明反被聪明误、自己觉得自己行非要瞎鼓捣然后耽误自己使用 AI 进步速度、也耽误自己和 AI 的配合度。

    让 AI 飞吧。

    UG4anS3JspYD

    5

    UG4anS3JspYD      5 月 19 日

    @povsister 这个点要分两层看。

    如果目标是“不进入应用协议解析层”,这类 listener/dialer wrapper 可以做到:连接进来后必须先过 auth frame ,没过就很快 close ,上层 HTTP/gRPC/自定义协议 handler 不会看到这条连接。

    但如果目标是“不进内核 TCP 协议栈 / 不占 SYN backlog / 不占 fd”,那就不是 Go 里的 net.Listener 能解决的了,需要放到更前面,比如 nftables/iptables 、connlimit/hashlimit 、SYN cookies/SYNPROXY ,或者更靠前的 eBPF/XDP 。

    libknock 里可选的 knock + firewall gate 主要就是想覆盖这一类场景:默认 protected port 由防火墙 DROP ,只有 knock 通过后才临时 allow 。这样随机连接不会打到应用 listener 。Auth-only 模式则不解决半开连接和 fd 消耗,只解决“不让未认证流量进入应用协议”。

    bv

    6

    bv      5 月 19 日

    基于 net.Conn 透明包装了一层 pre-payload ,和 proxy-protocol 协议手法类似。