分享自己用 Rust 写的可以直接利用 SOCKS 代理的游戏加速器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Sketch
V2EX    分享创造

分享自己用 Rust 写的可以直接利用 SOCKS 代理的游戏加速器

  •  8
     
  •   Sketch 2020-06-21 15:10:55 +08:00 14631 次点击
    这是一个创建于 1938 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前分享了一款自己用 Go 写的游戏加速器 IkaGo,但是我也在文章中多次提到,加速器最重要的是线路而不是技术。为了能更好的利用好手上的一些优质的众所周知的 SOCKS 代理,我又开发了一款加速器(或者说,半个加速器)……

    pcap2socks

    pcap2socks 是一个以 Rust 语言撰写的,通过 pcap 重定向流量到 SOCKS 代理的代理。

    效果图(图一乐,具体效果还得看线路):

    pcap2socks.png

    特性

    • 将 TCP/UDP 流量重定向到 SOCKS 代理
    • 利用了代理 ARP 应答指定 IP 地址的请求,实现将自身作为网关处理来自指定 IP 地址的网络流量(也就是类似市面上的加速器,将主机的 IP 地址与网关设为网络环境中不存在的值,由加速器来处理流量)
    • 跨平台、Full Cone NAT 、开源……

    如何使用

    pcap2socks -s <需要代理的设备的 IP 地址> -p <需要代理的设备上所填写的网关> -d <SOCKS 代理,如 127.0.0.1:1080> // 比如 Nintendo Switch 的 IP 地址填写为 10.6.0.1,网关填写为 10.6.0.2,自己的 SOCKS 代理在 127.0.0.1:1080,那么 pcap2socks -s 10.6.0.1 -p 10.6.0.2 -d 127.0.0.1:1080 

    与市面上的加速器的比较

    • 免费(可以利用各位自己搭建或购买的那些众所周知的服务)、启动快、无广告、跨平台、设置可自定义、开源……

    一些不得不提的话

    pcap2socks 的实现相较 IkaGo 简单得多,也复杂得多。简单在略去了很多功能的实现,如代理、多路复用、监控网络流量等(以后可能会加回一部分),复杂在实现转发 TCP/UDP 到 SOCKS 的过程实际上是实现了一遍 TCP/UDP 栈,以及 Rust 函数式编程的编程范型与复杂的语法。开发的全过程也算是复习了一遍计算机网络,同时把自己的编程思想给更新了……

    pcap2socks 相较 IkaGo 在体量上也小很多,使用其它软件实现的代理也就不需要在服务器上部署 pcap2socks 的服务端。而且 pcap2socks 只是充当被代理设备的流量到 SOCKS 流量转换的角色,因此在代理的下方也可以接各种各样不同的服务,无论是 Udp2raw-tunnel,还是 kcptun,相较 IkaGo 也多了份自由。

    因为没有 macOS 的设备,而 WSL 上的 Linux 无法使用 pcap,因此目前仅在 Windows 上测试通过(理论上各平台适用)。

    项目地址


    希望 pcap2socks 也能帮助到需要解决联机游戏问题的你

    44 条回复    2022-09-06 11:01:26 +08:00
    wafm
        1
    wafm  
       2020-06-21 15:14:57 +08:00
    可惜现在的国内加速器厂商好像都做了壁垒?

    比如要同为一个加速器的朋友才能好好玩耍了
    Sketch
        2
    Sketch  
    OP
       2020-06-21 15:27:44 +08:00 via iPhone   1
    @wafm 虽然有听朋友说起过,但我感觉这些都只是他们自己的 bug
    wafm
        3
    wafm  
       2020-06-21 15:54:12 +08:00
    @Sketch 不是的,我亲测过,某 U 就是这样,我最后还是妥协冲了一个 妥妥的就行了
    Sketch
        4
    Sketch  
    OP
       2020-06-21 15:58:17 +08:00
    @wafm 挺微妙。不过你想,如果加速器有壁垒,那么不就相当于变成游戏局域网了吗,即使你用着电信宽带有着原生的 Full Cone NAT,也不能和好友游戏
    LPeJuN6lLsS9
        5
    LPeJuN6lLsS9  
       2020-06-21 17:42:25 +08:00
    还能用 arp 搞,长见识了。比起 tun/tap 有什么优势和劣势呢
    LPeJuN6lLsS9
        6
    LPeJuN6lLsS9  
       2020-06-21 17:46:02 +08:00
    @hantsuki 看样子不能自己代理自己,没仔细读说明。还是继续用 tun2socks 了
    Sketch
        7
    Sketch  
    OP
       2020-06-21 17:55:26 +08:00
    @hantsuki 是的,不能自己代理自己。真要说优势的话,大概就是能很方便的代理局域网中的其它设备(这也是目的)。
    XanderChen
        8
    XanderChen  
       2020-06-21 18:37:35 +08:00 via Android
    很强,

    向大佬学习。
    xwhxbg
        9
    xwhxbg  
       2020-06-21 18:43:03 +08:00
    呃,proxychains 了解一下?
    Sketch
        10
    Sketch  
    OP
       2020-06-21 19:04:59 +08:00 via iPhone
    @xwhxbg 稍微看了一下,实现的目的其实不太一样?
    wafm
        11
    wafm  
       2020-06-21 23:15:57 +08:00
    @Sketch 当时确实是的,我开始用自己的路由器直接走海外的,NAT 也显示为 A,开始还玩的可以速度也很快,自从猛男树枝出一些问题后,某 U 就开始有这方面的动作了
    wafm
        12
    wafm  
       2020-06-21 23:16:48 +08:00
    @Sketch 当时裸连也是不行,用 XUN 游也不行,最后实在没办法冲了个 U
    ssshooter
        13
    ssshooter  
       2020-06-22 08:43:05 +08:00
    看起来不错,放假试试
    ragnaroks
        14
    ragnaroks  
       2020-06-22 09:08:36 +08:00
    一人血书代理本机
    Sketch
        15
    Sketch  
    OP
       2020-06-22 09:13:17 +08:00 via iPhone
    @ragnaroks 这个需求的项目还是挺多的吧,比如 #6 提到的
    ragnaroks
        16
    ragnaroks  
       2020-06-22 09:53:14 +08:00
    @Sketch 因为代理本机操作起来最无脑最符合直接需求
    march1993
        17
    march1993  
       2020-06-22 09:55:49 +08:00 via iPhone
    Linux iptables redirect 不香吗
    Sketch
        18
    Sketch  
    OP
       2020-06-22 09:59:29 +08:00 via iPhone
    @march1993 很香,但是 Windows 和 macOS 似乎无解
    tkwl
        19
    tkwl  
       2020-06-22 10:28:11 +08:00
    如你所说,加速器优质的是低延时线路。。。还是赞一个
    littlespider89
        20
    littlespider89  
       2020-06-22 11:36:31 +08:00
    使用的时候显示

    Cannot determine interface. Available interfaces are listed below, use -i <INTERFACE> to designate:
    Sketch
        21
    Sketch  
    OP
       2020-06-22 12:43:04 +08:00
    @littlespider89 最近提交的 commit 可以自动选择 interface 了,所以如果能 build 的话希望能自行 build 。如果是直接从 release 中下载的话,就是需要手动指定用哪个设备(网卡)的。
    3q3q3q
        22
    3q3q3q  
       2020-06-22 13:45:12 +08:00
    这个是不是就不能再 win 下使用啊
    Sketch
        23
    Sketch  
    OP
       2020-06-22 13:49:30 +08:00
    @3q3q3q 我都写了“在 Windows 上测试通过”了……这个项目是跨平台的
    3q3q3q
        24
    3q3q3q  
       2020-06-22 13:53:50 +08:00
    这玩意在 win 下怎么用啊,让我研究一下
    littlespider89
        25
    littlespider89  
       2020-06-22 16:05:20 +08:00
    @Sketch -i interface 参数填写什么,填了 IP,MAC 地址,UUID 都不对
    Sketch
        26
    Sketch  
    OP
       2020-06-22 16:40:40 +08:00
    @littlespider89 如果是 Windows,应该是类似 "\Device\NPF_{00000000-0000-0000-0000-000000000000}" 的一长串,如果是 macOS 等系统,应该是 "en0" 之类的名称
    xwhxbg
        27
    xwhxbg  
       2020-06-22 17:13:19 +08:00
    @Sketch 呃,我的意思是有代理的话,直接 proxychains4 游戏的 binary 就能代理玩游戏了
    Senorsen
        28
    Senorsen  
       2020-06-27 02:23:44 +08:00 via iPhone
    @xwhxbg 看仔细啊老哥,这个是给局域网里其他设备用的,比如你有一台游戏主机( NS 、PS4 、XBox 等)的话,他们的联机游戏可以在电脑上开个这个来“加速”。
    steveway
        29
    steveway  
       2020-06-27 20:44:19 +08:00
    下载尝试了一下,发现 NS 报错 [无法连接互联网。DNS 解析失败]

    NS 设置:
    IP 地址:10.6.0.1
    子网掩码:255.255.255.0
    网关:10.6.0.2
    DNS:
    首选:8.8.8.8
    备选:1.1.1.1
    MTU1400

    电脑配置:
    pcap2socks.exe -s 10.6.0.1 -p 10.6.0.2 -d 127.0.0.1:1080 -i "\Device\NPF_{3ACA99AE-0CDA-4EC1-8798-91110****17C}" -v
    Listen on \Device\NPF_{3ACA99AE-0CDA-4EC1-8798-91110****17C} [2c:53:**:**:**:**]: 192.168.1.18
    MTU 1400
    Publish 10.6.0.2
    Proxy 10.6.0.1 to 127.0.0.1:1080

    测试过 Socks 代理是通的,请问是哪里设置有误呢?还望解答,感谢
    wayisama
        30
    wayisama  
       2020-07-13 21:01:22 +08:00
    thread 'main' panicked at 'index 21723 out of range for slice of length 86', src\libcore\slice\mod.rs:2725:5
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    一段时间就报错了,求问大佬解决方案
    wayisama
        31
    wayisama  
       2020-07-13 21:33:06 +08:00
    @wayisama 已经解决了,重新装了 WinPcap
    clooooo
        32
    clooooo  
       2020-07-15 10:19:08 +08:00
    可以代理 VMess 这种协议的吗
    Sketch
        33
    Sketch  
    OP
       2020-07-15 11:19:40 +08:00
    @clooooo pcap2socks 只关心入站协议,必须是 SOCKS (SOCKS5),并不关心出站协议
    clooooo
        34
    clooooo  
       2020-07-16 09:15:16 +08:00
    @Sketch 没听懂啊 我可以开一个 clash 代理 端口号 127.0.0.1:7890 再使用 pcap2socks 分享给 switch 吗?
    Sketch
        35
    Sketch  
    OP
       2020-07-16 10:06:42 +08:00
    @clooooo 如果 Clash 的前置代理是 SOCKS (SOCKS5) 的话,那么可以。一般来说,前置代理会是 HTTP/HTTPS/SOCKS4(a)/SOCKS5 中的数种。
    clooooo
        36
    clooooo  
       2020-07-16 15:01:01 +08:00
    @Sketch 那应该可以 clash 可以分发出 http 代理和 socks 代理
    virvivir
        37
    virvivir  
       2020-07-19 19:01:17 +08:00
    联通网络 日本 vultr $$ iPhone 13.6 开热点 mac OS 有线连接 iPhone switch 无线连接 iPhone
    IPHONE ip : 172.20.10.1 MAC ip: 172.120.10.3 SWITCH ip: 172.20.10.4
    sudo ./pcap2socks -s 172.20.10.4 -p 172.20.10.1 -d 172.20.10.3:7891 可行 NAT b

    赞美楼主,感谢!!!
    virvivir
        38
    virvivir  
       2020-07-19 19:11:32 +08:00
    IPHONE ip: 172.20.10.1 MAC ip: 172.20.10.3 SWITCH ip: 172.20.10.4

    正确的 ip
    lcqlwe
        39
    lcqlwe  
       2020-07-21 01:26:04 +08:00
    Device 64:b5:xx:xx:xx:xx joined the network
    thread 'tokio-runtime-worker' panicked at 'internal error: entered unreachable code', <::std::macros::panic macros>:2:4
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    thread 'tokio-runtime-worker' panicked at 'internal error: entered unreachable code', <::std::macros::panic macros>:2:4

    这是报错了吗?
    Sketch
        40
    Sketch  
    OP
       2020-07-21 09:51:02 +08:00
    @lcqlwe 是的,如果可以的话希望加上环境变量 RUST_BACKTRACE=1 把调用堆栈信息发一下。可以在 GitHub 开一个 issue 。
    Dyminas
        41
    Dyminas  
       2020-12-20 16:06:55 +08:00
    试着用了一下,给 switch 加速 nat 类型是 a,和我路由器插件开游戏模式效果一样。膜拜大佬,感谢。
    thetbw
        42
    thetbw  
       2021-10-31 14:12:16 +08:00
    想问下楼主这个是什么情况呢 interface 指的是什么呢
    ![]( https://i.loli.net/2021/10/31/PXmHokJylWzjC2Z.png)
    stephenyin
        43
    stephenyin  
       2022-05-16 12:20:58 +08:00
    问下大概的原理是不是这样:
    1.通过 arp 欺骗冒充游戏机的网关
    2.收到游戏机 TCP/UDP 数据后,封装成 sock5 协议并转发到本机 sock5 监听端口
    3.下行流量是 sock5 转 TCP/UDP 再通过局域网 IP 地址转给游戏机
    请问下怎么保证 arp 欺骗总是生效的?
    UXha45veSNpWCwZR
        44
    UXha45veSNpWCwZR  
       2022-09-06 11:01:26 +08:00
    大神,原来你在这.pcap2socks 简直是出差旅行打游戏必备神器~看到 natA 的时候我都惊呆了!
    我现在使用:root 安卓开热点,vpnhotspot 搭配 ssr 加速 switch,nat 只能到 B.联机稳定.
    有热点加速到 A 的方案吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     976 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 23:06 PVG 07:06 LAX 16:06 JFK 19:06
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86