求助,请诸位大大教教我做 ddns 的 wget 脚本,文科生,实在是无力了。。。。。。

2014-09-03 13:04:47 +08:00
 jun9100
wndr4300刷openwrt,因为是双拨,一条是电信,一条线是华数,其中华数的ip外网是无法连接,而且如果直接用wget更新ip就有可能抓到华数的ip,所以想指定电信出口的wan。在网上找了很多帖子和教程都无果。希望诸位大大能帮帮小弟。


WANIF="pppoe-wan2"
MYIP=`ifconfig ${WANIF} |grep \"inet addr\" | cut -d : -f 2 | cut -d'B' -f 1"`
nonceIP=`ifconfig -a|grep -A 1 $INTERFACE|grep inet|awk '{print $2}' |awk -F: '{print $2}'`
usedIP=`cat /tmp/usedIP.txt

if [ "$nonceIP" == "$usedIP" ]; then
echo $nonceIP > /tmp/nonceIP.txt
else
wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${WANIF}&u=*****&p=******&cmd=update&offline=0'
echo $nonceIP > /tmp/usedIP.txt
fi
6563 次点击
所在节点    问与答
37 条回复
mind3x
2014-09-03 23:01:25 +08:00
@jun9100 如我上面所说,在你这个更新DDNS的脚本最前面加上
/usr/sbin/mwan3 stop
(或 /etc/init.d/mwan3 stop 一个效果)

在最后面加上
/usr/sbin/mwan3 start
(或 /etc/init.d/mwan3 start 一个效果)

大约就是这样。行不行就看你的人品了。
jun9100
2014-09-03 23:05:23 +08:00
mwan3 stop
sleep 5
INTERFACE=pppoe-wan2
MYIP=`curl --interface pppoe-wan2 http://ifconfig.me/ip`

nonceIP=`ifconfig -a|grep -A 1 $INTERFACE|grep inet|awk '{print $2}' |awk -F: '{print $2}'`
usedIP=`cat /tmp/usedIP.txt`

if [ "$nonceIP" == "$usedIP" ]; then
echo $nonceIP > /tmp/nonceIP.txt
else
wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0'
wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0'
wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0'
wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0'
wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0'
echo $nonceIP > /tmp/usedIP.txt
fi
sleep 5
mwan3 start
jun9100
2014-09-03 23:30:06 +08:00
@mind3x 果然可以,真的是非常感谢。
最终的脚本如下:
脚本1:wget更新changeip免费ddns的主脚本
####################updatedns.sh###########################
#/root/updatedns.sh

/usr/sbin/mwan3 stop #由于mwan3强大的功能会无视我们指定的端口,所以先暂时停止mwan3
sleep 5
INTERFACE=pppoe-wan2 #填入自己需要强制通行的端口
MYIP=`curl --interface pppoe-wan2 http://ifconfig.me/ip`#通过curl命令抓取我们所指定端口的网址,如果没有安装curl,记得先去安装

nonceIP=`ifconfig -a|grep -A 1 $INTERFACE|grep inet|awk '{print $2}' |awk -F: '{print $2}'`
usedIP=`cat /tmp/usedIP.txt`#通过grep搜索curl获取到的myip地址,并且写入到/tmp/usedIP.txt,如果没有安装curl,记得先去安装

if [ "$nonceIP" == "$usedIP" ]; then
echo $nonceIP > /tmp/nonceIP.txt #判断nonceIP是否和usedIP一致,如果一致就停止更新ddns,如果不同则执行下面的wget命令
else
wget -q -O- 'http://nic.ChangeIP.com/nic/update?hostname=******&${MYIP}&u=******&p=******&cmd=update&offline=0' #根据自己ddns服务商不能,wget的命令也会不一样。
fi
sleep 5
/usr/sbin/mwan3 start #重新启动mwan3任务
######################updatedns.sh############################
这个脚本我是放在/root/updatedns.sh下,记得修改权限为0777

脚本2:这个脚本是让/root/updatedns.sh能按计划执行的
######################crontab############################
#/etc/crontabs/crontab
*/30 * * * * root /root/updatedns.sh > /dev/null 2>&1 #最前面的30是代表更新的时间间隔,30是代表30分钟。可以根据自己的需求修改。位置是放在/etc/crontabs/crontab,记得修改权限为0777
######################crontab############################

最后再次感谢@mind3x给予我的帮助,也十分感谢@mind3x分享的wndr4300的openwrt固件。南无阿弥陀佛。
用的时候记得把#后面的文字删除,这句是写给和我一样的小白的。
mind3x
2014-09-04 00:33:37 +08:00
@jun9100 补充一点,因为你已经定义了

INTERFACE=pppoe-wan2 #填入自己需要强制通行的端口

所以用curl取IP的时候就用这个变量,不要再写pppoe-wan2了

MYIP=`curl --interface $INTERFACE http://ifconfig.me/ip`
jun9100
2014-09-04 09:55:36 +08:00
@mind3x 恩恩,这就去优化脚本。
jun9100
2014-09-04 10:13:00 +08:00
@mind3x 大大,这个脚本能否在做优化,因为停止mwan3毕竟会导致下载速度变慢,如果脚本没10分钟执行一次的话,感觉会很不爽,所以能不能把最前面的写成如下:
if [ "$nonceIP" == "$usedIP" ]; then
echo $nonceIP > /tmp/nonceIP.txt
else /usr/sbin/mwan3 stop
fi

但是最后是/usr/sbin/mwan3 start要怎么写,我想这个也是要暂停mwan3的吧。
jun9100
2014-09-04 11:18:13 +08:00
@mind3x
大大,这是啥意思?
sh: enabled: unknown operand
mind3x
2014-09-04 11:58:44 +08:00
@jun9100 "sh"这个命令说,"enabled"这个操作数未知。检查你的脚本。
mind3x
2014-09-04 12:00:37 +08:00
@jun9100 有很多种办法。最简单的一种是不stop mwan3,先curl个10次,取回来的IP如果次次都和以前存的不一样,再确实的stop mwan3去取确定的wan2 IP。
mind3x
2014-09-04 12:02:17 +08:00
@jun9100 另外其实没必要10分钟检查,可以在系统通知wan2 down了又重新up的时候再去检查,不过这个三两句话说不清楚,你有兴趣的话可以自行研究...
jun9100
2014-09-04 12:28:42 +08:00
@mind3x 是不是可以把ddns的脚本放到/etc/ppp/ip-down.d下面,我看这个帖子说只要拨号掉线就会执行/ip-down.d下面的脚本的。
求证。http://www.openwrt.org.cn/bbs/thread-1947-1-1.html
mind3x
2014-09-04 12:42:12 +08:00
@jun9100 放到 /etc/ppp/ip-up.d/ 里。你是需要在wan连接成功后检查,不是在wan连接断掉后检查。 官方文档在

http://wiki.openwrt.org/doc/howto/vpn.client.pptp#etcpppip-up.and.etcpppip-down
mind3x
2014-09-04 12:43:10 +08:00
@jun9100 不过你真的是文科生吗?你的钻研精神超过我见到的理科生平均水平很多啊。
jun9100
2014-09-04 12:48:49 +08:00
@mind3x 真的是文科生,专业是汉语言文学
jun9100
2014-09-04 12:49:15 +08:00
@mind3x 刚才是理解错误了 不好意思哈,脑子不好使
mind3x
2014-09-04 13:07:28 +08:00
@jun9100 要不要考虑转行算了啊哈哈哈哈
jun9100
2014-09-04 13:21:58 +08:00
@mind3x 真的非常感谢,已经搞定啦。
我现在在做电商哈。哈哈。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/131478

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX