cpolar:通过脚本自动更新主机名称和端口号进行内网穿透【免费版】

cpolar 的免费版经常会重新分配 HostName 和 Port,总是手动修改太过麻烦,分享一下自动更新配置文件并进行内网穿透的方法。

文章目录

  • 配置 ssh config
  • 编写脚本
  • 获取 csrf_token
    • 打开登陆界面
    • Safari
    • Chrome
  • 设置别名

假设你已经配置好了服务器端的 cpolar。

配置 ssh config

该部分原文:SSH 远程登录服务器跑实验(含内网穿透)

现在配置一下主机的 ssh 文件。

vim ~/.ssh/config

config 参数:

  • Host: 别名,可以直接用于 ssh 登录
  • Hostname: IP 地址
  • Port: SSH 端口号(如果做了内网穿透,则需要填写对应的端口号)
    • 比如:下图对应的是 10387
      image
  • User: 登录的用户名
  • PreferredAuthentications: 指定客户端的认证方法为公钥
  • IdentityFile: 当前指的是私钥路径

P.S: 具体的参数信息可以通过 man ssh_config 查看

下面是配置文件样例(以 Ubuntu 为例):

Host Ubuntu-Nat-DDNS					# 你可以改成你想要的名字HostName 3.tcp.vip.cpolar.cn		# 填写公网ipPort 10387							# 公网 ip 对应的 端口号User xx								# 远程主机的登录名PreferredAuthentications publickeyIdentityFile ~/.ssh/id_rsa_ubuntu	# 改成对应的私钥路径或者将其重命名

现在可以通过 ssh Ubuntu-Nat-DDNS 直接登陆。

但 cpolar 的免费版经常会重新分配 HostName 和 Port,所以需要配置一个自动更新的脚本。

编写脚本

vim ~/scripts/update_ssh_cfg.sh

以下是 Python 脚本代码:

#!/usr/bin/env pythonimport requests
from bs4 import BeautifulSoup
import re# 登录函数
def login(login_url, username, password, csrf_token):session = requests.Session()payload = {'login': username,'password': password,'csrf_token': csrf_token}response = session.post(login_url, data=payload)if response.status_code == 200:return sessionelse:raise Exception('登录失败')# 获取目标字符串函数
def get_target_string(session, url):response = session.get(url)soup = BeautifulSoup(response.text, 'html.parser')target_element = soup.find('a', href="#ZgotmplZ")if target_element:return target_element.textelse:raise Exception('隧道可能未激活')# 提取 HostName 和 Port 函数
def extract_hostname_and_port(target_string):pattern = r'tcp://(.*?):(\d+)'matches = re.match(pattern, target_string)if matches:hostname = matches.group(1)port = matches.group(2)return hostname, portelse:raise Exception('未找到匹配的字符串')# 更新配置文件函数
def update_config_file(filename, hostname, port):with open(filename, "r") as file:content = file.readlines()is_modified = Falsefor i, line in enumerate(content):if line.strip() == "Host Ubuntu-NAT-DDNS": # 如果使用的是其他别名,在这里修改hostname_line = content[i + 1].strip()if hostname_line.startswith("HostName") and hostname_line.split(" ")[-1] != hostname:content[i + 1] = f"    HostName {hostname}\n"is_modified = Trueport_line = content[i + 2].strip()if port_line.startswith("Port") and port_line.split(" ")[-1] != port:content[i + 2] = f"    Port {port}\n"is_modified = Trueif not is_modified:print("HostName 和 Port 未发生变化,无需更新。")else:with open(filename, "w") as file:file.writelines(content)print("已更新配置。")# 主程序
def main():# 配置项username = ''password = ''csrf_token = ''login_url = 'https://dashboard.cpolar.com/login'content_url = 'https://dashboard.cpolar.com/status'config_filename = "/Users/home/.ssh/config"try:# 登录session = login(login_url, username, password, csrf_token)# 获取目标字符串target_string = get_target_string(session, content_url)print(target_string)# 提取 HostName 和 Porthostname, port = extract_hostname_and_port(target_string)print("HostName:", hostname)print("Port:", port)# 更新配置文件update_config_file(config_filename, hostname, port)except Exception as e:print("发生错误:", str(e))# 运行主程序
if __name__ == "__main__":main()

为脚本添加执行权限:

chmod +x ~/scripts/update_ssh_cfg.sh

如果你不是使用 Ubuntu-NAT-DDNS 作为别名,则修改下方标注出的代码:

修改别名

另外,你需要填充上面的 usernamepasswordcsrf_token,其中 csrf_token 可以通过下面的方式获取。

获取 csrf_token

打开登陆界面

访问 https://dashboard.cpolar.com/login

login

Safari

点击开发->显示网页检查器 或者使用 option + command + L 打开网页检查器

网页检查器

输入账号密码进行登录,点击get-started -> 标头 -> 请求数据

请求数据

然后你就可以看到三个我们所需要的字段,将其填充回代码部分。
获取字段

Chrome

使用 F12 打开开发者工具,进入 Network,点击 login -> Payload 查看字段。
Chrome

通过以上步骤获取 usernamepasswordcsrf_token 后,填入代码并使用esc + :wq保存脚本。

设置别名

现在,我们可以使用 update_ssh_cfg && ssh Ubuntu-NAT-DDNS 自动完成内网穿透。

为了方便,我们可以为这段代码设置别名。首先,打开 .bashrc 或 .zshrc 文件(取决于你使用的 shell):

vim ~/.bashrc  # 或者 vim ~/.zshrc

在文件末尾添加以下别名配置:

alias update_ssh_cfg='~/scripts/update_ssh_cfg.sh'
alias SSH_UBUNTU='update_ssh_cfg && ssh Ubuntu-NAT-DDNS'

保存并关闭文件后,运行以下命令使修改生效:

source ~/.bashrc  # 或者 source ~/.zshrc

现在,可以使用 SSH_UBUNTU 自动更新 HostName 和 Port,并完成内网穿透。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/31225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring AI 调用 openAI 进行语音识别

Spring AI支持语音识别功能,目前仅支持OpenAI的Transcription模型。 项目搭建: 参考 Spring AI 介绍以及与 Spring Boot 项目整合 源码示例: RestController RequestMapping("/openai") public class OpenAiIAudioTranscriptionC…

1964springboot VUE 智慧社区可视化平台系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE社区可视化平台系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码…

Android Studio main,xml 视图代码转换

Android Studio main,xml 视图&&代码转换 其实很简单,但是对我们小白来说还是比较蒙的。 废话不多说,直接上图。 我的Android Studio 是 4.0 版的 我刚打开是这个界面,在我想学习如何用代码来布局,可能大家也会找不见代码的位置。 follow me 是不是感觉很简单呢。…

【usb设备端口异常】——使用ls /dev/video*查看设备号时出现报错:ls:无法访问‘/dev/video*‘: 没有那个文件或目录

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ls:无法访问/dev/video*: 没有那个文件或目录1. 问题描述2. 原因分析3. 解决方法 总结 前言 一、ls:无法访问’/dev/video*: 没有那个文件或目录 使用的这…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 披萨大作战(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

《梦醒蝶飞:释放Excel函数与公式的力量》4.1if函数

第4章:逻辑与条件函数 第一节4.1 if函数 在Excel中,逻辑函数用于处理基于特定条件的真假判断,它们是构建复杂公式和进行高级数据分析的基础。本章将深入探讨逻辑函数的使用方法,特别是IF函数,这是Excel中最为常用的条…

1 UC

1 UC 1、环境变量2、环境变量表3、错误处理4、库文件4.1 静态库4.2 动态库4.3 动态库的动态加载 5、虚拟地址 1、环境变量 什么是环境变量? 每个进程都有一张自己的环境变量表,表中的每个条目都是形如“键值”形式的环境变量。进程可以通过环境变量访问…

计算机毕业设计Python深度学习房价预测 房价可视化 链家爬虫 房源爬虫 房源可视化 卷积神经网络 大数据毕业设计 机器学习 人工智能 AI

基于python一/二手房数据爬虫分析预测系统可视化 商品房数据Flask框架(附源码) 项目介绍python语言、Flask框架、MySQL数据库、Echarts可视化 sklearn机器学习 多元线性回归预测模型、requests爬虫框架 链家一手房 一手房数据商品房数据、分析可视化预测…

前后端分离的后台管理系统源码,快速开发OA、CMS网站后台管理、毕业设计项目

那有没有一款软件解-决这种现状呢?答案是肯定的。引入我们的软件——eladmin。 介绍 ELADMIN,一个简单且易上手的 Spring boot 后台管理框架,已发布 Mybatis-Plus 版本,为开发者提供了一个全-面、高-效的解-决方案。 特点 高-效率:前后端完全分离,项目简单可配,内置代码…

在windows和linux服务器之间互传文件

最近需要在windows上和linux服务器上实现相互传送文件,作为一个linux小白,研究了一个上午,终于成功了,记录一下。 使用的是SFTP方式。 Linux服务器系统是 Ubuntu 18.04 64位,windows 是 win10专业版。 首先在Linux服…

http和https的区别在哪

HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)之间存在几个关键区别主要涉及安全性、端口、成本、加密方式、搜索引擎优化(SEO)、身份验证等方面 1、安全性:HTTP(超文本传输协议…

Web前端项目-页面动态背景【附完整源码】

页面动态背景 一&#xff1a;花瓣背景 页面效果&#xff1a; HTML代码 <!DOCTYPE HTML> <HTML> <TITLE>花瓣漫舞</TITLE> <META NAME"Generator" CONTENT"EditPlus"> <META NAME"Author" CONTENT"&quo…

区块链技术:探索7个物联网应用的潜力

在当今数字化时代&#xff0c;区块链技术逐渐成为一种受到广泛关注的技术创新。本文将以《区块链技术&#xff1a;探索7个物联网应用的潜力》为题&#xff0c;介绍区块链技术在物联网领域的七个应用潜力。物联网作为未来发展的重要方向&#xff0c;结合区块链技术的应用将为我们…

【因果推断python】47_元学习1

目录 S-Learner 简单回顾一下&#xff0c;我们现在感兴趣的是发现治疗效果的异质性&#xff0c;即确定单位对治疗的不同反应。在这个框架中&#xff0c;我们想估计 或 在连续的情况下。换句话说&#xff0c;我们想知道这些单位对治疗的敏感程度。这在我们不能治疗所有人并且需…

Flink 1.19.1 standalone 集群模式部署及配置

flink 1.19起 conf/flink-conf.yaml 更改为新的 conf/config.yaml standalone集群: dev001、dev002、dev003 config.yaml: jobmanager address 统一使用 dev001&#xff0c;bind-port 统一改成 0.0.0.0&#xff0c;taskmanager address 分别更改为dev所在host dev001 config.…

【SD3的Turbo也来了】Jasper AI用Flash Diffusion的蒸馏技术为SD3提速

Flash Diffusion 是一种新颖的图像生成方法&#xff0c;旨在显著提高现有条件扩散模型&#xff08;例如教师模型&#xff09;的速度&#xff0c;而无需牺牲性能。它通过引入以下技术来实现这一点&#xff1a; 蒸馏损失&#xff1a;在教师模型和学生模型之间引入蒸馏损失&#…

React+TS前台项目实战(十三)-- 全局常用响应式加载动画Loading组件封装

文章目录 前言Loading组件1. 功能分析2. 代码详细注释3. 使用方式4. 不同尺寸loading动画效果展示 总结 前言 高阶组件有几大优点&#xff0c;其中一个就是渲染劫持&#xff0c;如懒加载&#xff0c;是否显示该元素loading&#xff0c;这在项目中我们经常用到。毫无疑问&#…

单阶段目标检测--NMS

目录 一、概念: 二、算法过程 三、代码实现 一、概念: 在目标检测的初始结果中&#xff0c;同一个物体&#xff0c;可能对应有多个边界框 &#xff08;bounding box&#xff0c;bb&#xff09;&#xff0c;这些边界框通常相互重叠。如何从中选择一个最合适 的&#xff08;也就…

DATaGrip的安装与使用

在数据库开发的过程中&#xff0c;有一款专业的软件必不可少。相较于navicat&#xff0c;DataGrip功能更为齐全&#xff0c;如SQL语句编辑、数据库连接管理、数据导入和导出、数据库比较和同步等等。DataGrip支持多种数据库&#xff0c;如MySQL、PostgreSQL、Oracle、Microsoft…

Python | Leetcode Python题解之第171题Excel列表序号

题目&#xff1a; 题解&#xff1a; class Solution:def titleToNumber(self, columnTitle: str) -> int:number, multiple 0, 1for i in range(len(columnTitle) - 1, -1, -1):k ord(columnTitle[i]) - ord("A") 1number k * multiplemultiple * 26return n…