本工具針對 C 段(256 IP)進行 HTTP 服務探測,提取 Banner 信息(標題、服務器版本),採用多線程並發與智能編碼檢測,適合資產梳理場景。
192.168.1.0/24) 與範圍(192.168.1.1-192.168.1.254) 目標格式-p 8080)<title>、Server 頭、狀態碼
def ip2int(addr):
return struct.unpack("!I", socket.inet_aton(addr))[0]
def int2ip(addr):
return socket.inet_ntoa(struct.pack("!I", addr))
def int_dec(pagehtml):
# 1. chardet 統計檢測(confidence > 0.9)
# 2. HTML meta charset 正則提取
# 3. 驗證編碼有效性
# 4. 回退 ISO-8859-1
for ip in IPRange(start, end): # 或 IPNetwork
url = f'https://{ip}:{port}'
t = Thread(target=http_banner, args=(url,))
t.daemon = False
t.start()
使用 Lock() 保護輸出,避免多線程輸出交錯。
python scanner.py 192.168.1.0/24 -p 8080
python scanner.py 192.168.1.1-192.168.1.254
使用 optparse 解析參數(建議升級至 argparse)。
IP STATUS SERVER TITLE 192.168.1.1 200 Apache/2.4 Welcome 192.168.1.5 403 nginx/1.18 Forbidden
aiohttp) 替換多線程,提升併發規模此工具展示 Python 在網絡資產發現場景的工程化能力。