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

本文主要是介绍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,并完成内网穿透。

这篇关于cpolar:通过脚本自动更新主机名称和端口号进行内网穿透【免费版】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079923

相关文章

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

Linux使用scp进行远程目录文件复制的详细步骤和示例

《Linux使用scp进行远程目录文件复制的详细步骤和示例》在Linux系统中,scp(安全复制协议)是一个使用SSH(安全外壳协议)进行文件和目录安全传输的命令,它允许在远程主机之间复制文件和目录,... 目录1. 什么是scp?2. 语法3. 示例示例 1: 复制本地目录到远程主机示例 2: 复制远程主

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

Go语言中使用JWT进行身份验证的几种方式

《Go语言中使用JWT进行身份验证的几种方式》本文主要介绍了Go语言中使用JWT进行身份验证的几种方式,包括dgrijalva/jwt-go、golang-jwt/jwt、lestrrat-go/jw... 目录简介1. github.com/dgrijalva/jwt-go安装:使用示例:解释:2. gi

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

Python对PDF书签进行添加,修改提取和删除操作

《Python对PDF书签进行添加,修改提取和删除操作》PDF书签是PDF文件中的导航工具,通常包含一个标题和一个跳转位置,本教程将详细介绍如何使用Python对PDF文件中的书签进行操作... 目录简介使用工具python 向 PDF 添加书签添加书签添加嵌套书签Python 修改 PDF 书签Pytho