fingerserver
描述
Fingerprint 是以 Go 编写的自托管匿名验证服务。它是 TLS/HTTP 回显服务器,分析每个传入连接,并向访问者展示从网络侧可观察到的关于其本人的确切信息:浏览器 User-Agent、TLS 指纹(JA3/JA4)、首个 SYN 包的原始 TCP/IP 参数与 IP 地理位置。
项目用于隐私研究、代理/VPN 质量检查,以及测试客户端身份通过网络栈泄露的程度。Web 面板为单页面,在各自独立的区块中展示所有收集的数据,每个区块都有自己的刷新按钮。
使用的模块
本地模块(经 go.mod 中 replace):
- data - 以 go-bindata 生成。将 Web 面板资源(HTML、CSS、JS、字体)以 gzip 压缩数据嵌入二进制文件
- ip2location - IP2Location 二进制库(.BIN)读取器:在 IPv4/IPv6 区间上二分查找,返回国家、地区、城市、ISP、坐标及其他字段。包含 uint128 子包,用于 IPv6 的 128 位整数运算
- useragent - 正则 User-Agent 解析器(基于 mileusna/useragent):提取浏览器、操作系统、设备类型与机器人标志
外部依赖:
- github.com/wi1dcard/fingerproxy v1.2.3 - TLS 指纹代理:将原始 ClientHello 记录截获为请求元数据,计算 JA3/JA4,提供 uTLS 代理服务器
- github.com/dreadl0ck/tlsx v1.0.3 - 底层 TLS ClientHello 解析:将原始记录反序列化为结构化字段
- github.com/refraction-networking/utls v1.8.1 - uTLS,用于客户端指纹分析的 TLS 栈;提供 dicttls 字典,含密码、扩展、群组与签名算法的人可读名称
- github.com/google/gopacket v1.1.19 - 数据包捕获与解码:pcap(libpcap)实时捕获、BPF 过滤器、IPv4/TCP 层解码
间接依赖:prometheus/client_golang(指标,经 fingerproxy 引入)、klauspost/compress、andybalholm/brotli、golang.org/x/{crypto,net,sys,text}、google.golang.org/protobuf。
技术
- Go 1.24 - 整个服务器
- libpcap / gopacket - 实时数据包捕获与 IPv4/TCP 解码
- uTLS / fingerproxy / tlsx - TLS ClientHello 截获与 JA3/JA4 计算
- IP2Location BIN - 二进制地理位置库
- go-bindata - 将 Web 资源嵌入二进制文件
- Bootstrap 5、jQuery - 面板界面
- Leaflet 1.7.1 + OpenStreetMap - 地理位置地图
- ua-parser-js - 客户端 User-Agent 解析
- TLS 1.0-1.3 - 服务兼容所有 TLS 版本;密码套件与记录版本作为指纹分析的参考数据
- 许可证 GNU AGPL v3(Affero GPL)