即使没有固定地址或端口也能通过互联网获取内网穿透地址的Python脚本

本文介绍了一个Python脚本,通过电子邮件获取动态生成的NGROKURL,解决内网穿透时固定域名和端口的问题,适用于没有公网IP的环境。脚本部署在Gitee和GitHub上,并提供了详细的环境配置和使用指南。

新人,第一次写优快云,写的不好请私聊,别打我。

<0x00>  灵感

  之前有一段时间玩莓派,在上面搭了个NGINX服务器,使用NGROK进行内网穿透,除了最近的NGROK代理服务器在日本、延迟有些高以外效果以外还不错,然而有一个很大的缺陷,那就是NGROK不给免费用户固定的域名和端口号。

  你可能会问,花生壳就可以用免费的内网穿透,为啥用这个?除了花生壳这种大公司做的内网穿透,其他很多草根的内网穿透软件是基于NGROK做的,而且PyNGROK库的API调用起来很方便。(我开始以为最难的部分会在这里)

  所以我做了这个Python脚本,希望通过没有公网IP可以访问的通讯服务把获取到的NGROK公共URL发送出来。本来打算用QQ机器人的,实时性会比较好(也做出来了,有兴趣可以私聊),但是首先现在很难找到稳定可用的免费QQ机器人,官方给的机器人只能在那个用的人本来也不是很多的QQ频道上用,其次这个东西凌晨用不了,API会关闭。然后想到用git,但是感觉用git保密性不大好,而且有杀鸡用牛刀的感觉,为了一条数据专门建一个仓库,感觉是对储存的浪费(虽然不是我付钱)。

  还有其他可以在两头没有公网IP的情况下完成数据交换吗?答案是有的——电子邮件

<0x01>  省流

项目发布在开源平台Gitee上。

看之前请给个星标,谢谢!

看之前请给个星标,谢谢!

看之前请给个星标,谢谢!

如果遇到使用问题,优快云私信或提交issue都行。

脚本仓库

Gitee仓库

Email-NGROK Co-op Script: 实现了开启NGROK并通过电子邮件获取NGROK地址的功能,省去了出门在外忘记了 NGROK 地址的烦恼 (gitee.com)

GitHub仓库

xsh2022/Script_ENC (github.com)

<0x02>  原料(环境配置和准备工作)

环境配置

  操作系统:经测试,Windows和Ubuntu18.04都是可以的,其他Linux系统和Mac-OS未经测试。

  软件环境:Python 3.12,理论上PyNGROK库支持的Python3.x版本都可以。

环境准备

  就需要一个非官方的库,没写requirements.txt,就用pip自行安装就行了。

  用如下指令安装:

python -m pip install pyngrok

其他准备

  注册一个NGROK账号,进入dashboard,点击“Your Authtoken”查看你的Token。后面我用 <ngrok_token> 表示这个Token。

  注册一个可以使用IMAP和SMTP的新邮箱(如果你愿意用自己的邮箱也行),我这使用的是163邮箱。开启IMAP、SMTP功能。注意,如果IMAP、SMTP的授权码不同,请记住授权码,后面就用这个授权码替代密码。我分别用 <imap_username> <imap_password> <smtp_username> <smtp_password> 分别表示IMAP邮箱、IMAP密码(授权码)、SMTP邮箱、SMTP密码(授权码),实际上两种服务的邮箱、密码一般是相同的,以防特殊情况。

  一切准备完毕,如果你不想知道原理,可以跳过0x03阶段,直接到0x04阶段进行部署了!

<0x03>  脚本原理

脚本原理图

  这张图画的很简单,但实际上代码写起来还是有点令人头疼的。主要的难点是用imaplib和smtplib完成邮件的读取和写入。特别是163还需要配置一个叫ID的属性,这是很多人第一次用imaplib和其他imap库要踩的一个坑。

<0x04>  部署

“服务端”部署

  克隆仓库,直接执行main.py

cd path/to/target/dir
git clone https://gitee.com/keyb0ardkn1ght/Script_ENC.git
cd Script_ENC
python main.py

  第一次运行会生成配置文件config.json,编辑config.json文件,都是很简单的参数,怎么填详见仓库的readme.md。修改配置文件后,再次执行。如果参数都没问题,就可以开始执行了。除了开始配置的时候和检查到邮件的时候,不会打印很多log,不用担心程序为什么不动了,因为它在动。当你想退出程序的时候,按一下ctrl+c(如果你用的PyCharm终端,点击一次红色小方块停止程序,两次也行,但是会不优雅地直接退出),Windows会向脚本发送SIGINT信号,脚本执行退出的操作,跳出主循环。在这里还是放出参数表格。

参数说明表

参数说明
ngrok_tokenNGROK的TOKEN码,在官网查询
conn_typeNGROK映射的类型,可以选择TCP、HTTP等,具体参考NGROK官网。例如你可以选择TCP来访问ssh端口22。
conn_portNGROK映射的端口。
regionNGROK地区,可选择日本(jp)、亚洲(ap)、美国(us)、欧洲(eu)、澳大利亚(au)
imap->hostIMAP的主机地址。
imap->portIMAP的端口,目前只支持SSL的端口
imap->usernameIMAP用户名,一般与邮箱同名
imap->passwordIMAP密码,163设置页面中的“授权码”,一般与网页邮箱的登录密码不同
smtp->xxx与imap->xxx类似

“客户端”使用

  向<imap_username>发送邮件,内容不限,标题为“get ngrok”,过几秒到十几秒,服务端会收到邮件,回复NGROK的公共地址(URL)和映射端口(port),例如收到内容如下的邮件:

URL: tcp://0.tcp.jp.ngrok.io:12345

port: 22

  这代表你可以用访问0.tcp.jp.ngrok.io主机的12345端口访问你服务器的22端口。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值