V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Sketch
V2EX  ›  分享创造

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

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

    之前分享了一款自己用 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 欺骗总是生效的?
    MeteorVIP
        44
    MeteorVIP  
       2022-09-06 11:01:26 +08:00
    大神,原来你在这.pcap2socks 简直是出差旅行打游戏必备神器~看到 natA 的时候我都惊呆了!
    我现在使用:root 安卓开热点,vpnhotspot 搭配 ssr 加速 switch,nat 只能到 B.联机稳定.
    有热点加速到 A 的方案吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1006 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 20:03 · PVG 04:03 · LAX 12:03 · JFK 15:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.