FakeHTTP - 伪装 TCP 连接为 HTTP,解除白名单限速

142 天前
 mikewang

FakeHTTP

https://github.com/MikeWang000000/FakeHTTP


原理:

在 TCP 三次握手之后,立即发送一个 HTTP GET 请求,Host 为指定域名。使用 NFQUEUE 实现。


相关帖子:


命令(需要 sudo ):

fakehttp -h www.example.com -i eth0

特点:

因为 nf_deaf 是内核模块,需要手动编译,有一定使用门槛。FakeHTTP 选择使用 iptables + NFQUEUE 方案,使用 musl 静态编译,通用全部主流 Linux 发行版。

一些说明:


特别说明:

首次使用 FakeHTTP ,请不要远程操作。若使用不当,可能造成远程机器断网。


备注:

目前因为 NAT 规则还没有适配,仅支持本机解除限速。后续会支持下游机器。

25608 次点击
所在节点    宽带症候群
175 条回复
Y25tIGxpdmlk
141 天前
@rick13 #40 为什么都说强,我怎么没看出区别?需要手机 APP 才能看到 HDR 效果吗?苹果还是安卓哪个 APP 支持 HDR 头像显示的,我试试
rick13
141 天前
@Y25tIGxpdmlk macOS ,chrome 浏览器,我手机上用第三方 app 反倒看不到
rick13
141 天前
@Y25tIGxpdmlk 怪了,用 macOS 和 iOS 的 Safari 看不到,用 macOS 的 chrome 就能,谷歌倒反天罡
zjsxwc
141 天前
是这样的原理吗?

不用 fakehttp 时的请求内容:
```
[IP 头部: 源 IP=客户端 IP, 目标 IP=1.2.3.4]
[TCP 头部: 源端口=随机端口, 目标端口=1234]
[SSH 协议数据: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5 ...]
```
因为不带 http 特征,于是这种方式会被限速。



用了 fakehttp 的请求内容:
```
第一个数据包:[IP 头部: 源 IP=客户端 IP, 目标 IP=1.2.3.4]
[TCP 头部: 源端口=随机端口, 目标端口=1234]
[HTTP 请求:
GET / HTTP/1.1\r\n
Host: www.example.com\r\n
...
]
后续 N 个数据包:[IP 头部: 源 IP=客户端 IP, 目标 IP=1.2.3.4]
[TCP 头部: 源端口=随机端口, 目标端口=1234]
[原始 TCP 数据: 如 SSH 协议数据包、自定义应用数据]
```
带了 http 特征,于是这种方式不会限速。
dizhang
141 天前
@mikewang 爱快好像没有可以定制的地方,比如你说的装内核扩展啊,不过还是多谢指点了
Lentin
141 天前
@dizhang #45 ikuai 比较封闭,似乎不支持添加模块 建议单独用 openwrt 当边界网关才能实现
kingsmart
141 天前
@Lentin 用 opwrt 旁路由该如何实现?
dizhang
141 天前
@Lentin 谢谢,是说软路由安装 openwrt 拨号是吗
mikewang
141 天前
#34 @NewYear
没错,TTL 是关键。不支持 NAT 是因为我写的 iptables 规则有点问题,不应在 PREROUTING 链处理。最新版本已修复。

#35 @qwvy2g
TTL 值也可以自行修改 `-t` 调大,如果你觉得不够用。当然设置太大了,被服务器收到就有问题了。服务器多半会回给你一个 RST 。

#38 @ioooou
看起来是你正使用 iptables-nft ,但是是不是有 Docker 或者其他程序在使用 iptables-legacy 导致冲突。
试试 sudo update-alternatives --config iptables ,切换为 iptables-legacy 。

#39 @microka
IPv6 还没有适配,将来会考虑。

#44 @zjsxwc
可以大致这样理解。不过 HTTP 特征的数据包和后续真正的数据包是共用同一个 TCP Sequence 的。
HTTP 特征由于 TTL 值很低,被半路丢弃,目标服务器收不到。
opengg
141 天前
服务端需要处理吗?
mikewang
141 天前
#50 @opengg
不需要。HTTP 特征由于 TTL 值很低,被半路丢弃,目标服务器收不到,所以不需要任何处理。
marsteel
141 天前
大众汽车公司去年 9 月份承认,他们在美国的柴油车上安装了一个“欺骗装置”或软件,能够操纵和歪曲汽车排放的检测数据。 :D
microka
141 天前
大佬,目前在 openwrt 上使用,本地 Windows 要保持 ssh 运行,请问有什么办法在其在 openwrt 上独立运行?
microka
141 天前
Mon Jun 2 18:47:07 2025 [main() - src/fakehttp.c:812] ERROR: recv(): No buffer space available
刚重启路由器,运行后跑测速,没一会儿就崩了,这个有办法解决吗?
mikewang
141 天前
#53 @microka
目前可以通过 nohup 命令在后台运行(可以网上查一下它的用法)。

以后的版本可以通过 `-d` 命令后台运行。
FakeHTTP 目前还是 beta 公测状态,在 v1.0 之前还有不少功能需要完善( IPv6/输出日志到文件/后台运行/支持多网络接口/...),以及 bug 修复。

#54 @microka
感觉是短时间建立了大量的 TCP 连接,然后你的路由器来不及处理了🤦‍♂️ 可以把日志发到 GitHub issue 上面(可码掉 IP 地址),然后我看一下怎么改进。
microka
141 天前
@mikewang #55 感谢大佬,已提 issue ,麻烦了~
fengyaochen
141 天前
上海移动有没有白名单地址可以伪装,晚高峰到上海联通就不限速到上海电信就限速,这个应该没用吧
freedomNet
141 天前
发现小小的问题,如果用 kill 就不能再 ssh 服务器,但如果是 exiting normally ,那就没问题。遇到这种问题,都会特意运行一次,然后再用 Ctrl + C exit normally.
mikewang
141 天前
@fengyaochen #57
有可能只是晚高峰正常拥堵,线路不好。FakeHTTP 只能解决对基于 HTTP 域名(不)限速的场景。

@freedomNet #58
因为直接 kill ,将不给 FakeHTTP 机会去清除它加的 iptables 规则,导致队列阻塞(没有 fakehttp 进程去消化这些 SYN-ACK/ACK 数据包了)。
这个问题其实挺重要的,今天晚上的版本会解决这个问题。
yyysuo
141 天前
想请教一下,如果用 openwrt 裸核开了 sing-box 开了 tun+auto_redirect 会有效吗,sing-box 本身也会添加 nft 规则的。kmod-nft-queue
iptables-mod-nfqueue
这 2 个包默认不带,自行安装是有效的么?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1135702

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX