美文网首页思科DevNet专业累积
动态获取家中服务器的外网ip地址

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

作者: 悟器大叔 | 来源:发表于2018-09-21 16:20 被阅读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到服务器上了。不知道家里服务器地址的时候上平台调查下就好了。当然你也可以自己写个脚本订阅消息。

    相关文章

      网友评论

        本文标题:动态获取家中服务器的外网ip地址

        本文链接:https://www.haomeiwen.com/subject/ekfznftx.html