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

145 天前
 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 规则还没有适配,仅支持本机解除限速。后续会支持下游机器。

25686 次点击
所在节点    宽带症候群
175 条回复
mikewang
130 天前
@fengyaochen #139
从 v0.9.1 开始,FakeHTTP 支持处理 NAT 下的设备。如果用的是最新版,那么 NAT 不成问题。没有用过 passwall ,不太清楚它是什么处理的,是否会带来冲突等。

照理来说 开启 fakehttp 关闭 passwall ,应该排除 passwall 影响。但是我不确定 passwall 的规则是否真的移除了,还是依然会经过一层转发。总的来说,fakehttp 应当在拓扑的最外层,如果过了透明代理就会失效。
dizhang
130 天前
@mikewang 多谢,就是对这些莫名其妙的各种错误感到害怕所以一直不用 openwrt 当主力,目前是爱快主路由,然后爱快自带的虚拟机里面装了 openwrt 的旁路由。
请问 openwrt 有没有直观明了可以显示多条线路的实时网速的插件啊
麻烦你这么久,不好意思啊
tatsa
130 天前
@mikewang #140
是最新的 0.9.14 版。没有分配 IPV6 地址,并且加了 -4 参数也是一样
日志如下:
root@ubnt:/usr/bin# fakehttp -h www.speedtest.cn -i pppoe0 -4
2025-06-15 17:26:10 [src/mainfun.c:297] FakeHTTP version 0.9.14
2025-06-15 17:26:10 [src/mainfun.c:298]
2025-06-15 17:26:10 [src/mainfun.c:299] FakeHTTP is free software licensed under the GPLv3.
2025-06-15 17:26:10 [src/mainfun.c:300] Distribution without the accompanying source code is not permitted.
2025-06-15 17:26:10 [src/mainfun.c:301]
2025-06-15 17:26:10 [src/mainfun.c:302] Home page: https://github.com/MikeWang000000/FakeHTTP
2025-06-15 17:26:10 [src/mainfun.c:303]
2025-06-15 17:26:10 [src/nfrules.c:051] WARNING: Falling back to iptables command, as nft command is not working.
2025-06-15 17:26:10 [src/mainfun.c:350] listening on pppoe0 (IPv4 only), netfilter queue number 512...
2025-06-15 17:26:14 [src/rawsend.c:353] 171.43.166.204:443 ===SYN-ACK===> ___.208.214.44:21573
2025-06-15 17:26:14 [src/rawsend.c:368] 171.43.166.204:443 <===ACK(*)=== ___.208.214.44:21573
2025-06-15 17:26:14 [src/rawsend.c:379] 171.43.166.204:443 <===HTTP(*)=== ___.208.214.44:21573
2025-06-15 17:26:14 [src/rawsend.c:353] 120.53.130.158:443 ===SYN-ACK===> ___.208.214.44:21569
2025-06-15 17:26:14 [src/rawsend.c:368] 120.53.130.158:443 <===ACK(*)=== ___.208.214.44:21569
2025-06-15 17:26:14 [src/rawsend.c:379] 120.53.130.158:443 <===HTTP(*)=== ___.208.214.44:21569
2025-06-15 17:26:14 [src/rawsend.c:353] 120.53.130.158:443 ===SYN-ACK===> ___.208.214.44:21570
2025-06-15 17:26:14 [src/rawsend.c:368] 120.53.130.158:443 <===ACK(*)=== ___.208.214.44:21570
2025-06-15 17:26:14 [src/rawsend.c:379] 120.53.130.158:443 <===HTTP(*)=== ___.208.214.44:21570
2025-06-15 17:26:14 [src/rawsend.c:353] 140.143.177.206:443 ===SYN-ACK===> ___.208.214.44:21571
2025-06-15 17:26:14 [src/rawsend.c:368] 140.143.177.206:443 <===ACK(*)=== ___.208.214.44:21571
2025-06-15 17:26:14 [src/rawsend.c:379] 140.143.177.206:443 <===HTTP(*)=== ___.208.214.44:21571
mikewang
130 天前
@dizhang #142
没事的,也可以进 TG 群和群友交流: https://t.me/hellonatter

实时网速一般是自带就有的,URL 是:
http://<IP 地址>/cgi-bin/luci/admin/status/realtime/bandwidth


@tatsa #143
日志可以说看起来十分地正常,不知道是哪里的问题... 要不进 TG 交流?沟通起来会方便一些。也可以看看电脑上的抓包情况等等。
感觉挺少见的,没有其他群友遇到过如此情况。https://t.me/hellonatter
dizhang
130 天前
@mikewang 多谢啦,发现纯净的 immortalwrt 很不错,安装软件还算方便的,以后仔细研究下
jedihy
130 天前
没太明白怎么工作的。是需要本机和代理都运行 fakeHTTP 吗?不然的话,插一个 HTTP 报文进来对端识别不了了?
keepfun
130 天前
真是太牛逼了~~~~~~~
看了下源码 c 真是太难写了 不是人类写的语言
dorothyREN
130 天前
@freedomNet 试试 kill -15
Ipsum
129 天前
@jedihy 仔细看下主贴的说明,你应该会明白是什么原理?
mortal
128 天前
在群晖这种定制的 Linux 内核上似乎会出现不太正常的行为
运行之后没有输出但是网络不能正常连接了

➜ bin ./fakehttp -h www.speedtest.cn -i ovs_eth0
➜ bin ./fakehttp -h www.speedtest.cn -i eth0
➜ bin ./fakehttp -help
➜ bin ./fakehttp
➜ bin chmod +x fakehttp
➜ bin ./fakehttp
➜ bin whoami
root
➜ bin zcat /proc/config.gz | grep NETLINK_QUEUE
➜ bin cat /lib/modules/$(uname -r)/modules.builtin | grep nfnetlink_queue
➜ bin iptables -I INPUT -j NFQUEUE --queue-num 0
➜ bin cat /proc/net/ip_tables_targets
NFQUEUE
NFQUEUE
NFQUEUE
NFQUEUE
MARK
DNAT
SNAT
MASQUERADE
REDIRECT
DNAT
SNAT
LOG
ERROR
➜ bin lsmod | grep nfnetlink
nfnetlink_queue 11217 0
nfnetlink 5885 2 nfnetlink_queue

由于是远程,也不太懂,不敢多测试,趁着 SSH 还在 reboot 了
等待哪位大佬配合测试下

Linux DiskStation 4.4.302 x86_64 GNU/Linux synology_apollolake_218+
mikewang
128 天前
@mortal #150 不能这么操作啊(手动捂脸) 不要手动加 iptables 规则,fakehttp 会自己加上的。

目前我自己是能在群晖系统上跑了,还是需要一些内核模块和 so 文件,教程后面会出(最近比较忙抱歉)。
./fakehttp 无论如何都会有文字输出的,无参数是显示使用说明。

可以看一下文件大小对不对,是不是零字节(下载/解压时出问题了之类的)
3Fulieak
128 天前
真牛,已 star
chy2v
127 天前
感谢,很有效
mortal
127 天前
@mikewang #151

谢谢,经仔细测试是我犯蠢 .zshrc 配置错了 stderr 没输出,程序没问题的。
我自行解决吧。
不着急等大佬一手教程,辛苦了!
fengyaochen
127 天前
@mikewang 研究了 2 天似乎明白为什么了,做主路由只要绑定 pppoe-wan 就没问题了,做旁路由 fakehttp 只能解除这个旁路由自身的限速,无法解除经过旁路由网关设备的限速,因为旁路由广域网下行,不经过旁路网关,广域网上行,经过旁路网关再经过上级网关,透明代理无论上行下行都经过旁路网关,fakehttp 的使用必须上下行都有流量才有效,所以 passwall 国外流量走了代理就能解除限速,而国内流量是不走代理只有上传经过旁路由网关,国内流量下载是不经过旁路由网关的,所以国内失效了,本来认为是代理上下游的关系,实际不是这样为了验证这个结论我又套了个娃,把代理放到下级,旁路由放上游,passwall 一样还是只能解除国外限速解除不了国内流量
qwejerrywolf
117 天前
牛逼,药到病除,北方某省联通实测有效。不过我想问一下是不是只能对 tcp 有效?
mikewang
117 天前
@qwejerrywolf #156 是的,只针对 TCP 。UDP 流量需要先使用 udp2raw 或 phantun 转化为伪 TCP 流量。
chijiao
116 天前
移动的只有 40M 上传,有没有办法可以实现 100M 上传的效果, 还是说只有被运营商恶意限速的场景才能用
mikewang
116 天前
@chijiao #158 FakeHTTP 作用只是伪装成 HTTP 流量,没有别的功能。

假如你使用 HTTP 访问 A 网站时有 100Mbps 上传,使用其他协议访问 B 服务器时只有 40 Mbps 。
这种情况可以使用 FakeHTTP 模拟为访问 A 网站,达到提升速度效果。
Magiclan
116 天前
@mikewang 大神上海电信原来用着正常,但这些天好像升级了,电信官网和 speedtest.net 测速都是满速,但依然限 5m,不起作用了~

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

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

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

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

© 2021 V2EX