之前分享了一款自己用 Go 写的游戏加速器 IkaGo,但是我也在文章中多次提到,加速器最重要的是线路而不是技术。为了能更好的利用好手上的一些优质的众所周知的 SOCKS 代理,我又开发了一款加速器(或者说,半个加速器)……
pcap2socks 是一个以 Rust 语言撰写的,通过 pcap 重定向流量到 SOCKS 代理的代理。
效果图(图一乐,具体效果还得看线路):
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 也能帮助到需要解决联机游戏问题的你
![]() | 1 wafm 2020-06-21 15:14:57 +08:00 可惜现在的国内加速器厂商好像都做了壁垒? 比如要同为一个加速器的朋友才能好好玩耍了 |
![]() | 4 Sketch OP @wafm 挺微妙。不过你想,如果加速器有壁垒,那么不就相当于变成游戏局域网了吗,即使你用着电信宽带有着原生的 Full Cone NAT,也不能和好友游戏 |
5 |
6 LPeJuN6lLsS9 2020-06-21 17:46:02 +08:00 @hantsuki 看样子不能自己代理自己,没仔细读说明。还是继续用 tun2socks 了 |
8 XanderChen 2020-06-21 18:37:35 +08:00 via Android 很强, 向大佬学习。 |
![]() | 9 xwhxbg 2020-06-21 18:43:03 +08:00 呃,proxychains 了解一下? |
![]() | 11 wafm 2020-06-21 23:15:57 +08:00 @Sketch 当时确实是的,我开始用自己的路由器直接走海外的,NAT 也显示为 A,开始还玩的可以速度也很快,自从猛男树枝出一些问题后,某 U 就开始有这方面的动作了 |
![]() | 13 ssshooter 2020-06-22 08:43:05 +08:00 看起来不错,放假试试 |
![]() | 14 ragnaroks 2020-06-22 09:08:36 +08:00 一人血书代理本机 |
17 march1993 2020-06-22 09:55:49 +08:00 via iPhone Linux iptables redirect 不香吗 |
![]() | 19 tkwl 2020-06-22 10:28:11 +08:00 如你所说,加速器优质的是低延时线路。。。还是赞一个 |
20 littlespider89 2020-06-22 11:36:31 +08:00 使用的时候显示 Cannot determine interface. Available interfaces are listed below, use -i <INTERFACE> to designate: |
![]() | 21 Sketch OP @littlespider89 最近提交的 commit 可以自动选择 interface 了,所以如果能 build 的话希望能自行 build 。如果是直接从 release 中下载的话,就是需要手动指定用哪个设备(网卡)的。 |
22 3q3q3q 2020-06-22 13:45:12 +08:00 这个是不是就不能再 win 下使用啊 |
24 3q3q3q 2020-06-22 13:53:50 +08:00 这玩意在 win 下怎么用啊,让我研究一下 |
25 littlespider89 2020-06-22 16:05:20 +08:00 @Sketch -i interface 参数填写什么,填了 IP,MAC 地址,UUID 都不对 |
![]() | 26 Sketch OP @littlespider89 如果是 Windows,应该是类似 "\Device\NPF_{00000000-0000-0000-0000-000000000000}" 的一长串,如果是 macOS 等系统,应该是 "en0" 之类的名称 |
28 Senorsen 2020-06-27 02:23:44 +08:00 via iPhone @xwhxbg 看仔细啊老哥,这个是给局域网里其他设备用的,比如你有一台游戏主机( NS 、PS4 、XBox 等)的话,他们的联机游戏可以在电脑上开个这个来“加速”。 |
![]() | 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 代理是通的,请问是哪里设置有误呢?还望解答,感谢 |
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 一段时间就报错了,求问大佬解决方案 |
32 clooooo 2020-07-15 10:19:08 +08:00 可以代理 VMess 这种协议的吗 |
34 clooooo 2020-07-16 09:15:16 +08:00 @Sketch 没听懂啊 我可以开一个 clash 代理 端口号 127.0.0.1:7890 再使用 pcap2socks 分享给 switch 吗? |
![]() | 35 Sketch OP @clooooo 如果 Clash 的前置代理是 SOCKS (SOCKS5) 的话,那么可以。一般来说,前置代理会是 HTTP/HTTPS/SOCKS4(a)/SOCKS5 中的数种。 |
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 赞美楼主,感谢!!! |
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 |
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 这是报错了吗? |
![]() | 40 Sketch OP @lcqlwe 是的,如果可以的话希望加上环境变量 RUST_BACKTRACE=1 把调用堆栈信息发一下。可以在 GitHub 开一个 issue 。 |
41 Dyminas 2020-12-20 16:06:55 +08:00 试着用了一下,给 switch 加速 nat 类型是 a,和我路由器插件开游戏模式效果一样。膜拜大佬,感谢。 |
![]() | 42 thetbw 2021-10-31 14:12:16 +08:00 想问下楼主这个是什么情况呢 interface 指的是什么呢  |
![]() | 43 stephenyin 2022-05-16 12:20:58 +08:00 问下大概的原理是不是这样: 1.通过 arp 欺骗冒充游戏机的网关 2.收到游戏机 TCP/UDP 数据后,封装成 sock5 协议并转发到本机 sock5 监听端口 3.下行流量是 sock5 转 TCP/UDP 再通过局域网 IP 地址转给游戏机 请问下怎么保证 arp 欺骗总是生效的? |
![]() | 44 UXha45veSNpWCwZR 2022-09-06 11:01:26 +08:00 大神,原来你在这.pcap2socks 简直是出差旅行打游戏必备神器~看到 natA 的时候我都惊呆了! 我现在使用:root 安卓开热点,vpnhotspot 搭配 ssr 加速 switch,nat 只能到 B.联机稳定. 有热点加速到 A 的方案吗? |