LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 681|回复: 0

[元旦第一帖]debian下的网络管理脚本

[复制链接]
发表于 2011-1-1 12:43:45 | 显示全部楼层 |阅读模式
我不用network-manager,wicd等工具, 希望在console和gui下对于预设的essid都可以自动/半自动连接,方便我在图书馆,自修室,寝室等地切换网络
提供自动和手动两种模式,自动模式运行脚本不带参数
interfaces_qinshi是我寝室网络的配置文件,格式参考/etc/network/interfaces
  1. man 5 interfaces
复制代码

wpa-psk XXXXXXXX是无线密码,明文,假设为123456
wpa-ssid sao_laotang是ESSID, 我们寝室长的大号
  1. auto lo
  2. iface lo inet loopback
  3. allow-hotplug eth0
  4. iface eth0 inet static
  5.     address 10.166.xx.xx
  6.     netmask 255.255.255.0
  7.     gateway 10.166.xx.xx
  8. allow-hotplug wlan0
  9. iface wlan0 inet dhcp
  10.     wpa-psk 123456
  11.     wpa-ssid sao_laotang
复制代码

interfaces_fudan是学校图书馆和自修室的网络配置,它的无线连接不需要密码:
  1. auto lo
  2. iface lo inet loopback
  3. allow-hotplug eth0
  4. iface eth0 inet dhcp
  5. allow-hotplug wlan0
  6. iface wlan0 inet dhcp
  7.         wpa-key-mgmt NONE
  8.         wpa-ssid fduwireless
复制代码
其他interfaces_*文件类似.

脚本内容:
  1. #!/bin/bash
  2. # Author: stesen <stesenchina@gmail.com>
  3. function showip {
  4.     echo -e "\033[0;32m"
  5.     echo -n "IP:       "
  6.     ifconfig $1 | head -3 | perl -nle'/dr:(\S+)/ && print $1'
  7.     if [ $1 == $if_wireless ]
  8.     then
  9.         echo -e "\033[0;33m"
  10.         /sbin/iwgetid
  11.     fi
  12.     echo -e "\033[0m"
  13. }
  14. function setif_withfile {
  15.     setif_down
  16.     ifup -v -i $1 $2
  17.     showip $2
  18. }
  19. function setif_updown {
  20.     setif_down
  21.     ifup -v $1
  22.     showip $1
  23. }
  24. function setif_down {
  25.     ifdown $if_ethernet >/dev/null 2>&1
  26.     ifdown $if_wireless >/dev/null 2>&1
  27. }
  28. function option {
  29.     case $1 in
  30.         d)
  31.             setif_withfile $rcdir/interfaces_dhcp $if_ethernet
  32.             ;;
  33.         f | fduwireless)
  34.             setif_withfile $rcdir/interfaces_fudan $if_wireless
  35.             ;;
  36.         m | maxwit_embedded)
  37.             setif_withfile $rcdir/interfaces_maxwit $if_wireless
  38.             ;;
  39.         q | sao_laotang)
  40.             setif_withfile $rcdir/interfaces_qinshi $if_wireless
  41.             ;;
  42.         qe)
  43.             setif_withfile $rcdir/interfaces_qinshi $if_ethernet
  44.             ;;
  45.         e)
  46.             setif_updown $if_ethernet
  47.             ;;
  48.         w)
  49.             setif_updown $if_wireless
  50.             ;;
  51.         off)
  52.             echo -e "\033[0;36mAll interfaces off!\033[0m"
  53.             setif_down
  54.             ;;
  55.         *)
  56.             echo -e "\033[0;36mERROR ARGV!\033[0m"
  57.             ;;
  58.     esac
  59. }
  60. function auto_wireless {
  61.     ifconfig $1 down
  62.     iwconfig $1 essid "any"
  63.     ifconfig $1 up
  64.     allessid=`/sbin/iwlist scanning 2>/dev/null | grep ESSID | awk -F" '{print $2}'`
  65.     for essid in $allessid
  66.     do
  67.         if [ $essid == "sao_laotang" ] || \
  68.             [ $essid == "fduwireless" ] || \
  69.             [ $essid == "maxwit_embedded" ]
  70.         then
  71.             echo -e "\033[0;36m### Find $essid ###\033[0m"
  72.             echo
  73.             option $essid
  74.             exit 0
  75.         fi
  76.     done
  77.     if [ -z $allessid ]
  78.     then
  79.         echo -e "\033[0;31mScanning Failed\033[0m"
  80.     else
  81.         echo -e "\033[0;31mNo Defined ESSID\033[0m"
  82.         echo "### ALL ESSID: ###"
  83.         echo $allessid
  84.     fi
  85.     exit 0
  86. }
  87. function manual_wireless {
  88.     option $1
  89. }
  90. rcdir="/home/stesen/tmp/netrc"
  91. sysrc="/etc/network/interfaces"
  92. if_wireless=wlan0
  93. if_ethernet=eth0
  94. if [ $USER != "root" ]
  95. then
  96.     echo -e "\033[0;31mLogin as root !!!\033[0m"
  97.     exec su root -c "$0 $*"
  98.     exit 1
  99. fi
  100. if [ $# == 0 ]
  101. then
  102.     echo -e "\033[0;32mAutomatically Set Wireless:\033[0m"
  103.     echo
  104.     auto_wireless $if_wireless
  105. else
  106.     echo -e "\033[0;32mManually Set Net Interfaces:\033[0m"
  107.     echo
  108.     manual_wireless $1
  109. fi
复制代码

原文在此,如有修改,第一时间放在我blog上:
http://stesen.wikidot.com/autonet
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表