今天在群里看到有朋友问了这么一个问题:
“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
那么在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
来查看当前的路由表。