当前位置: 首页 > 后端技术 > Python

服务器实现优雅上网

时间:2023-03-26 01:07:16 Python

学校上网需要身份认证。这种身份认证机制对于经常上网的人来说比较麻烦。为了解决这个问题,这里提供几个可行的方法来避免人工认证,解决上网需要认证身份的痛点。个人使用主机对于个人使用机器,最简单的方法是使用能记住帐户密码的浏览器,例如GoogleChrome。当然,手动点击是不可避免的。个人笔记本,个人建议买newwifi路由器手动刷老猫子Padavan固件,或者省事去闲鱼买预装老猫子路由器。价格在40到50元左右,方便。经济实惠且简单。可通过老猫子路由器自动进行网络认证,连接wifi的电脑无需认证。服务器用来上网的个人机反正是可以上网的,就是省事要不要。我们的文章主要针对机房服务器的上网。当我们通过ssh连接局域网中的服务器时,会遇到服务器无法上网的情况(注意ssh连接主机只是在同一局域网内,服务器无法连接totheInternet意味着不能和外部网络通信,比如百度谷歌等网站),虽然网线插上了,但是烦人的认证机制让我们需要进行认证。我们不能只通过命令行进行认证。除非我们使用特殊手段调出可视化浏览器界面,否则只能去机房人工认证,然后返回实验室使用服务器。编写脚本实现上网每次认证都是通过浏览器访问192.168.6.1接口,填写上网的账号密码,点击提交按钮即可上网。所以主要思路是用代码来实现这个过程,省去了所有的手工工作。本文环境是在ubuntu系统下编写pyhon代码,浏览器为firebox。其实不管是windows还是ubuntu系统,只是细节上有些差异。有两种方法可以模拟提交过程。第一个是在提交的时候抓取数据包,分析数据包,然后模拟请求实现这个过程。但是过程中参数较多,大量提交需要猜测,需要一点功夫。参数的含义。第二种是使用python的selenium模块。我们通过这个模块来控制浏览器的行为。填写完表格,点击提交按钮后,就可以模拟整个过程了。脚本环境python解析器需要3.0以上版本,使用pipinstallselenium==4.0.0安装模块然后只需要firebox浏览器和浏览器版本对应的WebDriver驱动,这里的代码是使用火狐浏览器,和谷歌浏览器一样可以用,只是代码需要稍微修改一下。驱动需要对应浏览器版本,否则可能会出现各种错误。chrome的webdriver下载地址firebox的webdriver下载地址将下载的文件移动到linux下的/user/bin下并赋予执行权限mvchromedriver/usr/bin/chmod+x/usr/bin/chromedriver代码编写我们将账号密码和代码分开,创建一个user.txt文件,里面存放你的账号密码,使用,分开。admin和password账户密码放在单独的文件中,方便我们修改,然后用python代码读取账户密码withopen('./user.txt')asf:line=f.readline()ifline:mess=re.split(',|,',line)account,password=mess[0],mess[1]读取账号密码后,我们需要用selenium驱动我们的浏览器打开192.168.6.1,这里我们设置了一个基本的堆设置,需要注意的是在设置日志路径的时候,不同版本的selenium会有不同的写入问题,建议每个路径都写成绝对路径。options=webdriver.FirefoxOptions()options.add_argument("--no-sandbox")options.add_argument("--headless")#设置浏览器headless属性,执行代码不会打开浏览器options.add_argument("--disable-gpu")tmp_service=Service(log_path="/home/geckodriver.log",executable_path='geckodriver')driver=webdriver.Firefox(options=options,service=tmp_service)driver.get('http://192.168.6.1')打开界面后,我们使用xpath定位元素找到用户名密码元素位置并填写账号密码,然后定位提交按钮模拟点击。使用try异常情况抛出异常try:driver.find_element(By.XPATH,'//form[@name="f1"]/input[@name="DDDDD"]').send_keys(mess[0])driver.find_element(By.XPATH,'//form[@name="f1"]/input[@name="upass"]').send_keys(mess[1])driver.find_element(By.XPATH,'//form[@name="f1"]/input[@type="submit"]').click()time.sleep(0.2)print('您登录成功!!!--东湖大白鹅')exceptExceptionase:print(e)print('设备在线!!!--东湖大白鹅')driver.quit()完整代码如下:fromseleniumimportwebdriverfromselenium.webdriver.common。byimportByimporttimefromselenium.webdriver.common.action_chainsimportActionChainsimportrefromselenium.webdriver.firefox.serviceimportServicewithopen('./user.txt')asf:#请使用绝对路径line=f.readline()ifline:混乱=重新。split(',|,',line)options=webdriver.FirefoxOptions()options.add_argument("--no-sandbox")options.add_argument("--headless")options.add_argument("--disable-gpu")tmp_service=Service(log_path="/home/geckodriver.log",executable_path='geckodriver')#请使用绝对路径driver=webdriver.Firefox(options=options,service=tmp_service)driver.get('http://192.168.6.1')try:driver.find_element(By.XPATH,'//form[@name="f1"]/input[@name="DDDDD"]').send_keys(mess[0])driver.find_element(By.XPATH,'//form[@name="f1"]/input[@name="upass"]').send_keys(mess[1])驱动程序.find_element(By.XPATH,'//form[@name="f1"]/input[@type="submit"]').click()time.sleep(0.2)print('您已成功登录!!!--东湖大白鹅')exceptExceptionase:print(e)print('设备在线!!!--东湖大白鹅')driver.quit()else:print('请enterinuser.txtAccountpassword')设置执行命令到这一步,使用命令pythonlogin.py大部分时间都成功了不报错,但是通常python解析器比较多,这个命令只能在登录.py目录,所以我们需要去python解析器的绝对路径和login.py的绝对路径,使用绝对路径执行命令在命令可以成功执行的情况下,我们将使用绝对路径的命令写入.zshrc或.zshrc文件中。bashrc文件,就看你用哪个shell了,用哪个shell,把commandalias'zjut'='yourcommand'写入对应的文件,然后用source~/.zshrc更新你的command,最后试试影响。这里需要你的代码中的路径是绝对路径,日志路径必须设置。这使您可以优雅地上网。有兴趣的同学可以多写一个注销脚本,这样就可以很方便的通过命令行登录或者注销了。自动执行命令行对于很多同学来说可能还是很麻烦的。这里有一个思路,每天定时执行脚本,达到永久在线的效果。这里我们需要使用linux的cron来实现。cron可以设置定时任务,ubuntu自带的。使用命令crontab-e编辑自动执行的命令和每次自动执行的时间308***/you_path/python/you_path/login.py这里的语法是指下面的命令在每8点30分自动执行天。修改后需要servicecronrestart重启服务生效。综上所述,整篇文章主要针对需要校园网认证才能上网的linux服务器的解决方案。它可以设置为一个简短的命令行,也可以设置为一个自动任务。代码思路是利用python的selenium模块模拟用户在浏览器上的操作行为来达到目的,这种方式比构造request要简单的多。文章用于学习目的。------东湖大白鹅