新人,第一次写优快云,写的不好请私聊,别打我。
<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_token | NGROK的TOKEN码,在官网查询 |
| conn_type | NGROK映射的类型,可以选择TCP、HTTP等,具体参考NGROK官网。例如你可以选择TCP来访问ssh端口22。 |
| conn_port | NGROK映射的端口。 |
| region | NGROK地区,可选择日本(jp)、亚洲(ap)、美国(us)、欧洲(eu)、澳大利亚(au) |
| imap->host | IMAP的主机地址。 |
| imap->port | IMAP的端口,目前只支持SSL的端口 |
| imap->username | IMAP用户名,一般与邮箱同名 |
| imap->password | IMAP密码,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端口。
本文介绍了一个Python脚本,通过电子邮件获取动态生成的NGROKURL,解决内网穿透时固定域名和端口的问题,适用于没有公网IP的环境。脚本部署在Gitee和GitHub上,并提供了详细的环境配置和使用指南。
1541

被折叠的 条评论
为什么被折叠?



