比如使用 ClashX Pro 开启了 Enhanced Mode 后,通过 ifconfig
可以看到有一个 utun10:
utun10: [
{
address: '198.18.0.1',
netmask: '255.255.0.0',
family: 'IPv4',
mac: '00:00:00:00:00:00',
internal: false,
cidr: '198.18.0.1/16'
}
]
但它是如何接管电脑上所有的网络请求的呢? ClashX Pro 是闭源的,没有办法查看源码。
通过命令 route -n get default
查看默认 route 是 en0 接口:
route to: default
destination: default
mask: default
gateway: 192.168.11.1
interface: en0
flags: <UP,GATEWAY,DONE,STATIC,PRCLONING,GLOBAL>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 0
难道使用 Network Extension 中的 Packet Tunnel Provider 不需要手动设置网络的转发吗?
我所理解的过程是这样的:
所以总结下我的问题,第二步是如何接管系统所有请求的?第四步是如何转发到其他接口的?在 Linux 中应该是需要手动写吧?在 macOS 中是用 NE 里哪一些 API ?
另外,在 iOS 端也是和 macOS 一样的吧?开启 QX 应用后,在设置中可以看到有 utun 接口。类似的应用都是用 TUN 模式的( Loon 用 TUN 和 HTTP mode 两种模式)。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.