找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 12882|回复: 31

求助,固定重拨某一网段的脚本(已解决,感谢热心网友)

[复制链接]
发表于 2014-4-11 16:12 | 显示全部楼层 |阅读模式
本帖最后由 ssitssit 于 2014-4-16 12:16 编辑

我是openwrt的固件路由器,现在请教高手们写个脚本,就是检测WAN口的IP如果不是220开头的,则重拨号直到是220开头的。

ps:论坛也搜过脚本,可经过修改后还是不行,参照如下:https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=100274

参照高手编的脚本加与修改后:
#!/bin/sh
IP=$(ifconfig pppoe-wan 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2)
#获取WAN口ip
IPP=${IP:0:3}
#取WNA口IP前三位
if [ "$IPP" = "116" -o "$IPP" = "220" ]; then
#如果IP开头是116或者220的话,则保留IP
  echo $IP
else
  ifdown wan | ifup wan
#否则刷重拨号
echo "Repay diag"
fi

我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2014-4-12 10:58 | 显示全部楼层
自己顶啊,高手们来看看啊。。。。。。。。。。。。。。。。。。。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2014-4-12 15:13 来自手机 | 显示全部楼层
废话,DDWRT的脚本搬到OPENWRT肯定不行啊!我现在在用手机,晚上帮你写一下~
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-12 17:43 | 显示全部楼层
gyc990326 发表于 2014-4-12 15:13
废话,DDWRT的脚本搬到OPENWRT肯定不行啊!我现在在用手机,晚上帮你写一下~

太感谢你了,我都研究了一个星期了,好多脚本都试了,都没效果或者出错。 本人没有LINUX基础啊,c+语言懂点。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2014-4-12 18:34 | 显示全部楼层
为啥要220开头的?有啥好处?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-12 18:35 | 显示全部楼层
cxlz 发表于 2014-4-12 18:34
为啥要220开头的?有啥好处?

我长城宽带啊,其它IP段我会卡,我测试过220开头的IP段我非常稳定。长城是内网+NAT的方式上网。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2014-4-12 21:47 | 显示全部楼层
我就是专门学脚本的~~~~
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2014-4-12 21:54 | 显示全部楼层
还有问一下,你是要一直检测,一旦不是220就断线重连,还是就在拨号时检测一下??
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-12 22:07 | 显示全部楼层
gyc990326 发表于 2014-4-12 21:54
还有问一下,你是要一直检测,一旦不是220就断线重连,还是就在拨号时检测一下??

就检测一下就行了,我再通过计划任务自己添加1小时执行一次。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-12 22:14 | 显示全部楼层
gyc990326 发表于 2014-4-12 21:47
我就是专门学脚本的~~~~

论坛里很少人懂脚本啊。。。。。。。。。。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2014-4-12 22:43 | 显示全部楼层
  1. #前面和你说的帖子一样,找到拨号的一行(解释一下就是获取你的拨号命令行)
  2. #除了帖子里的方法还可以在luci中的状态→系统进程中找到
  3. #程序开始
  4. while [true]
  5. do
  6.         ip = "0.0.0.0"
  7.         count=0
  8.         #获取进程列表→搜索pppd→统计行数
  9.         count=$(ps |grep pppd|grep -v grep |wc -l)
  10.         #count=0则需要拨号,否则不需要拨号
  11.         if [$count -gt 0]
  12.         then
  13.         {
  14.         echo "[I]Had already dialed!!"
  15.         sleep 1000
  16.         #sleep一下缓解CPU压力
  17.         }
  18.         else
  19.         {
  20.         echo "[E]Not dialed!"
  21.         sleep 10
  22.         #把下面一行换成刚才找到的哪一行
  23.         pppd file /tmp/ppp/options.pppoe
  24.         ping = 0
  25.         #ping百度,直到可以ping通为止,也可以ping其他网址(必须保证畅通)
  26.         while[$ping -eq 0]
  27.         do
  28.                 ping=$(ping www.baidu.com -c 2|grep 64 bytes from |wc -l)
  29.         done
  30.         }
  31.         fi
  32.         #获取ip第一段
  33.         #找到ip所在行
  34.         temp = $(ifconfig|grep -A1 "ppp0"|grep "inet addr")
  35.         #截去" Bcast"右边
  36.         ip = ${temp%" Bcast"*}
  37.         #删除“inet addr:”
  38.         ip = ${ip/"inet addr:"/""}
  39.         if [$ip != ""]
  40.         then
  41.         {
  42.                 echo "[+]Current IP is $ip"
  43.                 iphead = $(echo $ip|cut -d "." -f 1)
  44.                 echo "[+]Its head is $iphead"
  45.                 if[$iphead -eq 220]
  46.                 then
  47.                 {
  48.                         echo "[+]Congratulation!Dialed OK!"
  49.                         #程序退出
  50.                         exit 0
  51.                 }
  52.                 else
  53.                 {
  54.                         sleep 10
  55.                         echo "[I]No luck,clean up and retry!"
  56.                         sleep 10
  57.                         echo "[+]Killing pppd process"
  58.                         kill -9 `ps |grep pppd|awk '{print $1}'`
  59.                         sleep 10
  60.                         echo "[+]pppd has been killed!"
  61.                         echo "[+]Clearing ip"
  62.                         ip = ""
  63.                 }
  64.                 fi
  65.         }
  66.         fi
  67. done
复制代码


搞定,这是第一版,明天晚上我再改一改~~,你先测试一下,看看能不能用
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-12 22:47 | 显示全部楼层
gyc990326 发表于 2014-4-12 22:43
搞定,这是第一版,明天晚上我再改一改~~,你先测试一下,看看能不能用

好的,太感谢了,我晚上就一直等脚本,我一会试试。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2014-4-13 09:25 | 显示全部楼层
gyc990326 发表于 2014-4-12 22:43
搞定,这是第一版,明天晚上我再改一改~~,你先测试一下,看看能不能用

你好啊,执行这个脚本的时候提示错误了。
错误信息是:/etc/cp.sh: line 29: syntax error: unexpected "do" (expecting "}")
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2014-4-13 10:19 来自手机 | 显示全部楼层
#!/bin/sh IPPREFIX="113.224." IP=$(ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'| sed -n 2p |grep $IPPREFIX) if [ "$IP" == "" ]; then   echo "NO" ifdown wan | ifup wan   else   echo "yes" fi IP=$(ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'| sed -n 3p |grep $IPPREFIX) if [ "$IP" == "" ]; then   echo "NO" ifdown wan1 | ifup wan1   else   echo "yes" fi
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2014-4-13 10:20 来自手机 | 显示全部楼层
自己修改~应该还可以精简或者用其他命令~自己看着办吧
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-19 12:29

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

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