2.awd初階_指令碼掃描

yan_xiao發表於2024-11-14

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的值。
  • 異常處理: 當前程式碼沒有處理請求過程中可能出現的異常,例如網路錯誤或超時。建議增加適當的異常處理機制,以提高程式碼的健壯性。

相關文章