内网穿透怎么用?cpolar+ngrok完美白嫖

(注:下文所提到资源,下载上方压缩包解压后即可使用,若需要积分,请在以下链接中提取)
夸克网盘分享夸克网盘是夸克推出的一款云服务产品,功能包括云存储、高清看剧、文件在线解压、PDF一键转换等。通过夸克网盘可随时随地管理和使用照片、文档、手机资料,目前支持Android、iOS、PC、iPad。icon-default.png?t=N7T8https://pan.quark.cn/s/db659033f55d提取码:wi9v

目录

背景简介(可以跳过)

解决方案

具体操作

Part 1:cpolar配置

Part 2:ngrok配置

Part 3:Python代码


背景简介(可以跳过)

想着用Python仿写一个微信,于是Python的socket只能局域网内通信就成了个必须解决的问题。尝试过很多方法,一开始去了解cpolar,但免费级别账号开通的隧道的公网IP地址是随机的(头疼o(╥﹏╥)o),暂时放弃。

后来又尝试用bilibili的个人空间公告和CSDN发文,效果不理想:bilibili的csrf(登录时获取到的cookie)会定时作废,CSDN登录会弹出通知窗口selenium没法关(调了很久没调出来放弃)。

解决方案

直到了解到ngrok,登录完成后惊奇发现它自带一个免费的内网http转公网https隧道,且https地址固定!相信有小伙伴能猜到我们要干什么了,但别急,直接用是不行滴,毕竟人家socket是tcp。不过这可难不倒我们。

1.首先呢,用Python第三方库Flask(或者你爱用Django也行,这边展示Flask)写一个网页,运行在localhost上(即http),用ngrok的免费公网https网址映射一下。

2.然后呢,对cpolar的本地http的UI界面(localhost:9200)进行抓包,可以找到所有active tunnels(正在运行的隧道)的信息是通过http://localhost:9200/api/v1/tunnels网址传输的,也就是说requests.get()搞它。

3.可是还没好,这个cpolar的UI界面是要先登录的。本来用selenium,但会拖慢运行速度(贼慢,不用试了)。只好继续抓包,找到登录信息通过http://localhost:9200/api/v1/user/login提交,于是用json.dumps()对用户密码封装后用requests.post()提交,这时候会获取一些东西,用json.loads()拆开后有一个token。把这个token进行简单的格式化后装入headers,在用上面第三步的方法就能获取到实时的隧道公网IP地址。

4.最后,在第一步的网站中添加上这个IP地址(能让别人用requests.get()获取到)。在客户端Python代码加一个爬取IP地址的函数再用socket即可。

具体操作

Part 1:cpolar配置

访问以下网址进入cpolar官网: https://www.cpolar.com

注册一个账号,下载合适你平台的版本,这里放一个Windows平台的安装包(文章顶部),一路next安装即可。

此时在浏览器输入localhost:9200可以看到如下界面:

此处使用刚刚注册的账号进行登录,登陆成功后点击“隧道管理”,再点击“创建隧道”,进入隧道创建界面。

这里根据你的需要进行参数调整,如Python的socket为tcp就选tcp,Python的Flask为http就选http,根据自己的服务器、socket绑定IP等决定端口。随后点击“创建”。创建好的隧道可在“隧道列表”里查看,active表示正在运行。

可在“在线隧道列表”里查看各个在线隧道的状态,包括公网IP地址。

这时候我们可以把cpolar打包成服务,让其开机自启动。首先在C:/Windows/System32文件夹中找到cmd,右键点击,选择“以管理员身份运行”,输入cpolar service install并按回车来安装cpolar服务(若显示Access Denied,则检查是否是用管理员身份运行)。

Part 2:ngrok配置

访问以下网址进入ngrok官网:https://ngrok.com

鼠标移动到“Get ngrok”上,在弹出的菜单中点击Download,选择合适你系统的版本下载。这里提供Win10/11 amd64系统ngrok程序(见文章顶部)。下载完成后,把下载的zip文件解压得到exe程序(如果你用文章顶部资源就不用这一步了),把exe程序放在一个你找得到的地方,此时点击文件资源管理器(即文件夹的窗口)的地址栏,把当前路径复制下来。按Win徽标键+R打开“运行”窗口,输入SystemPropertiesAdvanced按回车,在弹出的窗口中点击“环境变量”,出现如下界面:

选中在用户变量一栏选中Path(如没有则新建),添加一个值(即你刚才复制的放置ngrok.exe文件的路径),一直点确定即可。

回到ngrok.com(即上文的那个网址),点击“Sign up for free”或“Sign up”进行注册,注册完成后进行登录。

点击“Getting Started”中的“Your Authtoken”(若未显示点击那个眼睛图标会显示你的authtoken),待会要用。

点击“Cloud Edge”中的“Domains”,表格中Domain那一栏即为免费公网https地址(格式:xxx-xxx-xxx.ngrok-free.app),待会要用。

在文件资源管理器(双击“计算机”或“此电脑”,就是平常打开文件夹的那个东西)的地址栏中输入%APPDATA%,回车,会进入...(省略)/AppData/Roaming这个文件夹,点击地址栏中“AppData”退回到AppData文件夹,双击“Local”文件夹,再双击“ngrok”文件夹,这时候应该会有一个ngrok.yml文件,右键单击,选择“在记事本中编辑”。这时会弹出一个编辑窗口,将里面的内容清空后按照以下格式输入你的信息:

version: "2"
authtoken: xxxxxxxx (你的authtoken)
tunnels:
  xxx: (你隧道的名称,随便)
    domain: xxx-xxx-xxx.ngrok-free.app (你的domain)
    proto: http (你隧道的协议)
    addr: 9999  (连接到你本地的哪个端口)

保存并关闭即可。

接下来是安装ngrok服务,首先在C:/Windows/System32文件夹中找到cmd,右键点击,选择“以管理员身份运行”,输入ngrok service install并按回车来安装ngrok服务(若显示ngrok不是内部或外部命令也不是可运行的程序,则检查上文配置环境变量的步骤是否有纰漏;若显示Access Denied,则检查是否是用管理员身份运行)。

Part 3:Python代码

首先你需要写一个用于提供你cpolar隧道的实时公网IP地址的程序。按照以下步骤建立文件夹:

先在一个你找得到的地方建立一个文件夹,命名随便,我这边用的是web。

然后再你建立的文件夹里再建立一个templates文件夹,必须叫这个名字。

把web.html(见本文最上方)下载后复制到templates文件夹中(若下载需要积分,则复制下面这段代码,新建一个文本文档,粘贴进去,选另存为,文件类型改成“所有文件”,文件名填入web.html,保存在上文所建的templates文件夹中):

<html>
    <head>
        <meta charset="utf-8">
        <style>
            body
            {
                width: 100%;
                height: 100%;
            }
        </style>
    </head>
    <body>
        <div style="position: absolute;left: 0;top: 0;width: 100%;height: 100%;background-color: black;color: white;display: flex;justify-content: center;align-items: center;"><h1>Loading...</h1></div>
        <a id="ip">{{ip}}</a>
    </body>
</html>

返回你一开始建的文件夹(我这边是web),下载pyweb.py(见本文最上方)粘贴进去(若下载需要积分,则复制以下代码):

from flask import Flask,render_template
import requests
import json
app=Flask(__name__)
@app.route('/')
def index():
    headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'}
    auth=requests.post('http://localhost:9200/api/v1/user/login',json.dumps({'email':'youremail','password':'yourpassword'}),headers=headers) #此处的youreamil和yourpassword记得替换成你注册时用的邮箱和密码
    auth=json.loads(auth.text)
    auth=auth['data']['token']
    headers['authorization']='Bearer '+auth
    ret=requests.get('http://localhost:9200/api/v1/tunnels',headers=headers)
    ret=json.loads(ret.text)
    tunnels={}
    for dic in ret['data']['items']:
        tunnels[dic['name']]=dic['public_url']
    return render_template('web.html',ip=tunnels['yourtunnelname']) #此处的yourtunnelname记得替换成你要使用的隧道的名称
app.run(port=9999) #此处端口可根据你的需求替换,与上文所提到的ngrok.yml文件中隧道的端口号一致即可

以上均完成后,运行pyweb.py,则其他人可通过一下Python代码获取你隧道的公网IP地址:

def ADDR():
    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36','cookie':'abuse_interstitial=xxx-xxx-xxx.ngrok-free.app'} #此处的xxx-xxx-xxx.ngrok-free.app记得替换为你的ngrok的domain
    ret=requests.get('https://xxx-xxx-xxx.ngrok-free.app/',headers=headers) #此处同上
    ret=BeautifulSoup(ret.text,'html.parser')
    a=ret.find('a',{'id':'ip'})
    return a.text

终于写完了,呼~

觉得本文有用的小伙伴请务必点赞收藏关注,谢谢你们的支持!

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值