Chinaunix首页 | 论坛 | 博客
  • 博客访问: 613009
  • 博文数量: 113
  • 博客积分: 2554
  • 博客等级: 少校
  • 技术积分: 1428
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-21 19:53
文章分类

全部博文(113)

文章存档

2014年(1)

2013年(2)

2012年(94)

2011年(16)

分类: LINUX

2012-04-16 19:09:41


点击(此处)折叠或打开

  1. #!/bin/bash

  2. #……上网认证脚本
  3. #版本:1.01 Alaph
  4. #作者:LiLi
  5. #GPL Licence
  6. #2009年3月7日

  7. #初始化默认文件路径和网络接口
  8. LAN_CONF=${PWD}/lan.conf #默认的局域网配置文件路径
  9. INTERNET_CONF=${PWD}/internet.conf #默认的外网配置文件路径
  10. NETWORK_INTERFACE=eth0 #默认的网络接口
  11. CONF=$LAN_CONF #脚本将要处理的配置文件,默认为局域网配置文件
  12. CONF_FLAG=0 #用0表示局域网配置文件,1表示因特网配置文件,2表示用户指定的配置文件
  13. LOG=${PWD}/.my-8021-net.log #简单的日志文件

  14. #设定退出错误号
  15. OK=0 #正常退出
  16. SYNTAX_ERROR=1 #语法错误
  17. CANNOT_GET_IP=2 #无法获取IP
  18. NO_FILE=3 #找不到文件
  19. TEST_ERROR=4 #测试时的错误,在实际使用中不会遇到

  20. #断开网络的函数
  21. logoff()
  22. {
  23.     wpa_cli logoff > /dev/null 2>&1 #下线
  24.     wpa_cli terminate > /dev/null 2>&1 #关闭进程
  25.     dhclient -r $NETWORK_INTERFACE > /dev/null 2>&1 #释放IP
  26. }

  27. #帮助信息
  28. return_help()
  29. {
  30.     echo "这是LiLi写的清水河上网脚本"
  31.     echo " -h : 返回这个帮助信息"
  32.     echo " -i : 网卡接口,默认为eth0"
  33.     echo " -l : 连接局域网,为默认方式"
  34.     echo " -w : 连接因特网"
  35.     echo " -c : 指定配置文件连网"
  36.     echo " -d : 断网"
  37.     echo " -L : 重新生成内网配置文件"
  38.     echo " -W : 重新生成外网配置文件"
  39.         echo " -s : 查询当前连接状态"
  40.         echo " -a : 查看通过此脚本上网的日志"
  41.         echo " -A : 清除日志文件"
  42.     echo "以默认方式上内网可以不接任何选项参数"
  43. }


  44. #初始化配置文件的函数,需要区分内网和外网的配置文件
  45. init_configure()
  46. {
  47.     echo "请输入你的用户名:"
  48.     read USER_NAME
  49.     echo "请输入密码:"
  50.     read USER_PASSWD
  51.     echo "正在初始化……"
  52.     echo "ctrl_interface=/var/run/wpa_supplicant" > $1
  53.     echo "#ctrl_interface_group=wheel" >> $1
  54.     echo "ap_scan=0" >> $1
  55.     echo "network={" >> $1
  56.     echo " key_mgmt=IEEE8021X" >> $1
  57.     echo " eap=MD5" >> $1
  58.     if [ $2 = 0 ]
  59.     then
  60.         echo " identity=\"$USER_NAME@local\"" >> $1
  61.     else
  62.         echo " identity=\"$USER_NAME\"" >> $1
  63.     fi
  64.     echo " password=\"$USER_PASSWD\"" >> $1
  65.     echo " eapol_flags=0" >> $1
  66.     echo "}" >> $1
  67.         echo "初始化完成"
  68.     #chmod 000 $1 # 保证账号的安全
  69. }

  70. show_state() #显示当前连接状态
  71. {
  72.         ps aux | grep wpa_supplicant | grep -v grep > /dev/null #有无认证进程
  73.         if [ $? = 0 ]
  74.         then
  75.                 cIP=`ifconfig $NETWORK_INTERFACE | grep "inet " | awk {'print $2'} | awk -F: {'print $2'}`
  76.                 echo "已向系统提交认证,$NETWORK_INTERFACE 的IP是$cIP "
  77.         else
  78.                 echo "未通过8021认证连接网络"
  79.         fi
  80. }

  81. while getopts ":hi:lwc:dLWsaA" Option #对选项的处理
  82. do
  83.     case $Option in
  84.         h ) return_help && exit $OK;;
  85.         i ) NETWORK_INTERFACE=$OPTARG;;
  86.         l ) CONF=$LAN_CONF && CONF_FLAG=0;;
  87.         w ) CONF=$INTERNET_CONF && CONF_FLAG=1;;
  88.         c ) CONF=$OPTARG && CONF_FLAG=2;;
  89.         d ) logoff && echo "网络已断开" && exit $OK;;
  90.         L ) init_configure $LAN_CONF 0 && exit $OK;;
  91.         W ) init_configure $INTERNET_CONF 1 && exit $OK;;
  92.         s ) show_state && exit $OK;;
  93.         a ) cat $LOG && exit $OK;;
  94.         A ) echo > $LOG && exit $OK;;
  95.     esac
  96. done

  97. #是否已经提交wpa认证,如果是,将中断原有进程
  98. ps aux | grep wpa_supplicant | grep -v grep > /dev/null
  99. if [ $? = 0 ]
  100. then
  101.     logoff
  102. fi

  103. #判断配置文件是否存在
  104. if [ -e $CONF ]
  105. then
  106.     wpa_supplicant -B -i $NETWORK_INTERFACE -c $CONF -D wired > /dev/null 2>&1
  107.     if [ $? = 0 ]
  108.     then
  109.         :
  110.     else
  111.         if [ $CONF_FLAG = 2 ]
  112.         then
  113.             echo "你指定的配置文件存在语法错误,请自行检查"
  114.             echo "脚本退出"
  115.             exit $SYNTAX_ERROR
  116.         fi
  117.         echo "配置文件存在语法错误,是否删除并重新配置[y/n]:"
  118.         read IsDelete
  119.         if [ "$IsDelete" = "y" -o "$IsDelete" = "Y" -o "$IsDelete" = "yes" ]
  120.         then
  121.             mv $CONF ${CONF}.bak
  122.             echo "配置文件已删除,正在重新生成"
  123.             init_configure $CONF $CONF_FLAG
  124.             echo "用新的配置认证"
  125.             wpa_supplicant -B -i $NETWORK_INTERFACE -c $CONF -D wired > /dev/null 2>&1
  126.         else
  127.             echo "配置文件错误,退出程序"
  128.             exit $SYNTAX_ERROR
  129.         fi
  130.     fi
  131. else
  132.     if [ $CONF_FLAG = 2 ]
  133.     then
  134.         echo "你指定的配置文件无法找到"
  135.         exit $NO_FILE
  136.     fi
  137.     echo "没有找到配置文件,脚本将生成一个配置文件。你也可以按CTRL+C结束脚本"
  138.     init_configure $CONF $CONF_FLAG
  139.     echo "配置文件已生成"
  140.     wpa_supplicant -B -i $NETWORK_INTERFACE -c $CONF -D wired > /dev/null 2>&1
  141. fi

  142. #从DHCP服务器(网关)获取IP
  143. echo "正在向网关请求IP,请稍候..."
  144. dhclient -r $NETWORK_INTERFACE > /dev/null 2>&1
  145. dhclient $NETWORK_INTERFACE > /dev/null 2>&1
  146. #查看IP,并判断是否有效,待改进
  147. IP=`ifconfig $NETWORK_INTERFACE | grep "inet " | awk {'print $2'} | awk -F: {'print $2'}`
  148. echo $IP | grep -v ^10.20 | grep -v ^222 | grep -v ^121 > /dev/null
  149. if [ $? = 0 ]
  150. then
  151.     echo "无法获取IP!"
  152.         echo "请检查:"
  153.         echo " 1.网线没有插好"
  154.         echo " 2.用户名和密码错误"
  155.         echo " 3.账号已欠费"
  156.         echo " 4.电信抽风"
  157.         if [ $CONF_FLAG = 2 ]
  158.         then
  159.                 echo "脚本退出"
  160.                 exit $CANNOT_GET_IP
  161.         fi
  162.     echo "如果你认为是用户名密码错误,是否重新配置[y/n]"
  163.     read RECONFIG
  164.     if [ "$RECONFIG" = "y" -o "$RECONFIG" = "Y" -o "$RECONFIG" = "yes" ]
  165.     then
  166.         mv $CONF ${CONF}.bak
  167.         logoff
  168.         init_configure $CONF $CONF_FLAG
  169.         echo "配置文件已重新建立,请重新运行脚本"
  170.         exit $CANNOT_GET_IP
  171.     else
  172.         echo "连接失败,脚本退出"
  173.         exit $CANNOT_GET_IP
  174.     fi
  175. else
  176.         echo "`date`: $IP" >> $LOG
  177.     echo "你已连入网络,IP是$IP"
  178.     exit $OK
  179. fi

  180. exit $TEST_ERROR

阅读(1280) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~