树莓派3开机自动注册IP

 

如果要通过SSH2连接到树莓派,那么首先要获取到IP地址,如果没有连接显示器,把树莓派接入另一个网络时,如果不能登录到路由器去查看IP,那么要获取IP地址是比较麻烦的。

1.方案

  在局域网内,实现树莓派开机自动寻找注册服务器,并把IP信息注册到服务器上。树莓派和服务器在同一个网段内,树莓派在开机时,启动注册程序,根据自己的IP段,尝试访问服务器地址,如果成功,则IP会注册到服务器上。

2.服务器端程序

   采用spring boot便于直接运行服务器。

   源码:https://github.com/gjq246/RaspBerryIP/tree/master

   通过maven install打包成jar

     运行: java -jar RaspBerryIp.jar

     树莓派3开机自动注册IP

     浏览器输入http://127.0.0.1:8008/

     树莓派3开机自动注册IP

 

3.树莓派端程序

    reg.py:

   

# -*- coding: UTF-8 -*-
import socket
import urllib,urllib2
import os
import threading
import time

def get_host_ip():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()
    return ip

#获取主机名
myname = socket.getfqdn(socket.gethostname())
print myname
#获取IP
ip=get_host_ip()
print ip
iparr=ip.split('.')
print iparr[0]+'.'+iparr[1]+'.'+iparr[2]+'.'

#构造参数
textmod ={'DeviceName':myname}
textmod = urllib.urlencode(textmod)

def ddos(u):
        try:
          req = urllib2.urlopen(u).read()  
          print req   
          print str(threading.activeCount()) + ' :'+str(req.code)+' :' + time.ctime()
        except:
          err='error:'+str(threading.activeCount())
          #print 'error:'+str(threading.activeCount())
#多线程运行
for i in range(2,255):
        url='http://'+iparr[0]+'.'+iparr[1]+'.'+iparr[2]+'.'+str(i)+':8008/reg.action?'+textmod
        print url
        t=threading.Thread(target=ddos,args=(url,))
        t.start()
        time.sleep(0.05)

 

 

把上面的程序加入开机自启动。

 

 

在服务器上即可看到:

树莓派3开机自动注册IP