1.python知識
隨便過一遍python前置知識
import requests
# url="https://cn.bing.com/search?q=baidu1&form=ANSPH1&refig=6735b4ceb83048cd9c774ca99db2a002&pc=U531"
# try: #1.get訪問的時候要有http頭
# print(requests.get(url).status_code) #5.返回狀態碼 .status_code
# print(requests.get("https://cn.bing.com/search?q=baidu1&form=ANSPH1&refig=6735b4ceb83048cd9c774ca99db2a002&pc=U531"))
# #4.會輸出狀態碼,說明網站正常訪問
# requests.get("https://yanxiao.comkjhgfd") #2.訪問不到網址就報錯,停止程式
# except:
# pass #3.訪問不到就過
#
# for i in range(1,100):
# print(i)
#正式開始寫程式碼
#比如大家在一個網段:192.168.6.X X為0-255 #6. .format代表前面的變數
url="http://192.168.6.129:"
for i in range(1,11):
url_new=url+"{}".format(i)
print(url_new)
'''
http://192.168.6.129:1
http://192.168.6.129:2
http://192.168.6.129:3
http://192.168.6.129:4
http://192.168.6.129:5
http://192.168.6.129:6
http://192.168.6.129:7
http://192.168.6.129:8
http://192.168.6.129:9
http://192.168.6.129:10
'''
2.指令碼掃描存活主機(get)
import requests
from concurrent.futures import ThreadPoolExecutor
import re
f = open("host.txt", "w")
def get_ip(url):
resp = requests.get(url)
status = resp.status_code
if status == 200:
f.write(url + "\n")
print(url)
url = []
for i in range(1, 255):
url.append("http://192-168-1-" + str(i) + ".pvp5422.bugku.cn") #拼接網段的字串
with ThreadPoolExecutor(max_workers=100) as executor:
executor.map(get_ip, url)
"""
http://192-168-1-93.pvp5422.bugku.cn
http://192-168-1-173.pvp5422.bugku.cn
"""
匯入模組
import requests
from concurrent.futures import ThreadPoolExecutor
import re
requests
: 用於傳送HTTP請求。ThreadPoolExecutor
: 用於併發執行任務,這裡用來同時處理多個HTTP請求,提高效率。re
: 正規表示式模組,在這個指令碼中沒有用到。
檔案操作
f = open("host.txt", "w")
- 開啟或建立名為
host.txt
的檔案,準備寫入資料。
定義函式
def get_ip(url):
resp = requests.get(url)
status = resp.status_code
if status == 200:
f.write(url + "\n")
print(url)
get_ip(url)
: 這個函式接受一個URL作為引數,使用requests.get()
方法向該URL傳送GET請求。resp = requests.get(url)
: 傳送請求並獲取響應物件。status = resp.status_code
: 獲取HTTP響應的狀態碼。- 如果狀態碼為200(表示請求成功),則將URL寫入
host.txt
檔案,並列印該URL。
構建URL列表
url = []
for i in range(1, 255):
url.append("http://192-168-1-" + str(i) + ".pvp5422.bugku.cn") #拼接網段的字串
- 建立一個空列表
url
。 - 使用
for
迴圈遍歷1到254之間的數字,構建每個可能的IP地址,並將其新增到url
列表中。
併發執行
with ThreadPoolExecutor(max_workers=100) as executor:
executor.map(get_ip, url)
- 使用
ThreadPoolExecutor
建立一個執行緒池,最大工作執行緒數設為100。 - 使用
executor.map()
方法將get_ip
函式應用到url
列表中的每個元素上,實現併發執行。
註釋
"""
http://192-168-1-93.pvp5422.bugku.cn
http://192-168-1-173.pvp5422.bugku.cn
"""
- 這些註釋展示了兩個示例URL,可能是之前執行指令碼時發現的可訪問主機。
注意事項
- 安全性: 在實際使用中,掃描網路可能會被認為是惡意行為,特別是在沒有得到授權的情況下。確保您有許可權對目標網路進行此類操作。
- 效能: 併發請求數量設定為100,這可能會對網路和伺服器造成較大壓力。根據實際情況調整
max_workers
的值。 - 異常處理: 當前程式碼沒有處理請求過程中可能出現的異常,例如網路錯誤或超時。建議增加適當的異常處理機制,以提高程式碼的健壯性。