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 发行版。
一些说明:
-t <ttl>
调整。要让这个 HTTP 数据包刚好通过限速检查,但不被目标服务器收到。opkg install kmod-...
,主要是要有 nfqueue 、conntrack 功能。特别说明:
首次使用 FakeHTTP ,请不要远程操作。若使用不当,可能造成远程机器断网。
备注:
目前因为 NAT 规则还没有适配,仅支持本机解除限速。后续会支持下游机器。
NAT 已适配。nft 规则 和 IPv6 在日程中,敬请关注。
TG 交流群:https://t.me/hellonatter
这里有 Natter 的作者(本人)和 NATMap 的作者 @heiher,以及热心群友们,共用同一个群聊。欢迎交流。
![]() |
1
nicefrp 5 天前
star 了
|
2
qaz741wsd859 5 天前
问个小白问题:这对入站和出站连接都生效么?
|
![]() |
3
NewYear 5 天前
困惑,这个是用于“回家”吗,也就是说需要有外网 IP ,而且被检测为家用宽带开放 HTTP 服务?
|
![]() |
4
microka 5 天前
感谢,先收藏了,正好需要。
|
![]() |
5
mikewang OP #2 @qaz741wsd859 入站出站都生效。主要针对出站,入站还在测试中。
#3 @NewYear 不是,这个不是协议。和是否有公网/开放端口没有关系。可以通俗的理解为:在正常的 TCP 传输中加一点 HTTP 特征,骗过限速。 FakeHTTP 只处理已有的 TCP 报文,自身不提供服务。 |
6
alpha9318 4 天前
支持一下👍
|
7
march1993 4 天前
何苦要用到内核模块,本地实现一个 socks5 client 把流量加上 http 头发到目标主机不就好了吗。。
|
![]() |
8
povsister 4 天前
这个思路真是 6
|
![]() |
10
geekvcn 4 天前
没用,我这是单线程限速 5M ,但是总速不限制,投诉就说上传没问题达标,因为总速确实能达到,但是 Github 发布项目这类单线程上传永远 5M 。用之前那个内核模块试了还是铁打的单线程上传 5M
|
![]() |
11
geekvcn 4 天前 ![]() root@route:/tmp/upload# ./fakehttp -h 4gsuzhou1.speedtest.jsinfo.net.prod.hosts.ooklaserver.net -i pppoe-wan
Sun Jun 1 15:31:50 2025 [main() - src/fakehttp_nfq.c:501] FakeHTTP version 0.9.0 Sun Jun 1 15:31:53 2025 [callback() - src/fakehttp_nfq.c:381] 104.18.31.1:80 ===ACK===> 114.*.*.228:48726 Sun Jun 1 15:31:53 2025 [callback() - src/fakehttp_nfq.c:392] (*) 104.18.31.1:80 <===HTTP(*)=== 114.*.*.228:48726 Sun Jun 1 15:31:53 2025 [callback() - src/fakehttp_nfq.c:348] 104.18.31.1:80 ===SYN-ACK===> 114.*.*.228:55182 Sun Jun 1 15:31:53 2025 [callback() - src/fakehttp_nfq.c:363] 104.18.31.1:80 <===ACK(*)=== 114.*.*.228:55182 Sun Jun 1 15:31:53 2025 [callback() - src/fakehttp_nfq.c:374] 104.18.31.1:80 <===HTTP(*)=== 114.*.*.228:55182 Sun Jun 1 15:31:53 2025 [callback() - src/fakehttp_nfq.c:381] 104.18.31.1:80 ===ACK===> 114.*.*.228:54762 Sun Jun 1 15:31:53 2025 [callback() - src/fakehttp_nfq.c:392] (*) 104.18.31.1:80 <===HTTP(*)=== 114.*.*.228:54762 Sun Jun 1 15:31:53 2025 [callback() - src/fakehttp_nfq.c:381] 104.18.31.1:80 ===ACK===> 114.*.*.228:54762 Sun Jun 1 15:31:53 2025 [callback() - src/fakehttp_nfq.c:392] (*) 104.18.31.1:80 <===HTTP(*)=== 114.*.*.228:54762 用的绝对是白名单域名,所以我总结了又两个限速节点,一个是出省前,一个是出国前,后者目前基本没办法破,前者只要流量不是太离谱就不会被限制 |
![]() |
14
allin1 4 天前
|
![]() |
15
1423 4 天前
谢谢, openwrt 用上了
|
![]() |
16
mikewang OP ![]() @Terminl #13
可能是你误解了其中的原理。FakeHTTP 只插入,不转发。 SYN -- SYN-ACK -- ACK -*- 数据 1 -- 数据 2 ... FakeHTTP 在 [ ACK -*- 数据 1 ] 之间,直接对外发送含有 HTTP 特征的 TCP 报文,不涉及任何转发。 nfqueue 的作用是:1. 截取通信中的数据包 2. 拦截 TCP 栈处理流程,将 HTTP 特征在 [数据 1] 前发送出去。 转发全部流量是消耗资源且会带来延迟的,FakeHTTP 不会采用这种方式。 |
![]() |
18
ArcherLeo 4 天前
有新发现,我拿了我类原生 Android 12 的机器试了下(已经 ROOT ),如果你手机挂了梯子的软件,然后,再用“VPN 热点”软件开启共享,似乎也有效,我见终端有输出。
|
![]() |
19
ArcherLeo 4 天前
我手机是开了 USB 网络共享模式的,且绑定了 VPN 热点,似乎对 NAT 下的设备都有效,前提是得开着 VPN 软件,VPN 状态也得是开的状态。
|
20
dizhang 4 天前
请问下我上海电信精品网用户,最近半年一直被电信限制 pt 上行只有 1-2MB/s ,测速正常是上行 300mb/s ,用的是软路由,系统是爱快,有没有什么方法可以解除这种限速,万分感谢!
|
21
igamebox 4 天前
关了再开提示
Sun Jun 1 23:18:24 2025 [main() - src/fakehttp_nfq.c:565] ERROR: nfq_create_queue() |
![]() |
22
mikewang OP ![]() |
![]() |
23
Ipsum 4 天前 via Android
有点意思,下来看看。
|
24
qwvy2g 4 天前 via Android
假如路由器有硬件加速,这个还有用吗?
|
![]() |
27
microka 4 天前
我是 ARMv8 的 ImmortalWrt ,下载了 fakehttp-linux-arm64.tar.gz
将解压出来的两个文件上传到 ImmortalWrt 的 root 目录,并设置执行权限 root ssh 登录 ImmortalWrt ,进入 /root 目录,执行 fakehttp -h www.speedtest.cn -i wan 提示 -ash: fakehttp: not found 请问应如何使用呢? |
30
qwvy2g 4 天前 via Android
用的是 CPE 设备名字 wwan0 ,运行后没有输出日志,但是能明显感觉出来打开网页没有之前迟滞感。
|
31
Rokaki 4 天前
问个小白问题,插入的额外数据到对方服务器不是无法识别吗
|
![]() |
33
Lentin 4 天前
似乎没有针对 ipv6 进行处理 可以加一下吗?
|
![]() |
34
NewYear 4 天前
@mikewang #32
想了好久都没看明白啥原理,看到楼上你的提示才发现。 “TTL 值默认为 3” 这句话是如此的普通,杀伤力是如此的强大,好好的 TTL 机制竟然能玩出这种效果,真就很离谱。 你说的不支持 NAT ,是指路由器会重新对 TCP 包进行编号,导致服务器认为“前面有个数据包我咋一直没收到”吧。 唉,看你们各种玩出花,我只能跟着你们思路走,就有种白学了网络协议的感觉。 而且知道是一回事,要做到又是一回事,我的感受俩字,太牛逼了!!! |
![]() |
36
NewYear 4 天前
哈哈哈,你这么“天秀”,会让很多学网络的人觉得自己很呆……
另外,这种特征明显,应该很容易识别,不过却也无法简简单单的识别,对设备的要求应该不低。 |
37
qwvy2g 4 天前 via Android
是运营商先不讲无德,测速白名单这是以前长宽,鹏博士等二级运营商干的事。
|
38
ioooou 4 天前
@mikewang 在 Debian12 上运行时提示:
bash fakehttp -h www.speedtest.cn -i eth0 Mon Jun 2 01:18:04 2025 [main() - src/fakehttp_nfq.c:501] FakeHTTP version 0.9.1 iptables v1.8.9 (nf_tables): Could not fetch rule set generation id: Invalid argument 请问如何解决? |
![]() |
39
microka 3 天前
请问这个对 IPv6 连接也生效吗?
|
41
Y25tIGxpdmlk 3 天前
@rick13 #40 为什么都说强,我怎么没看出区别?需要手机 APP 才能看到 HDR 效果吗?苹果还是安卓哪个 APP 支持 HDR 头像显示的,我试试
|
![]() |
42
rick13 3 天前
@Y25tIGxpdmlk macOS ,chrome 浏览器,我手机上用第三方 app 反倒看不到
|
![]() |
43
rick13 3 天前
@Y25tIGxpdmlk 怪了,用 macOS 和 iOS 的 Safari 看不到,用 macOS 的 chrome 就能,谷歌倒反天罡
|
![]() |
44
zjsxwc 3 天前
是这样的原理吗?
不用 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 特征,于是这种方式不会限速。 |
![]() |
49
mikewang OP #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 值很低,被半路丢弃,目标服务器收不到。 |
![]() |
50
opengg 3 天前 via Android
服务端需要处理吗?
|
52
marsteel 3 天前
大众汽车公司去年 9 月份承认,他们在美国的柴油车上安装了一个“欺骗装置”或软件,能够操纵和歪曲汽车排放的检测数据。 :D
|
![]() |
53
microka 3 天前
大佬,目前在 openwrt 上使用,本地 Windows 要保持 ssh 运行,请问有什么办法在其在 openwrt 上独立运行?
|
![]() |
54
microka 3 天前
Mon Jun 2 18:47:07 2025 [main() - src/fakehttp.c:812] ERROR: recv(): No buffer space available
刚重启路由器,运行后跑测速,没一会儿就崩了,这个有办法解决吗? |
![]() |
55
mikewang OP |
![]() |
57
fengyaochen 3 天前 via iPhone
上海移动有没有白名单地址可以伪装,晚高峰到上海联通就不限速到上海电信就限速,这个应该没用吧
|
58
freedomNet 3 天前
发现小小的问题,如果用 kill 就不能再 ssh 服务器,但如果是 exiting normally ,那就没问题。遇到这种问题,都会特意运行一次,然后再用 Ctrl + C exit normally.
|
![]() |
59
mikewang OP ![]() @fengyaochen #57
有可能只是晚高峰正常拥堵,线路不好。FakeHTTP 只能解决对基于 HTTP 域名(不)限速的场景。 @freedomNet #58 因为直接 kill ,将不给 FakeHTTP 机会去清除它加的 iptables 规则,导致队列阻塞(没有 fakehttp 进程去消化这些 SYN-ACK/ACK 数据包了)。 这个问题其实挺重要的,今天晚上的版本会解决这个问题。 |
60
yyysuo 3 天前
想请教一下,如果用 openwrt 裸核开了 sing-box 开了 tun+auto_redirect 会有效吗,sing-box 本身也会添加 nft 规则的。kmod-nft-queue
iptables-mod-nfqueue 这 2 个包默认不带,自行安装是有效的么? |
![]() |
62
Lentin 3 天前
我的光猫是路由模式的,fakehttp 跑在旁路,WiFi 设备在访问光猫公网端口对应的旁路端口会被 nat 为公网源地址访问内网地址,fakehttp 处理之后会导致访问不了,大佬看看有没有更优雅的方法解决一下,我之前用的这个方法:
https://yangjunhui.monster/t/1120910?p=1#r_16192422 |
63
Zeaxion 3 天前
似乎对 TLS 无效啊,坐标 028 ,v2 wss 协议,省内点对点,fake 改头,也起不来速度
协议换成 v2 ws ,不加 tls ,fake 改头,可以 |
64
hackroad 3 天前
routeros 不适用,得在前面再挂一层。
|
![]() |
65
mikewang OP |
66
songofsaya 2 天前
我只觉得太强了,Star 了~
|
![]() |
67
Lentin 2 天前
@mikewang #65
思来想去,还是用一个比较 2B 的方法 每五分钟执行一次 iptables 规则 #!/bin/bash PUBIP=$(curl -s curl https://4.ipw.cn) || exit 1 iptables -t mangle -S POSTROUTING | grep -q "$PUBIP" && exit 0 iptables -t mangle -I POSTROUTING -d $PUBIP -j MARK --set-mark 512 |
68
bfdh 2 天前 ![]() 关于 TTL 有个想法,增加一个动态计算的功能,因为 TTL 的典型值一般为 32/64/128/255 (不确定实际应用中有多少服务器会修改这个值),那么根据收到报文的 TTL 值可以推测出中间经过的跳数,进而动态地设置每条连接的 TTL 值。
另外,iptables 操作建议加行-w 参数,否则可能会因为有其他 iptables 实例在运行导致命令失败,尤其是在路由器上。 |
![]() |
69
mikewang OP @bfdh #68
1 )往返的路径不一定是同一条,估算容易出问题。虽然大多数情况是差不多的,但是没有 100%把握就需要容我考虑一下。 2 )-w 参数在旧版 iptables 不支持,会直接报错,因此考虑兼容性我没有写上。 |
![]() |
70
kuanat 2 天前 via Android
这个思路有意思,手动点赞
|
71
chord 2 天前
理论上在 TCP 应用层的层面可以实现吗?
|
![]() |
72
playboy0 2 天前
|
73
chord 2 天前
有没有办法通过本地的 socks5 代理转发,不通过内核转发。
|
![]() |
75
mikewang OP #71 @chord
不可以的,详见 16 楼。这里没有涉及转发,并且插入的 TCP 报文是特殊构造的,可以被中途丢弃且不影响原有 TCP 连接。 你可以简单理解为 FakeHTTP 工作在旁路(但实际上是队列处理的)。 |
76
jja 2 天前 via iPhone
太强了。请问是否可以在 docker+macvlan 网络+NET_ADMIN 权限的环境中运行呢?我目前的旁路网关是这样跑的。
|
![]() |
77
mikewang OP |
78
jja 2 天前 via iPhone
楼上这么多跑在 OpenWrt 上的,但是这不是还不支持 NAT 吗 🤔
|
81
a9k1n9 1 天前
手机端实行起来太麻烦了,主要是 iptables connbytes 模块。
|
![]() |
82
shiyunjin 1 天前
会加上原生 nft 支持吗?
|
![]() |
83
mikewang OP |
87
zzyyzz 1 天前
湖南电信有用,不开启前 iperf 上传到阿里云服务器,限速在 20Mbps 。
开启后,恢复到 50Mbps 。 以下为实验,按顺序操作: 1.阿里云服务器开启 iperf3 5201 端口; 2.关闭 fakehttp ,上传 20Mbps ; 3.开启 fakehttp ,上传 50Mbps ; 4.关闭 fakehttp ,上传 50Mbps ; 5.阿里云服务器开启 iperf3 8085 端口; 6.关闭 fakehttp ,上传 20Mbps ; 7.阿里云服务器开启 iperf3 5201 端口; 8.关闭 fakehttp ,上传 50Mbps ; 9.开启 fakehttp ,上传 50Mbps ; 可以得出结论,湖南电信应该是目的 ip+目的端口白名单模式,什么时候从白名单移出未知; 湖南其余运营商我名下宽带暂未限速。 |
![]() |
88
colinzhao 23 小时 56 分钟前
在 openwrt 上运行,如果同时跑着 clash 会有冲突吗
|