设为首页收藏本站

恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 19015|回复: 177

【年度更新】【添加老毛子固件支持】openwrt 自动内网重拨 切换并保持公网IP的脚本

  [复制链接]
发表于 2015-8-24 20:52 | 显示全部楼层 |阅读模式
本帖最后由 VBasic 于 2016-8-9 19:54 编辑

年度更新请往下看:

pppoe拨号 ,设置了动态dns,但是获取到的ip老会变成10开头的内网ip,有没有什么方法能判断当前获取的是内网ip就重新拨号直到获取到公网IP的脚本或软件?
感谢大神ssitssit,搞定了。

参考:
http://www.right.com.cn/forum/forum.php?mod=viewthread&tid=100274
http://www.right.com.cn/forum/thread-139379-1-1.html

使用方法:

支持楼主,请点击下载最新 脚本文件 解压后用winscp放到 /usr/bin目录下,属性设置777

QQ截图20150826233204.png

在计划任务 crontab中每小时调用执行一次这个脚本:
  1. * */1 * * * sh /usr/bin/redial.sh
复制代码
效果图:
QQ截图20150829231136.png

==============================================

年度更新

==============================================

16年 8/9发布 改华硕[N14U N54U]5G 2G的7620老毛子Padavan固件 拨公网地址脚本
使用方法:

QQ图片20160809132357.png

由于老毛子固件重拨较久,这里使用了sleep 10来减少错误发生的概率。可以根据需要自行调整。

关于获取IP不准的情况:这里提供了下面一系列获取外网IP的网址(来自老毛子固件),可以根据需要自行替换:

checkip.dyndns.org
checkip.dyndns.org:8245
echo.tzo.com
ip.dnsexit.com
ip.changeip.com
myip.dnsomatic.com
ip1.dynupdate.no-ip.com
checkip.dns.he.net
checkip.zerigo.com
checkip.two-dns.de
ipv4.wtfismyip.com/text
ipv4.nsupdate.info/myip
myip.dtdns.com
members.3322.org/dyndns/getip

  1. sleep 10
  2. pubip=$(wget -qO - members.3322.org/dyndns/getip)
  3. #从网络获取公网IP

  4. wanip=$(nvram get wan0_ipaddr)
  5. #获取wan口ip

  6. echo "PUBLIC IP:" $pubip
  7. logger "出口IP:$pubip"
  8. echo "WAN IP:" $wanip
  9. logger "WAN口IP:$wanip"
  10. #显示IP

  11. if [ "$wanip" = "" ]||[ "$wanip" = "0.0.0.0" ]; then
  12. #如果获取的IP是无效,记为错误

  13. echo "Waitting 10 seconds"
  14. logger "等待10秒"
  15. sleep 10

  16. elif [ "$pubip" = "$wanip" ]; then
  17. #如果外网IP和本地IP相同,则保留IP
  18. echo "Dial success"
  19. logger "拨号成功,当前ip:$wanip"
  20. break

  21. else
  22. #如果获取的是内网IP,重拨
  23. echo "Intranet IP:" $wanip
  24. logger "获取到内网ip:$wanip,重拨"
  25. echo "Redial ..."
  26. restart_wan
  27. sleep 10
  28. fi
复制代码

=====================================================================================



8/29发布4.1版,更新少量内容:


1.修复循环重置计数
2.优化错误等待时间
3.修改提示内容


  1. #!/bin/sh
  2. times='0'
  3. for i in `seq 50`;
  4. #做50次拨号循环,50次如果都没拨上也停止
  5. do
  6. sleep 2
  7. wanip=$(ifconfig pppoe-wan 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2)
  8. #获取wan口ip
  9. sleep 2
  10. pubip=$(wget -qO - ddns.oray.com/checkip|tr -cd [0-9.])
  11. #从网络获取公网IP

  12. echo "Public IP:" $pubip
  13. echo "WAN IP:" $wanip
  14. #显示IP

  15. if [ "$wanip" = "" ]||[ "$wanip" = "0.0.0.0" ]; then
  16. #如果获取的IP是无效,记为错误

  17. if [ "$times" -ge "3" ]&&[ "$wanip" = "" ]||[ "$wanip" = "0.0.0.0" ]; then
  18. #如果连续5次都还是没有获取到ip,重拨
  19. times='0'
  20. ifdown wan | ifup wan
  21. sleep 2
  22. continue

  23. else
  24. times=`expr $times + 1`;
  25. echo "error times :" $times
  26. echo "waitting two seconds"
  27. sleep 2
  28. fi

  29. elif [ "$pubip" = "$wanip" ]; then
  30. #如果外网IP和本地IP相同,则保留IP
  31. echo "dial success"
  32. break

  33. else
  34. #如果获取的是内网IP,重拨
  35. echo "Intranet IP:" $wanip
  36. echo "Redial ..."
  37. ifdown wan | ifup wan
  38. sleep 2
  39. fi

  40. done
复制代码

经过测试,放出V4.0正式版:
更新内容:
1.根据4.0 Beta 修复 bug。
2.解决一处重复循环错误。
3.增加延时,避免本次重拨还没有完成,就进行下一次重拨的错误。
4.修复获取wan ip 和 公网 ip 为空的错误。


  1. #!/bin/sh
  2. times='0'
  3. for i in `seq 50`;
  4. #做50次拨号循环,50次如果都没拨上也停止
  5. do
  6. sleep 2
  7. wanip=$(ifconfig pppoe-wan 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2)
  8. #获取wan口ip
  9. sleep 2
  10. pubip=$(wget -qO - ddns.oray.com/checkip|tr -cd [0-9.])
  11. #从网络获取公网IP

  12. echo "Public IP:" $pubip
  13. echo "WAN IP:" $wanip
  14. #显示IP

  15. if [ "$wanip" = "" ]||[ "$wanip" = "0.0.0.0" ]; then
  16. #如果获取的IP是无效,记为错误

  17. if [ "$times" -ge "5" ]&&[ "$wanip" = "" ]||[ "$wanip" = "0.0.0.0" ]; then
  18. #如果连续5次都还是没有获取到ip,重拨
  19. ifdown wan | ifup wan
  20. sleep 2
  21. continue

  22. else
  23. times=`expr $times + 1`;
  24. echo "error times :" $times
  25. echo "waitting two seconds"
  26. sleep 2
  27. fi

  28. elif [ "$pubip" = "$wanip" ]; then
  29. #如果外网IP和本地IP相同,则保留IP
  30. echo "dial success"
  31. break

  32. else
  33. #如果获取的是内网IP,重拨
  34. echo $wanip
  35. ifdown wan | ifup wan
  36. sleep 2
  37. fi

  38. done
复制代码


8/26日晚再次更新,感[email protected] 提供的新思路,更新内容V4.0 Beta


1. 重新构建脚本判断逻辑
2. 联网获取公网IP,更准确
3. 增大使用范围,目前支持任意的非公网IP
4. 优化软件错误处理
5. 精简代码

  1. #!/bin/sh
  2. times='0'
  3. for i in `seq 50`;
  4. #做50次拨号循环,50次如果都没拨上也停止
  5. do
  6. pubip=$(wget -qO - ddns.oray.com/checkip|tr -cd [0-9.])
  7. #从网络获取公网IP
  8. wanip=$(ifconfig pppoe-wan 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2)
  9. #获取wan口ip

  10. echo "Public IP:" $pubip

  11. echo "WAN IP:" $wanip

  12. if [ "wanip" = "" ]||[ "wanip" = "0.0.0.0" ];
  13. #如果获取的IP是无效,记为错误
  14. then

  15. times=`expr $times + 1`;
  16. echo "error times :" $times
  17. echo "waitting two seconds"
  18. sleep 2

  19. if [ "$times" -ge "5" ]&&[ "$wanip" = "" ]; then
  20. #如果错误次数达到5次,重播
  21. ifdown wan | ifup wan
  22. sleep 2

  23. fi

  24. elif [ "$pubip" = "$wanip" ]
  25. then
  26. #如果外网IP和本地IP相同,则保留IP
  27. echo "success"
  28. break

  29. else
  30. echo $wanip
  31. ifdown wan | ifup wan
  32. sleep 2
  33. fi

  34. done
复制代码

8/26更新V3.0 脚本:
更新内容:
1.修复判断错误bug。
2.增加错误计数机制,多次错误获取不到IP重置wan口
3.修复程序稳定性。



  1. #!/bin/sh
  2. j='0'
  3. for i in `seq 50`;
  4. #做50次拨号循环,50次如果都没拨上也停止
  5. do
  6. IP=$(ifconfig pppoe-wan 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2)
  7. #获取wan口ip
  8. IPP=${IP:0:2}
  9. #取wan口IP前二位
  10. echo "Current IP:"
  11. echo $IP

  12. if [ "$IPP" = "0." ]; then
  13. #如果没有获取到IP,延时2秒
  14. echo "please wait 2 second"
  15. sleep 2

  16. elif [ "$IPP" = "" ]; then
  17. #意外情况,等待2秒
  18. echo "error,please wait 2 second"
  19. sleep 2
  20. j=`expr $j + 1`;
  21. echo "error times :"
  22. echo $j
  23. if [ "$j" -ge "5" ]&&[ "$IPP" = "" ]; then
  24. ifdown wan | ifup wan
  25. sleep 2
  26. else
  27. continue
  28. fi

  29. elif [ "$IPP" = "10" ]; then
  30. #如果IP开头是10的话,重拨
  31. echo "Intranet IP:"
  32. echo $IP
  33. ifdown wan | ifup wan
  34. sleep 2


  35. else
  36. #保留IP,跳出循环
  37. echo "Public IP:"
  38. echo $IP
  39. break


  40. fi
  41. done
复制代码


8/25 更新:试用了一天的脚本,感觉还有些问题,现更新2.0版本。新手写shell脚本,老鸟请勿见笑
更新内容
1.修复一些逻辑错误
2.增加延时
3.增加错误处理

  1. #!/bin/sh
  2. for i in `seq 50`;
  3. #做50次拨号循环,50次如果都没拨上也停止
  4. do
  5. IP=$(ifconfig pppoe-wan 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2)
  6. #获取wan口ip
  7. IPP=${IP:0:2}
  8. #取wan口IP前二位
  9. echo "Current IP"
  10. echo $IP

  11. if [ "$IPP" = "0." ]; then
  12. #如果没有获取到IP,延时2秒
  13. sleep 2
  14. echo "please wait 2 second"

  15. elif [ "$IPP" = "" ]; then
  16. #意外情况,等待2秒
  17. echo "error,please wait 2 second"
  18. sleep 2


  19. elif [ "$IPP" = "10" ]; then
  20. #如果IP开头是10的话,重拨
  21. echo "Intranet IP"
  22. echo $IP
  23. ifdown wan | ifup wan
  24. sleep 2


  25. else
  26. #保留IP,跳出循环
  27. echo "Public IP"
  28. echo $IP
  29. break


  30. fi
  31. done
复制代码


加个回复可见吧,不然没人回帖。

















点评

不是一般的LOW,是LOW到极点,这问题是出在电信身上,电信要是弄死不分公网给你,随你把路由器拨号拨烂了都拿不到公网ip,终极解决办法是10000号投诉  发表于 2016-9-14 09:46
并且以后分配到的都是公网IP,是不会再分配到私网IP的。  发表于 2016-8-9 14:37
你这个方法真LOW,说实话。我这里有更好的方法。如果你是电信的,发现分配给自己的IP是10开头的内网IP,可以直接拨打10000号进行投诉。后台人员受理以后,给你设置一下,10分钟之后你重启光猫就会分配到公网IP  发表于 2016-8-9 14:36

评分

参与人数 7恩山币 +9 收起 理由
大梨子 + 3 一看就是觉得高端、大气、上档次!
wqiang + 1 联通好像没有用
liu66 + 1 城会玩 如果我想让路由每天某个时段检查ip.
好猫不一样 + 1 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
pro_drive + 1 一看就是觉得高端、大气、上档次!
随风飘逝ゞ + 1 城会玩
huatian + 1 城会玩

查看全部评分

发表于 2016-12-5 18:24 | 显示全部楼层
发表于 2015-8-26 20:06 | 显示全部楼层
本帖最后由 ssitssit 于 2015-8-26 20:11 编辑

我自己用的是这个脚本,我用计划任务执行,每晚0点到5点执行,每分钟执行一次。#!/bin/sh
IP=$(ifconfig pppoe-wan 2> /dev/null | grep 'inet addr' | awk '{print $2}' | cut -d: -f2)
#获取WAN口ip
wan=`wget ipinfo.io/ip -O - -q`
#获取外网WAN口IP
IPP=${IP:0:3}
wwan=${wan:0:3}
#取字符串IP前三位
if [ "$wwan" = "$IPP" ]; then
#如果外网IP和内网相同的话,则保留IP
echo "Lan is:" $IP  "Wan is:" $wan
else
  ifup wan
#否则刷重拨号
echo "Replay diag"  
fi

点评

这个我加在那个计划任务里不能用  详情 回复 发表于 2016-9-28 17:46
ipinfo.io/ip ddns.oray.com/checkip 移动用这两个都没法对上外网ip。。。 有国内检测ip的wget么? 我这用ip.qq.com www.ipip.net www.ip138.com 这三个正常的。。。  详情 回复 发表于 2015-12-24 12:29
发表于 2015-8-24 22:09 | 显示全部楼层
投诉吧,我联通的,上个礼拜六也变10开头,投诉后今天又改回来了。

点评

湘潭联通投诉到工信部都没有用  详情 回复 发表于 2016-9-6 11:23
和他们说是对牛弹琴,根本不懂,然后就要你去办企业宽带,然后就没有然后了。。。  详情 回复 发表于 2015-8-24 22:25
 楼主| 发表于 2015-8-24 20:53 | 显示全部楼层
OPENWRT版本是这个  Powered by LuCI Trunk (0.12+git-14.328.33783-4d0a20b) PandoraBox R2 14.09
 楼主| 发表于 2015-8-24 22:06 | 显示全部楼层
顶上去

点评

楼主啊,老毛子固件有没有获得指定IP段的脚本啊?  详情 回复 发表于 2016-12-28 18:50
 楼主| 发表于 2015-8-24 22:25 | 显示全部楼层
wsh75 发表于 2015-8-24 22:09
投诉吧,我联通的,上个礼拜六也变10开头,投诉后今天又改回来了。

和他们说是对牛弹琴,根本不懂,然后就要你去办企业宽带,然后就没有然后了。。。

点评

不会的。电信联通这俩只要申诉就会给公网的。 跟你装傻你就申诉工信部啊。保证把你当大爷。  发表于 2015-11-1 19:23
哈哈,其实心如明镜,就是坑你而已  详情 回复 发表于 2015-8-25 13:55
装傻呢他们。建议直接报告宽带障碍。  详情 回复 发表于 2015-8-25 09:03
发表于 2015-8-24 23:10 来自手机 | 显示全部楼层
有脚本,自动检测外网ip,不是就重播。

点评

在哪有,求教。。。  详情 回复 发表于 2015-8-24 23:20
 楼主| 发表于 2015-8-24 23:20 | 显示全部楼层
ssitssit 发表于 2015-8-24 23:10
有脚本,自动检测外网ip,不是就重播。

在哪有,求教。。。

点评

谢啦,看到你发的帖子了  详情 回复 发表于 2015-8-24 23:30
 楼主| 发表于 2015-8-24 23:30 | 显示全部楼层
VBasic 发表于 2015-8-24 23:20
在哪有,求教。。。

谢啦,看到你发的帖子了
发表于 2015-8-25 09:03 | 显示全部楼层
VBasic 发表于 2015-8-24 22:25
和他们说是对牛弹琴,根本不懂,然后就要你去办企业宽带,然后就没有然后了。。。

装傻呢他们。建议直接报告宽带障碍。
发表于 2015-8-25 10:36 | 显示全部楼层
再不改直接工信部投诉
发表于 2015-8-25 12:47 | 显示全部楼层
你的脚本有用了吗?

点评

有用啊  详情 回复 发表于 2015-8-26 19:55
发表于 2015-8-25 13:55 | 显示全部楼层
VBasic 发表于 2015-8-24 22:25
和他们说是对牛弹琴,根本不懂,然后就要你去办企业宽带,然后就没有然后了。。。

哈哈,其实心如明镜,就是坑你而已
 楼主| 发表于 2015-8-26 03:30 | 显示全部楼层
顶上去让更多人看到
发表于 2015-8-26 18:30 | 显示全部楼层
如果能稳定保持外网IP那就很不错哦
发表于 2015-8-26 18:47 | 显示全部楼层
我也要向要公网,可惜电信只给内网IP  郁闷死
 楼主| 发表于 2015-8-26 19:55 | 显示全部楼层
sunmoney 发表于 2015-8-25 12:47
你的脚本有用了吗?

有用啊
发表于 2015-8-26 20:08 | 显示全部楼层
这都要隐藏啊……
发表于 2015-8-26 20:51 | 显示全部楼层
加个回复可见吧
发表于 2015-8-26 21:19 来自手机 | 显示全部楼层
谢谢分享啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛 ( 苏ICP备05084872号-1  

GMT+8, 2017-3-28 12:18

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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