想必大家使用Ubuntu或其他版本Linux系统上网的时候,常常遇到这样一种情况,如果电脑同时连着有线网络跟无线(Wifi)网络,系统会默认(优先)使用有线网络,即使用有线网络的网关作为默认路由。这种情况下,如果无线(Wifi)能上外网,而有线却只能上内网,则系统因为默认走有线路由而无法上外网,唯一便捷的解决办法便是断开有线。然而在某些情况下,我们既需要连接无法上外网的有线(如与有线局域网内的他人共享文件),又需要通过无线(Wifi)上外网,这样就需要更改系统的默认路由了。
因为本人经常遇到这种情况,有线IP地址192.168.200.69,无线IP地址:192.168.18.127,所以特意写了一个Shell脚本来解决这个问题,当无线网卡跟有线网卡同时启用时,优先使用无线路由器的网关。脚本代码如下:
#!/bin/sh # /home/trevor/cpplive/WifiGateway.sh wifi=`iwconfig | head -1 | awk '{print $1}'` echo "Wifi interface: $wifi" gw=`ip addr show $wifi | head -3 | tail -1 | awk '{print $2}'` echo "Wifi IP: "$gw gw=`echo $gw | awk -F. '{printf("%s.%s.%s.1",$1,$2,$3)}'` echo "Wifi gateway: "$gw echo "Set the Wifi gateway as the default gw now" route delete default route add default gw $gw echo "Set the Wifi gateway as the default gw end"
该脚本先利用iwconfig命令结合管道跟head、awk命令找到无线网络设备接口名存入变量wifi中,然后依照设备接口名结合ip命令获取无线网络的主机IP地主,然后假设无线路由器的网关地址为该IP段的第一个IP地址,即xxx.xxx.xxx.1(如果本机无线IP地址为192.168.1.127,则猜测无线路由器的网关地址为192.168.1.1(通常的路由器都遵循这个规律,暂时没有找到更好的解决办法)),存入变量gw中,最后删除默认路由(即有线路由器的网关地址),将无线网络的网关作为默认路由。
由于该脚本要用到route命令,所以需要管理员(root)权限执行,在本人笔记本上的输出结果如下:
Wifi interface: wlan0 Wifi IP: 192.168.18.127 Wifi gateway: 192.168.18.1 Set the Wifi gateway as the default gw now Set the Wifi gateway as the default gw end
除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。
谢谢!
看到你这个文章后,我确实修改成功了.看了很多文章,感觉有卖弄的嫌疑.
而这个文章用很简单的脚本,了解了route这个命令的强大.
非常感谢.
已经转载并注明出处了.
不客气,很高兴能帮到你^^
今天上午刚考完Linux归来~哎╮(╯▽╰)╭
怎么,贺昌兄考得不理想麽?
都到了考究级别了
考究个啥啊,超哥留言的时候把域名加上呗~
比较专业
呵呵,Ubuntu下的一点小应用罢了~