Raspi+Python内网穿透1.0

因为穷,我做了一个,完全免费的内网穿透

Posted by Eli0t on 2020-02-17

源自互联网人的开源精神

因为正常的外网地址总是在不断变化的,如果想从外面接入家中设备则需要提前知道外网地址。于是此项目就诞生了!
此项目只适用HUAWEI路由器ws5102或其他相近机型
项目源码1.0不是树莓派的可以使用项目1.0。
项目修改1.1加上了树莓派引脚控制,可随时观察到项目是否正常运行😎。
若访问失败页面底部有源码。

项目展示

项目分析

定义了4个函数,作用分别是spider_wanip()树莓派从路由器爬取外网地址、email_send(ip)树莓派将爬取到的外网地址、judge(ip_deliver)判断外网地址是否变化、hey()调用其他函数的总函数。

项目最后,每半小时执行一次项目。

1
2
3
4
schedule.every(30).minutes.do(hey)
while True :
schedule.run_pending()
time.sleep(1)

项目实施

树莓派接入网线24小时开机。
安装selenium+chrome
安装seleniumpip3 install selenium
安装chromedriversudo apt-get install chromium-chromedriver
按照代码中的注释将代码补充完整。
python3 HUAWEI_1.py
开始你的快乐之旅吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#YBM911---外网ip自动爬取
import requests
from selenium import webdriver #爬取网页
import time #延时代码
import schedule #定时执行
import smtplib #连接邮件服务器
from email.mime.text import MIMEText #邮件发送内容
from email.header import Header #邮件头文件

url = 'http://192.168.1.1' #爬取的路由器管理网页
wifi_password = 'XXXXXXXX' #wifi密码
email_send_name = 'XXXXXXXX' #发送人
email_password = 'XXXXXXXX' #email的smtp授权码
email_to_name = 'XXXXXXXX' #收件人
smtp_server = 'smtp.qq.com' #qqsmtp服务器
ip_YBM911 = '0'
judge_number = '0'
password=''
loginbtn_1=''
btn_2=''
ip_1=''

def spider_wanip() :
try :
global ip_YBM911
global password
global loginbtn_1
global btn_2
global ip_1
print(' run spider_wanip now ! ')
driver = webdriver.Chrome()
driver.get(url)
time.sleep(8)
password = driver.find_element_by_id('userpassword_ctrl').send_keys(wifi_password)
loginbtn_1 = driver.find_element_by_id('loginbtn').click()
time.sleep(8)
print('1')
btn_2 = driver.find_element_by_id('more').click()
time.sleep(4)
wan_ip = driver.find_element_by_id('deviceinfo_view_data_edit_deviceinfo_IPAddress_label_ctrl')
print('2')
ip_1 = wan_ip.text
print('3')
driver.close()
print('4')
print(' last ip is '+ip_YBM911)
'''
if ip_YBM911=='0':
print('5')
ip_YBM911=ip_1
else:
pass
'''
print('***spider_wanip success***')
print('**************************')
print('*wan_ip is '+ip_1+' *')
print('**************************')
return ip_1
except :
print(' spider_wanip fail !!! ')
return '0'


def email_send(ip) :
try :
print(' run email_send now ! ')
msg = MIMEText(ip,'plain','utf-8')
msg['From'] = Header('intelnet_Raspi3B+')
msg['To'] = Header(email_to_name)
msg['Subject'] = Header('wifi_send_ip 1.0') #丰富邮件
server = smtplib.SMTP()
server.connect(host = smtp_server,port = '25') #连接服务器,端口25
server.login(email_send_name,email_password) #登陆
print(' email 登陆成功 ! ')
server.sendmail(email_send_name,email_to_name,msg.as_string())
server.quit()
print('**************************')
print('*** email_send success ***')
print('**************************')
except :
print(' email_send Fail !!! ')

def judge(ip_deliver) :
try:
global ip_YBM911
global judge_number
print(ip_deliver)
if ip_YBM911==ip_deliver:
judge_number='0'
else :
ip_YBM911=ip_deliver
judge_number='1'
except:
print(' error in judge ')

def hey() :
try :
global ip_YBM911
global judge_number
judge(spider_wanip())
print(judge_number)
if judge_number=='1':
email_send(ip_YBM911)
else :
print('situation is same')
pass
except :
print(' error in HEY !!!')


schedule.every(30).minutes.do(hey)
while True :
schedule.run_pending()
time.sleep(1)