天天看點

爬蟲筆記-Bugku秋名山老司機(入門)

記一次python爬蟲筆記

題目:bugku-秋名山老司機

題目要求:兩秒内送出一道很長的計算題答案,并且式子每次重新整理都會變動

如:

爬蟲筆記-Bugku秋名山老司機(入門)

多重新整理幾次可見題目提示,需要用post傳入值,變量名為value

爬蟲筆記-Bugku秋名山老司機(入門)

建立py檔案,導入 requests 庫和 re 庫

并且建立一個會話對象,用它發送一個get請求

# requests庫用于發送請求
# re庫用于比對正規表達式
import requests
import re
# requests.session() 維持會話
s = requests.session()
r = s.get("http://192.168.4.243:1035/")
           

然後用 re.search 掃描字元串,并且把我們需要的計算式子儲存于變量web中

其中

"r" 表示字元串為原始字元串,不會被 “\” 轉義

"\d+" 比對一個或多個數字字元

"[+-*]" 字元集合,比對所包含的任意一個字元。“-” 為特殊字元是以加個 \ 轉義

然後再比對一次數字字元即可

然後建立一個字典 flag,鍵為value 并且用 eval 計算字元串表達式,group(0) 表示比對正則的全部内容,同 group() 。

flag = {
    "value": eval(web.group(0))
}
           

最後用 post 的方式,把值傳給 url,并且輸出 頁面的字元串

r = s.post("http://192.168.4.243:1035/", data=flag)
print(r.text)
           

多運作幾次,得到 flag

爬蟲筆記-Bugku秋名山老司機(入門)

完整代碼

import requests
import re
s = requests.session()
r = s.get("http://192.168.4.243:1035/")
web = re.search(r'(\d+[+\-*])+(\d+)', r.text)
flag = {
    "value": eval(web.group(0))
}
r = s.post("http://192.168.4.243:1035/", data=flag)
print(r.text)