定时动态获取公网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,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
安全 Linux 调度
在Linux中,如何实现,每星期天早8点服务器定时重启?
在Linux中,如何实现,每星期天早8点服务器定时重启?
|
2月前
|
监控 网络安全 调度
Quartz.Net整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案
解决Quartz.NET在.NET Core 3.1应用中部署到IIS服务器上不被调度的问题,通常需要综合考虑应用配置、IIS设置、日志分析等多个方面。采用上述策略,结合细致的测试和监控,可以有效地提高定时任务的稳定性和可靠性。在实施任何更改后,务必进行充分的测试,以验证问题是否得到解决,并监控生产环境的表现,确保长期稳定性。
75 1
|
2月前
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
43 1
|
3月前
|
人工智能 网络协议 Shell
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
83 1
|
3月前
|
人工智能 网络协议 Shell
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
72 0
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
|
2月前
|
域名解析 弹性计算 安全
无法ping通ECS服务器公网IP的排查方法
无法ping通ECS服务器公网IP的排查方法
|
4月前
|
网络协议 网络安全 网络架构
移动宽带不借助软件和公网服务器实现基于IPV6的内网穿透
本教程指导如何设置路由器以支持IPv6访问:首先确保上网方式为自动获取IP,接着在路由器设置中开启IPv6功能,并关闭可能阻碍连接的防火墙。最后,在光猫管理界面同样关闭防火墙以确保无障碍的IPv6访问路径。操作时请注意网络安全。
移动宽带不借助软件和公网服务器实现基于IPV6的内网穿透
|
5月前
|
弹性计算 运维 数据安全/隐私保护
云服务器 ECS产品使用问题之如何更改服务器的IP地址或端口号
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
5月前
|
存储 弹性计算 Linux
云服务器 ECS产品使用问题之如何实现计划任务定时备份和重启
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
5月前
|
XML 存储 网络协议
/etc/netplan/network-manager-all.yaml 配置服务器ip
/etc/netplan/network-manager-all.yaml 配置服务器ip
188 0