解決遠程連接小型機登陸網(wǎng)關問題

最近生物信息學與現(xiàn)代統(tǒng)計課已經(jīng)進入第二個項目RNA-seq數(shù)據(jù)分析,根據(jù)已有的流程,我們需要使用cufflinks程序拼接轉(zhuǎn)錄本,但是cufflinks需要聯(lián)網(wǎng)更新數(shù)據(jù)(可以使用--no-update-check參數(shù)忽略網(wǎng)絡更新,但是合并轉(zhuǎn)錄本的程序cuffmerge并不能忽略),但是一直以來大家都以為學校的小型機并不能上網(wǎng),所以程序一直被阻塞,導致進度卡住,本文就記錄一下我解決這個問題的探索和最終的方案。

猜想

平時我們使用小型機,都是在機房內(nèi)通過固定的IP來連接登陸小型機,而在宿舍里,通過蘇大網(wǎng)(校園網(wǎng))也可以使用該IP來連接小型機,那么,該小型機應該連接在校園網(wǎng)的局域網(wǎng)中,同時,猜想機房網(wǎng)絡使用固定IP,小型機的IP也是固定的(不固定怎么用,頓時覺得這個猜想不現(xiàn)實,但當時確實這樣想了,不過最后也證實是正確的),所以很可能也在和機房在同樣的免費上網(wǎng)的網(wǎng)段內(nèi)。

證實可行

根據(jù)以上的猜想,進行以下證實

  1. 使用ping命令來證實
$ ping baidu.com
PING baidu.com (180.149.132.47) 56(84) bytes of data.
64 bytes from 180.149.132.47: icmp_seq=1 ttl=48 time=208 ms
64 bytes from 180.149.132.47: icmp_seq=2 ttl=48 time=209 ms
64 bytes from 180.149.132.47: icmp_seq=3 ttl=48 time=207 ms
64 bytes from 180.149.132.47: icmp_seq=4 ttl=48 time=211 ms
64 bytes from 180.149.132.47: icmp_seq=5 ttl=48 time=209 ms
64 bytes from 180.149.132.47: icmp_seq=6 ttl=48 time=209 ms
^C
--- baidu.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5006ms
rtt min/avg/max/mdev = 207.858/209.435/211.620/1.187 ms

可以發(fā)現(xiàn),確實是能夠聯(lián)網(wǎng)的,但是,試試訪問網(wǎng)頁

$ curl baidu.com

然后就沒有然后了……這就很尷尬了。
至于為什么ping命令可以連通百度卻不能打開網(wǎng)頁,猜測應該是網(wǎng)關系統(tǒng)是限制了HTTP請求,但是ping命令使用更為底層的ICMP協(xié)議,純屬猜測,別干壞事!

  1. 試試打開網(wǎng)關的頁面
$ curl wg.suda.edu.cn
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>蘇州大學網(wǎng)關登錄</title>
……以下省略……

可以看到屏幕嘩啦嘩啦出來一大堆,然而,重要的是!我們打開了網(wǎng)關,所以我們知道,登陸網(wǎng)關應該就是能夠上網(wǎng)了。而且這個舊版的網(wǎng)關是免費網(wǎng)域內(nèi)才使用的,開熏!

發(fā)掘可用的工具

到了這一步,就要想辦法來登陸網(wǎng)關了,根據(jù)多年爬蟲經(jīng)驗,猜測應該是發(fā)起一個HTTP請求就可以登陸網(wǎng)關,然后轉(zhuǎn)戰(zhàn)自己的電腦,來研究如何來登陸。
打開Chrome,登陸網(wǎng)關頁面,調(diào)出調(diào)試工具,可以看到在登陸過程中,瀏覽器發(fā)起了一個POST請求

請求頭部
請求內(nèi)容,可恥地打了碼

再來發(fā)掘小型機上能用的資源,雖然使用curl也能模擬發(fā)送HTTP請求,但是因為還要在網(wǎng)頁里找到兩個奇怪的參數(shù)(應該時CRSF的令牌),這個對于沒怎么接觸過shell的小白真的是會很無語,慶幸的是,小型機安裝的是anaconda發(fā)行版的Python,還預裝了requests庫,臉上瞬間就露出了老司機的笑容。

開始碼代碼

直接上改進多次的最終代碼:

#! /opt/ibm/miniconda/bin/python
# -*- coding:utf-8 -*-
"""
@author: 楊滿球
@file: wg.py
@time: 2016/11/12 12:03
"""
from requests.exceptions import ReadTimeout
import requests
import re
import sys
import getpass

def login():
    s = requests.session()
    r = s.get('http://wg.suda.edu.cn/')
    viewstate = re.findall('id="__VIEWSTATE" value="(.+?)"', r.text)[0]
    eventvalidation = re.findall('id="__EVENTVALIDATION" value="(.+?)"', r.text)[0]
    try:
        studentid = sys.argv[1]
    except:
        studentid = raw_input(u'studentid:')
    try:
        password = sys.argv[2]
    except:
        password = getpass.getpass(u'password:')
    data = {
        '__EVENTTARGET': '',
        '__EVENTARGUMENT': '',
        '__VIEWSTATE': viewstate,
        '__EVENTVALIDATION': eventvalidation,
        'TextBox1': studentid,
        'TextBox2': password,
        'nw': 'RadioButton2',
        'tm': 'RadioButton8',
        'Button1': '登錄網(wǎng)關'
    }
    r = s.post('http://wg.suda.edu.cn', data=data)
    html = r.text
    if u'成功登錄' in html:
        print(u'succeed!')
    else:
        print(u'fail!')

if __name__ == '__main__':
    try:
        r = requests.get('http://baidu.com', timeout=3)
    except ReadTimeout as e:
        login()
    else:
        print('no necessary!')

原理很簡單,使用Python模擬發(fā)起請求,然后測試一下

$ python wg.py <studentid> <password>
succeed!

不會是假的吧?試試訪問網(wǎng)頁

$ curl baidu.com
<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

這,真的成功了?好吧,真的是成功的!

人性化

最后想了想,如果能把這東西直接變成一個命令,,讓大家能方便地使用才能順利裝逼啊!故又去研究了一大波,發(fā)現(xiàn)Linux是能夠根據(jù)第一行的注釋來規(guī)定解釋器的,如此這般就有了第一句注釋,不過這里有個大坑,那就是#!之后這個空格,是必須的,找了老大一圈最后還是在StackOverflow上的小角落找到的答案,其次,一定要是Unix格式的文檔,不然還是一直報錯,最后重命名時去掉后綴名,然后移動到usr/local/bin下,再把權限改為755,那么大家就可以暢快地使用

$ wg
no necessary! # 當還能上網(wǎng)時
studentid:<studentid> # 不能上網(wǎng)時
password: # 密碼保密不回顯
succeed! # 登陸成功
fail! # 登陸失敗,可能是密碼錯誤
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 0 01、網(wǎng)絡管理的五大功能(包括每項功能的具體情況) 1.配置管理:ISO定義的管理功能域中,配置管理包括視圖管...
    哈熝少主閱讀 3,627評論 1 20
  • 1. OSI,TCP/IP,五層協(xié)議的體系結(jié)構(gòu),以及各層協(xié)議 OSI分層 (7層):物理層、數(shù)據(jù)鏈路層、...
    iCaptain閱讀 2,591評論 0 4
  • 1. 基礎知識 1.1 3種常見的計算機體系結(jié)構(gòu)劃分 OSI分層(7層):物理層、數(shù)據(jù)鏈路層、網(wǎng)絡層、傳輸層、會話...
    Mr希靈閱讀 20,101評論 6 120
  • 第二章 物理層 頻分復用:頻分復用的用戶在同樣的時間占用不同的帶寬資源(頻率帶寬) 時分復用:時分復用的用戶在不同...
    PramaWells閱讀 4,026評論 1 3
  • 1.這篇文章不是本人原創(chuàng)的,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,375評論 6 174

友情鏈接更多精彩內(nèi)容