目录
免责声明:
这里使用的是自己的主机搭建的Linux服务器,如果用于生产网络等商用场景,出现问题本文概不负责。
同时在本文写作时,cpolar自身的robots.txt声明如下,并未禁止爬虫。User-agent: * Disallow: Sitemap: https://www.cpolar.com/sitemap.xml
本文简介
家里没有公网ipv4,公网ipv6默认不能直接访问,懒得找电信公司。
本文使用cpolar这个内网穿透工具实现对服务器不用登录官网查地址的访问。
简单来说,就是由于免费的cpolar账户不能固定端口,每次登录服务器都需要查看地址和端口,有些麻烦。
这里用爬虫抓取当前的地址和端口,进行自动化登录。不用再打开网页,每次输入地址和端口,这里只需要输入密码即可。
如果有条件,请支持cpolar其他非免费版本,以获得更好的体验。
实现
cpolar的账号注册、安装这里不再讲述。请查看其他博文或者官网文档。
正常的流程使用cpolar进行登录服务器的流程是:
- 打开cpolar官网;
- 登录账号;
- 查看当前给分配的地址和端口;
- 使用ssh连接服务器。
让程序替代我们去干这4件事,减少麻烦事情。最后登录的时候,还需要干一件事情就是需要输入服务器的密码。
下面的代码需要修改的是如下前3个。请自行pip安装requests
和bs4
。
- 账号,也就是cpolar账号
- 密码,即cpolar密码
- 用户名,服务器上的默认用户名
csrf_token
不知道是不是会变,也不知道是不是都一样,姑且认为是一样的。如果有改变,则需要自己查看网页中的csrf_token
。在登录页面,查看源码并搜索即可。
import requests
import os
import sys
import re
from bs4 import BeautifulSoup
def browser(url):
login_page = 'https://dashboard.cpolar.com/login'
try:
session = requests.Session()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}
params = {
'login': '1. 账号',
'password': '2. 密码',
'csrf_token': '1538662349.68##b5aa35f374452a6198004dab20d88b13583c7c2c'
}
resp = session.post(login_page, params, headers=headers)
resp = session.get(url, headers=headers)
data = resp.content.decode('UTF-8')
return data
except Exception as e:
print(str(e))
def parse_html(html):
ret = []
css_rule = '#dashboard > div > div:nth-child(2) > div.span9 > table > tbody > tr > th > a'
soup = BeautifulSoup(html, features="html.parser")
items = soup.select(css_rule)
for item in items:
pat = 'tcp://(.*?):(\d+)'
rs = re.match(pat, str(item.text))
ret.append({'address': rs[1], 'port': rs[2]})
return ret
def parse_args():
if len(sys.argv) == 1:
name = '3. 服务器用户名'
else:
name = sys.argv[1]
return name
def main():
url = 'https://dashboard.cpolar.com/status'
html = browser(url)
raw_sshs = parse_html(html)
print(raw_sshs)
name = parse_args()
for ssh in raw_sshs:
os.system('ssh %s@%s -p %s' % (name, ssh['address'], ssh['port']))
# exit()
if __name__ == '__main__':
main()
注意
我猜测这里因为cpolar的缘故,应该没法实现自动登录了。所以我删除了一些读取写入ssh config的代码,如果出现问题,请自己debug吧。
标签:name,登录,html,ssh,cpolar,服务器 From: https://www.cnblogs.com/basilguo/p/nat_cpolar.html