iOS设备使用route分开内网与外网访问

今天在群里看到有朋友问了这么一个问题:

“iOS能否同时开启蜂窝移动数据和WiFi,蜂窝移动数据用来与外界通信,WiFi用来与局域网通信。”

诶?这不就是route的拿手戏吗?虽然对于普通人来讲这个功能几乎用不到,不过对于开发者来讲,这个功能还是挺方便的。

比如,我通过Wi-Fi SSH到我的设备上,在那里使用Cycript或者debugserver等等,然后我想要调试的程序因为某些原因,必须走蜂窝数据网络。

这时候,就该route上场了!

首先呢,咱们得先从Cydia上安装“network-cmds”,它位于Saurik的源。这个包里有arp, ifconfig, netstat, route, traceroute。在这篇文章中,我们主要使用的是route, ifconfig以及netstat。

(因为iPhone没越狱,所以这里用iPod touch来演示,实际上也差不了多少。以下命令均是在iPod touch上执行的。)

首先我们来看看网络端口的配置。

$ ifconfig

屏幕快照 2015-05-14 下午11.01.09

那么在iOS中,Wi-Fi的设备名是"en0",蜂窝数据的设备名是"pdp_ip0"。

由于测试设备是iPod,那么我们这里只关心Wi-Fi(en0)就好。

    inet 192.168.2.4 netmask 0xffffff00 broadcast 192.168.2.255
    ether 8c:2d:aa:77:33:85

这里稍微解释一下这些数据的意思。

inet就是这个设备的IP地址;
netmask就是子网掩码,这里的(0xffffff00)16就是255, 255, 255, 0;
broadcast,即广播地址,我们似乎是用不到;
ether,直译过来就是以太,当然这里我们一眼就能看出这是网卡的mac地址。

接下来就是配置route了~

我们先执行

$ route -n flush

清空当前的route。

然后添加外网的route,(192.168.2.0为演示用,实际上应该为你的蜂窝数据的网关地址)

$ route -n add default 192.168.2.0

接着是内网的route,(172.16.1.0为演示用,实际上应该为你的局域网的网关地址)

$ route -n add -net 172.16.1.0/24 172.16.1.1

最后,我们可以通过执行,

$ netstat -r

来查看当前的路由表。

屏幕快照 2015-05-14 下午11.31.18

Leave a Reply

Your email address will not be published. Required fields are marked *

11 + 11 =