定时动态获取公网ip并传送至ftps服务器

简介:

一、需求分析

由于之前家里上网是拔号上网,获取是公网ip,绑定花生壳动态域名(账号),再通过端口映射即可轻松在任何有网络的地方远程连接到家里电脑H,最近花生壳要求实名认证了,我去,这么烦人,想想原理,和已有的资源,自己动手用python写了一个;

思路:

通过在要映射访问的电脑H(home)上用python动态获取出口公网ip,定时10分钟获取并上传到远程ftps(ftp + ssl)服务器上,想要连接H的时候,到服务器上获取公网ip(可以通过脚本自动拉取,也可以需要连接的时候上去看),再远程连接H电脑。


二、获取公网ip并自动上传脚本

1、脚本getip.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
#coding:utf-8
import  urllib,urllib2
from ftplib  import  FTP_TLS
import  os
import  re
import  sys
 
def getIP():
     url =  "http://httpbin.org/ip"
     header = {
         "User-Agent" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
     }
     req = urllib2.Request(url=url, data=None, headers=header)
     response = urllib2.urlopen(req)
     html = urllib2.urlopen(req)
     content = html. read ()
     myip = re.search( '\d+\.\d+\.\d+\.\d+' ,content).group(0)
     return  myip
 
def GETIP(event):
     myip = getIP()
     if  myip:
         content.SetValue( "本机公网ip: %s"  % myip)
     else :
         content.SetValue( "error" )
 
 
if  __name__ ==  "__main__" :
     myip = getIP()
     filename= "%s.txt"  %myip
     os.chdir( "d:\\" )
     if  os.path.isfile(filename):  #如果公网ip自上次没有 改变直接退出不执行
         sys. exit (5)
     else :
         ip_txt= open (filename, 'w' )
         ip_txt.write(myip +  '\n' )
         ip_txt.close()
         ftp  = FTP_TLS()
          ##此处填写你的ftp用户名和连接端口
         ftp .connect( "Your ip or domain" ,port)
         ftp .login( 'ftpuser' , ftpuser')           ##ftp用户名及密码
         ftp .prot_p()
         ftp .cwd( "ip" )
     
      #download
#    ftp.download("1.txt","1.txt")
#    ftp.retrlines("LIST")
#    fnames = () 
#    upload_file=unicode('/root/ip.txt', "utf8")
 
         upload_file=unicode(filename,  "utf8" )   #windows 上传到ftp
         f =  open (upload_file,  'rb' )
         ftp .storbinary( 'STOR %s'  % os.path. basename (upload_file),f)
         f.close()
         ftp .quit

2、添加计划任务

在H电脑的 控制面板中--计划任务中添加类似如下计划任务如图:

wKiom1ncxGGzM10uAAEgWKmqIPM028.png

注意:我的H电脑是xp,其他的windows系统计划任务类似,Linux也支持,但需要注意脚本中的文件路径修改。


三、带gui的获取ip和上传

1、在之前的代码基础上添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    app = wx.App()
     frame = wx.Frame(None, title= "获取本机出口公网ip" , size=(300, 180))
     panel = wx.Panel(frame)
     sBox = wx.BoxSizer() 
     vBox = wx.BoxSizer(wx.VERTICAL) 
     content = wx.TextCtrl(panel,style=wx.TE_MULTILINE |wx.TE_CENTER)
     btn1 = wx.Button(panel, label= "获取" )
    
     sBox.Add(btn1, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
     vBox.Add(sBox, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
     vBox.Add(content, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
     btn1.Bind(wx.EVT_BUTTON, GETIP)
     
     panel.SetSizer(vBox)
     frame.Show()
     app.MainLoop()

2、运行效果如图:

wKioL1ncVrXxKc5lAAAhrPWSLQA375.png

3、ftps服务器上获取的ip文件

ftps是linux 系统 vsftpd的环境(关于ftp及ftps的搭建见ftp系列 http://dyc2005.blog.51cto.com/270872/1940990

#pwd
/data1/project/ip
# ls -alh
总用量 16K
drwxr-xr-x 2 ftpuser nagioscacti 4.0K 9月  30 07:17 .
drwxrwxr-x 5 ftpuser nagioscacti 4.0K 9月  28 18:24 ..
-rw-r--r-- 1 ftpuser nagioscacti   17 10月 10 13:17 116.226.185.150.txt
-rw-r--r-- 1 ftpuser nagioscacti   17 10月 10 13:22 180.168.251.164.txt
# cat 180.168.251.164.txt 
180.168.251.164


服务器上已经获取了我H电脑所在网络的公网ip,要想在其他地方知道公网ip并连接上H电脑,只要访问ftps服务器获取公网ip就可以了。











本文转自 dyc2005 51CTO博客,原文链接:http://blog.51cto.com/dyc2005/1971138,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
网络协议 网络架构 Windows
【Windows】MCSM面板搭建Mycraft服务器,实现公网远程联机
【Windows】MCSM面板搭建Mycraft服务器,实现公网远程联机
111 0
|
2月前
|
安全 Linux 网络安全
【Windows】搭建Emby媒体库服务器,实现无公网IP远程访问
【Windows】搭建Emby媒体库服务器,实现无公网IP远程访问
220 0
|
4天前
|
网络协议 安全 Linux
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
IDEA通过内网穿透实现固定公网地址远程SSH连接本地Linux服务器
|
1月前
|
网络协议 安全 网络架构
无需公网IP联机Minecraft,我的世界服务器本地搭建教程
无需公网IP联机Minecraft,我的世界服务器本地搭建教程
|
1月前
|
网络协议 Ubuntu Linux
如何在Linux环境搭建本地SVN服务器并结合cpolar实现公网访问
如何在Linux环境搭建本地SVN服务器并结合cpolar实现公网访问
|
1月前
|
Java Python
如何设置代理ip服务器地址
如何设置代理ip服务器地址
55 0
|
1月前
|
Linux 网络安全 文件存储
如何本地部署Jellyfin影音服务器并实现在公网访问
如何本地部署Jellyfin影音服务器并实现在公网访问
|
1月前
|
Ubuntu 网络协议 Java
在Android平板上使用code-server公网远程Ubuntu服务器编程
在Android平板上使用code-server公网远程Ubuntu服务器编程
|
1月前
|
网络协议 Linux 数据安全/隐私保护
本地电脑搭建SFTP服务器,并实现公网访问
本地电脑搭建SFTP服务器,并实现公网访问
|
1月前
|
安全 关系型数据库 MySQL
利用windows服务器自带的IIS搭建网站并发布公网访问【内网穿透】
利用windows服务器自带的IIS搭建网站并发布公网访问【内网穿透】
266 0
利用windows服务器自带的IIS搭建网站并发布公网访问【内网穿透】