定时动态获取公网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,如需转载请自行联系原作者
目录
相关文章
|
13天前
|
阿里云linux服务器使用脚本通过安全组屏蔽异常海外访问ip
公网网站可能会遭受黑客攻击导致访问异常,使用此脚本可以屏蔽掉异常IP 恢复访问。也可自行设置定时任务定期检测屏蔽。
112 28
|
4天前
|
无需云服务器、无需公网IP,轻松实现门禁系统远程接入与数据同步
智慧园区门禁管理中,贝锐花生壳提供高效解决方案。通过内网穿透技术,无需公网IP即可集中管理多区域门禁系统,保障数据安全传输。采用RSA与AES混合加密,支持权限精细化控制及多维度监控,简单三步实现远程访问,助力园区智慧安全管理升级。
39 7
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
随着 MCP 的快速普及和广泛应用,MCP 服务器也层出不穷。大多数开发者使用的 MCP 服务器开发库是官方提供的 typescript-sdk,而作为 Go 开发者,我们也可以借助优秀的第三方库去开发 MCP 服务器,例如 ThinkInAIXYZ/go-mcp。 本文将详细介绍如何在 Go 语言中使用 go-mcp 库来开发一个查询 IP 信息的 MCP 服务器。
42 0
YashanDB更换服务器IP
本文来自YashanDB官网,主要介绍当单机部署的数据库集群中服务器IP发生变更时,管理员如何使用`yasboot ipchange`命令完成数据库层面的IP更换操作。以一主两备环境为例,详细描述了更换`yasom`、`yasagent`和`yasdb` IP的具体步骤,包括操作顺序、命令示例以及验证方法,确保数据库服务恢复正常运行。操作需按顺序执行,并满足YashanDB的部署要求。
在Linux中,如何实现,每星期天早8点服务器定时重启?
在Linux中,如何实现,每星期天早8点服务器定时重启?
Quartz.Net整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案
解决Quartz.NET在.NET Core 3.1应用中部署到IIS服务器上不被调度的问题,通常需要综合考虑应用配置、IIS设置、日志分析等多个方面。采用上述策略,结合细致的测试和监控,可以有效地提高定时任务的稳定性和可靠性。在实施任何更改后,务必进行充分的测试,以验证问题是否得到解决,并监控生产环境的表现,确保长期稳定性。
339 1
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
97 1
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
369 1
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
189 0
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器

热门文章

最新文章

下一篇
oss创建bucket
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等