LinuxSir.cn,穿越时空的Linuxsir!

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

一个连网的实用脚本

[复制链接]
发表于 2003-12-27 00:10:28 | 显示全部楼层 |阅读模式
脚本的使用范围:对于校园网的mac绑定的拨号用户更改mac并拨号上网时使用
特点:脚本做得就像一个实用工具一样,非常方便,我做了两个版本,一个是用于X,一个用于字符界面,在X下像应用程序,需要要Xdialog支持,若没有安装Xdialog,把下面第一个脚本中的Xdialog的X去掉,可以在字符下使用dialog代替。在字符界面下能给出详细的连接情况,连接结果。

脚本测试环境:在redhat9.0和redflag4.0下测试通过

下面这个脚本如果在桌面上建立一个启动器,双击后就弹出一个对话框,选择要上网的帐号,就可以连上网了,用起来感觉就像应用程序一样

  1. #!/bin/bash
  2. #chmac--change mac address
  3. #this script for change my netcard mac address for enter Internet.

  4. MAC1=00:60:7c:01:1f:ab
  5. #MAC1和2对应拨号ppp1和ppp0,而MAC3只是改为
  6. MAC2=00:40:4c:51:d2:26
  7. #一个不对应帐号的MAC地址
  8. MAC3=00:40:5d:01:1f:ac

  9. #这个函数用来调用脚本出错时显示脚本的使用方法
  10. usage()
  11. {
  12. echo "Usage:chmac [1|2|3]
  13.              option 1:You can use accounter ACCOUNT1,
  14.                     2:You can use accounter ACCOUNT2.
  15.                     3:Only change your netcard mac address."
  16. exit 1
  17. }

  18. tmpfile="/tmp/tmp.$$"
  19. #建立空的临时文件,在X下的虚拟终端中敲入脚本名不带
  20. #参数时,启动对话框,要求选择一个要拨的帐号,并把选择结果保存在建立的临#时文件里
  21. if [ $# == 0 ];then
  22. Xdialog --title "Choose accounter" --menu "Which accounter you want to use?" 0 0 0 1 ACCOUNT1 2 ACCOUNT 3 "Just change mac" 2>$tmpfile
  23. ANS=`cat $tmpfile`
  24. rm -f $tmpfile
  25. #把选择结果显示赋给变量ANS,并删除临时文件
  26. fi

  27. if [ $# == 1 ];then
  28. #如果参数只有一个,检查是否为1-3内的值,1表用帐号1拨号ANS=$1
  29. #2表用帐号2拨号,3表只是更改网卡地址,不拨号上网
  30. ANS=$1
  31. elif [ $# == 0 ];then
  32. :
  33. else
  34. usage
  35. #如果给出多于一个参数,调用出错信息,错误代码为1退出
  36. fi

  37. case $ANS in
  38. #这个选项可以用来把帐号让给其他机器上网,而不会有MAC冲突
  39. 1|2|3) :
  40. ;;
  41. *) usage
  42. ;;
  43. esac

  44. echo "Please wait..."
  45. adsl-stop>/dev/null 2&>1
  46. #若正在上网,先断网,再进行下述动作
  47. /sbin/ifconfig eth0 down
  48. case $ANS in
  49. 1) /sbin/ifconfig eth0 hw ether $MAC1
  50. #更改为MAC1的地址,再拨号上网
  51.    /sbin/ifconfig eth0 up
  52.    adsl-start /etc/sysconfig/network-scripts/ifcfg-ppp1
  53. ;;
  54. 2) /sbin/ifconfig eth0 hw ether $MAC2
  55. #更改为MAC2的地址,再拨号上网
  56.    /sbin/ifconfig eth0 up
  57.    adsl-start
  58. ;;
  59. 3) /sbin/ifconfig eth0 hw ether $MAC3
  60.    /sbin/ifconfig eth0 up
  61. ;;
  62. *) usage
  63. #出错,退出脚本,给出错误代码1
  64. ;;
  65. esac

  66. /root/bin/networktest
  67. #调用另外一个我写的网络情况测试脚本,我把它放在了     
  68. #/root/bin/目录下,脚本名为networktest,然后退出代码0表脚本成功执行
  69. exit 0
复制代码


下面是没有任何图形的脚本,原理是一样的,有小小改动,那就不注释了
  1. #!/bin/bash
  2. #chmac--change mac address
  3. #this script for change my netcard mac address for enter Internet.

  4. MAC1=00:60:7c:01:1f:ab
  5. MAC2=00:40:4c:51:d2:26
  6. MAC3=00:40:5d:01:1f:ac

  7. usage()
  8. {
  9. echo "Usage:chmac [1|2|3]
  10.              option 1:You can use accounter ACCOUNT1,
  11.                     2:You can use accounter ACCOUNT2.
  12.                     3:Only change your netcard mac address."
  13. exit 1
  14. }

  15. if [ $# == 0 ];then
  16. echo -n "Which accounter you want to use[1)ACCOUNT1,2)ACCOUNT,3)Just change mac]:"
  17. while :
  18. do
  19. read ANS
  20. case $ANS in
  21. 1|2|3) break
  22. ;;
  23. *) echo -n "Please Enter accounter number[1)ACCOUNT1,2)ACCOUNT2,3)only change mac]:"
  24. ;;
  25. esac
  26. done
  27. fi

  28. if [ $# == 1 ];then
  29. ANS=$1
  30. elif [ $# == 0 ];then
  31. :
  32. else
  33. usage
  34. fi

  35. echo "Please wait..."
  36. adsl-stop>/dev/null 2&>1
  37. /sbin/ifconfig eth0 down
  38. case $ANS in
  39. 1) /sbin/ifconfig eth0 hw ether $MAC1
  40.    /sbin/ifconfig eth0 up
  41.    adsl-start /etc/sysconfig/network-scripts/ifcfg-ppp1
  42. ;;
  43. 2) /sbin/ifconfig eth0 hw ether $MAC2
  44.    /sbin/ifconfig eth0 up
  45.    adsl-start
  46. ;;
  47. 3) /sbin/ifconfig eth0 hw ether $MAC3
  48.    /sbin/ifconfig eth0 up
  49. ;;
  50. *) usage
  51. ;;
  52. esac

  53. /root/bin/networktest
  54. exit 0
复制代码


上述两个脚本中调用了我写过的一个ADSL网络工作情况报告的脚本,曾经贴出过,现在一并贴出:
  1. #!/bin/bash
  2. #networktest
  3. #this script for test my network status
  4. adsl-status >/dev/null 2>&1     #ADSL成功连接状态返回0,断网状态则是1
  5. case $? in
  6. 0) echo "Your network run well!!"
  7. ;;
  8. 1) ping -c 6 192.168.X.X >/dev/null 2>&1  #这里192.168.X.X是你的本地IP或你本
  9.                                        #地网络的其他主机IP也可以
  10.    if [ $? = 0 ]                  #本地网成功ping则返回0,错误返回1
  11.        then
  12.        echo "Your adsl is cut!!"
  13.        else
  14.        echo "Your local network is cut!!"
  15.    fi
  16. ;;
  17. *) echo "Your network configure error!!"
  18. ;;
  19. esac
复制代码


请兄弟们多多指教,:thank
发表于 2003-12-27 00:48:53 | 显示全部楼层
精彩~~,等我安了ADSL一定把这些脚本都试试~~
发表于 2005-7-30 14:14:29 | 显示全部楼层
#!/bin/sh
#ping两个dns,如果两个都断了,就重新启拨号
#把它加到crontab中,每两分钟执行一次,可保网络畅通 :)
ping 202.96.128.68 -c1
r1=$?
ping 202.96.134.133 -c1
r2=$?

echo -n `date +"%Y-%m-%d %H:%M"` " check connection: " >> /root/adsl.log

if [ $r1 -eq 1 ] && [ $r2 -eq 1 ] ;then
        echo "...[DEAD]"  >> /root/adsl.log
        echo -n "       stop adsl connection..." >> /root/adsl.log
        poff
        echo "done">> /root/adsl.log

        echo -n "       start adsl connection..." >> /root/adsl.log
        pon dsl-provider &
        sleep   10

        grep=`ifconfig   | grep "-t-P" | sed -e "s/[-a-zA-Z ]//g" -e "s/:/\//g" | cut -d/ -f2,3`
        if [ "x${grep}"  != "x" ];then
                echo "success,address is $grep" >> /root/adsl.log
        else
                echo "faild">> /root/adsl.log
        fi
        iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
        echo 1 > /proc/sys/net/ipv4/ip_forward
else
        echo "...[OK]" >>  /root/adsl.log
fi
回复 支持 反对

使用道具 举报

发表于 2005-8-2 21:17:10 | 显示全部楼层
这个不错,赞一下,呵呵。好帖
回复 支持 反对

使用道具 举报

发表于 2007-6-13 23:05:01 | 显示全部楼层
佩服你的技术 我一直都在学习写脚本但是就是学不懂。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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