如果要通过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
浏览器输入http://127.0.0.1:8008/:
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)
把上面的程序加入开机自启动。
在服务器上即可看到: