思科DevNet专业累积

动态获取家中服务器的外网ip地址

2018-09-21  本文已影响461人  悟器大叔

背景:由于在家搭建了一个深度学习服务器。不在家时也想获取家中服务器的地址,家里的服务器DMZ主机设置与端口转发都完成后。由于ip是动态变化的,所以想实现ip变化之后发送到自己的邮箱中,网上已经有很多解决方案了,但是顺带想学下mtqq协议,这次就没有用网上的解决方案。

MTQQ协议的介绍在这:http://dataguild.org/?p=6817

在网上随便找了下公开的免费brocker
https://github.com/mqtt/mqtt.github.io/wiki/public_brokers
于是看中broker.bevywise.com拥有私密加密连接,于是选择了它。照常的注册登陆之后。
打开界面看到这样的感觉,还不错。

image.png

Step 1 生成一个密码对供发布者使用

image.png

生成钥匙对之后。这里的key跟token就是设备使用的用户名与密码

Step2 进入help界面下载例子

image.png

我家中的服务器是linux的,所以下载了linux版本
vi 进入文件之后修改了这两个地方,填入了刚刚生成的key与token


image.png

Step 3 测试

python MQTTClient.py执行一下

image.png
然后他就自动的隔三秒钟发送了一次心跳连接
image.png
此时网页上Devie界面的状态是active
image.png
当我退出执行的程序之后device就消失不见了,状态变成了停止

Step 4 在家中服务器上获取外部ip并发送至brocker

主要使用了ipgetter这个库,在bash里测试一下

python
import ipgetter
print(ipgetter.myip())

获取到了自己的外网ip,那么接下来就是把这个信息在它变化的时候发送出去


image.png

主要做了以下变更:1。注释了订阅者 2.执行脚本时一定先发送一条消息
3.当循环时ip变化了就发送新的ip到服务器,4.增加sleep的时间

好了,测试一下,服务器上应该会出现当前的ip


image.png

嗯 出现了
之后就是设置在后台无限执行了,先注释掉

#raw_input("********->\tPlease see if your confs are correct and Press Enter to connect\t<-*******")

这一行
然后执行 nohup python /home/femi/MQTTClientLinux/MQTTClient.py &
然后用
ps -ef |grep MQTTClient.py看一看是否执行了

后台执行
看了下确实一直在执行了

Step 5 更进一步,在脚本被停止的时候重新启动。

新建一个脚本 moniter.sh

# ! /bin/sh

basepath=$(cd `dirname $0`; pwd)

while true
do
    procnum=`ps -ef|grep "MQTTClient.py"|grep -v grep|wc -l`
    if [ $procnum -eq 0 ]
    then
        nohup python MQTTClientLinux/MQTTClient.py &
        echo `date +%Y-%m-%d` `date +%H:%M:%S`  "restart MQTTClient.py服务" >>$basepath/shell.log
    fi
    sleep 5
done

然后测试一下执行
sudo chmod +x moniter.sh nohup ./moniter.sh &
然后查询下原来的MQTTClient.py进程

image.png
看到pid是16456,那么kill 16456一下
测试结果
看到变化了。证明脚本运行正常。并在 cat shell.log中看到了一条日志记录

Step 6 设置监控脚本开机自动启动

有很多种方法,我用的修改 vi /etc/rc.local的方法,在文件打开后在exit 0 的前面添加脚本的绝对路径nohup sh /home/femi/moniter.sh & 放到后台运行

Step 7 远程开机

由于自己家里有一部备用安卓手机,给服务器设置好了wake on lan之后找到了一款开机神器app,远程开机棒,进入之后设置一会就可以实现了qq发送消息自动开机。厉害了

Step 补充

现在家中的服务器就一直发送自己的ip到服务器上了。不知道家里服务器地址的时候上平台调查下就好了。当然你也可以自己写个脚本订阅消息。

上一篇下一篇

猜你喜欢

热点阅读