最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python開發(fā)的跨平臺(tái)Nmap自動(dòng)化掃描工具

 更新時(shí)間:2025年12月21日 11:44:17   作者:Bruce_xiaowei  
在網(wǎng)絡(luò)安全測試、運(yùn)維巡檢場景中,Nmap是必備工具,但手動(dòng)輸入Nmap命令不僅繁瑣,還容易因參數(shù)記錯(cuò)導(dǎo)致掃描失敗,批量掃描時(shí)重復(fù)操作更是效率低下,本人在應(yīng)用Nmap掃描系統(tǒng)的常用命令格式進(jìn)行整理,將基于Python編寫一款跨平臺(tái)Nmap自動(dòng)化掃描工具,需要的朋友可以參考下

引言

在網(wǎng)絡(luò)安全測試、運(yùn)維巡檢場景中,Nmap(網(wǎng)絡(luò)映射器)是必備工具——小到探測單臺(tái)主機(jī)存活,大到批量掃描端口、識別操作系統(tǒng)和服務(wù)漏洞,都能輕松搞定。但手動(dòng)輸入Nmap命令不僅繁瑣,還容易因參數(shù)記錯(cuò)導(dǎo)致掃描失??;批量掃描時(shí)重復(fù)操作更是效率低下。

本人在應(yīng)用Nmap掃描系統(tǒng)的常用命令格式進(jìn)行整理,將基于Python編寫一款跨平臺(tái)Nmap自動(dòng)化掃描工具,把存活主機(jī)探測、全端口掃描、OS識別、漏洞檢測等常用操作封裝成可視化菜單,新手也能一鍵使用,大幅提升掃描效率。

一、前置準(zhǔn)備:環(huán)境搭建

在使用工具前,需先完成基礎(chǔ)環(huán)境配置,確保Python和Nmap能正常運(yùn)行。

1. 安裝Nmap(核心依賴)

Nmap是掃描的核心,需先安裝并配置環(huán)境變量:

  • Windows:訪問Nmap官網(wǎng)下載頁,下載最新版安裝包,安裝時(shí)勾選“Add Nmap to the system PATH for all users”(添加到環(huán)境變量)。
  • Linux(Ubuntu/Debian):執(zhí)行命令 sudo apt-get install nmap。
  • macOS:執(zhí)行命令 brew install nmap(需先安裝Homebrew)。

驗(yàn)證安裝:打開終端/CMD,輸入 nmap -v,若輸出Nmap版本信息則安裝成功。

2. Python環(huán)境(工具運(yùn)行載體)

需安裝Python 3.6+版本(推薦3.8+),無需額外安裝第三方庫(工具僅使用Python內(nèi)置模塊:subprocess、os、sys、re、typing)。

二、工具核心功能:解決哪些痛點(diǎn)?

手動(dòng)使用Nmap時(shí),我們常遇到這些問題:

  • 每次掃描都要手寫長命令,比如nmap -sn 192.168.1.0/24,參數(shù)多易出錯(cuò);
  • 存活主機(jī)探測后,需手動(dòng)提取IP再進(jìn)行端口掃描,步驟割裂;
  • 不同掃描場景(全端口、常用端口、OS探測)需重復(fù)輸入相似命令;
  • 跨平臺(tái)(Windows/Linux)時(shí),命令行工具(如grep)不兼容,解析結(jié)果麻煩。

本工具針對這些痛點(diǎn),封裝了6大核心功能:

功能編號功能名稱適用場景核心Nmap參數(shù)
1存活主機(jī)探測快速定位網(wǎng)段內(nèi)在線設(shè)備-sn(Ping掃描)、-oG(輸出gnmap格式)
2全端口掃描深度檢測主機(jī)開放端口(0-65535)-sS(SYN掃描)、-p 0-65535
3常用端口掃描快速檢測高頻端口(如80、443、22)默認(rèn)掃描Top 100常用端口
4操作系統(tǒng)探測識別主機(jī)操作系統(tǒng)類型(Windows/Linux)-O(OS檢測)
5服務(wù)版本檢測識別端口對應(yīng)服務(wù)及版本(如Apache 2.4.49)-sV(版本探測)
6SMB Ghost漏洞掃描檢測永恒之藍(lán)等SMB漏洞(445端口)--script smb-ghost

三、核心代碼解析:從原理到實(shí)現(xiàn)

工具的核心邏輯是“封裝Nmap命令+解析掃描結(jié)果+可視化菜單”,以下拆解關(guān)鍵模塊,讓你不僅會(huì)用,還懂原理。

1. 環(huán)境檢查模塊:確保Nmap可用

工具運(yùn)行前首先檢查Nmap是否安裝并加入環(huán)境變量,避免后續(xù)執(zhí)行命令報(bào)錯(cuò):

import subprocess
import sys

def check_nmap_installed() -> bool:
    """檢查 Nmap 是否安裝并加入環(huán)境變量"""
    try:
        # 執(zhí)行 nmap -v 檢測是否存在
        result = subprocess.run(
            ["nmap", "-v"],
            capture_output=True,
            text=True,
            timeout=5
        )
        return result.returncode == 0
    except (subprocess.TimeoutExpired, FileNotFoundError):
        return False

# 主程序入口檢查
if __name__ == "__main__":
    if not check_nmap_installed():
        print("? 錯(cuò)誤:未檢測到 Nmap,請先安裝并加入環(huán)境變量!")
        sys.exit(1)

原理:通過subprocess.run執(zhí)行nmap -v命令,若返回碼為0則說明Nmap可用;若觸發(fā)“文件未找到”異常,說明Nmap未安裝或未配置環(huán)境變量。

2. 命令執(zhí)行模塊:統(tǒng)一管理Nmap調(diào)用

所有Nmap命令都通過該模塊執(zhí)行,實(shí)現(xiàn)“實(shí)時(shí)輸出日志+錯(cuò)誤處理+結(jié)果返回”,避免重復(fù)寫子進(jìn)程調(diào)用代碼:

def execute_command(cmd: List[str], desc: str) -> bool:
    """執(zhí)行系統(tǒng)命令并輸出日志"""
    print(f"\n=== 開始執(zhí)行:{desc} ===")
    print(f"執(zhí)行命令:{' '.join(cmd)}")

    try:
        # 實(shí)時(shí)輸出日志(避免卡頓)
        process = subprocess.Popen(
            cmd,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
            text=True,
            bufsize=1
        )

        # 逐行打印Nmap掃描日志
        for line in iter(process.stdout.readline, ''):
            print(line.strip())

        process.wait()
        return process.returncode == 0
    except Exception as e:
        print(f"執(zhí)行異常:{str(e)}")
        return False

亮點(diǎn)

  • 實(shí)時(shí)流式輸出掃描日志,避免大掃描任務(wù)無響應(yīng);
  • 統(tǒng)一捕獲異常,返回執(zhí)行結(jié)果(成功/失?。?;
  • 兼容Windows/Linux的子進(jìn)程調(diào)用方式。

3. 存活主機(jī)探測:跨平臺(tái)解析結(jié)果

手動(dòng)掃描存活主機(jī)后,Windows沒有grep/cut命令,解析結(jié)果很麻煩。工具內(nèi)置正則解析gnmap格式文件,提取存活I(lǐng)P并寫入文件:

import re
import os

def discover_live_hosts(network: str = "192.168.1.0/24") -> bool:
    """探測存活主機(jī)(跨平臺(tái)版)"""
    # 步驟1:執(zhí)行Nmap存活掃描,輸出到gnmap文件
    cmd = ["nmap", "-sn", "-v", "-T4", "-oG", "Discovery.gnmap", network]
    if not execute_command(cmd, "存活主機(jī)探測"):
        return False

    # 步驟2:解析gnmap文件,提取存活I(lǐng)P
    live_hosts = []
    try:
        with open("Discovery.gnmap", "r", encoding="utf-8") as f:
            for line in f:
                # 匹配gnmap格式中"Status: Up"的行,提取IP
                if "Status: Up" in line:
                    ip_match = re.search(r"Host: (\d+\.\d+\.\d+\.\d+)", line)
                    if ip_match:
                        live_hosts.append(ip_match.group(1))
    except Exception as e:
        print(f"解析失?。簕str(e)}")
        return False

    # 步驟3:寫入存活主機(jī)列表
    if live_hosts:
        with open("liveHosts.txt", "w", encoding="utf-8") as f:
            f.write("\n".join(live_hosts))
        print(f"? 發(fā)現(xiàn) {len(live_hosts)} 臺(tái)存活主機(jī),已寫入liveHosts.txt")
        return True
    else:
        print("? 未發(fā)現(xiàn)存活主機(jī)")
        return False

關(guān)鍵解析

  • -sn:Nmap Ping掃描(不掃描端口,僅探測存活);
  • -oG:輸出“可 grep”的gnmap格式,方便解析;
  • 正則Host: (\d+.\d+.\d+.\d+):精準(zhǔn)匹配IP地址,跨平臺(tái)無需依賴外部命令。

4. 可視化主菜單:新手友好

將所有功能封裝成菜單,無需記命令,輸入編號即可執(zhí)行:

def main_menu():
    """主菜單"""
    print("=" * 50)
    print("        Nmap 自動(dòng)化掃描工具")
    print("=" * 50)
    print("1. 探測存活主機(jī)(生成 liveHosts.txt)")
    print("2. 全端口掃描(基于 liveHosts.txt)")
    print("3. 常用端口掃描(基于 liveHosts.txt)")
    print("4. 操作系統(tǒng)探測(基于 liveHosts.txt)")
    print("5. 服務(wù)版本檢測(基于 liveHosts.txt)")
    print("6. SMB Ghost 漏洞掃描")
    print("0. 退出程序")
    print("=" * 50)

# 主循環(huán)
while True:
    main_menu()
    choice = input("請輸入操作編號:").strip()
    if choice == "0":
        print("?? 程序退出!")
        break
    # 執(zhí)行對應(yīng)功能(省略分支邏輯)

四、工具使用教程:一步到位

1. 完整代碼獲取

將本文所有代碼整合,保存為nmap_auto_scan.py(也可直接用文章開頭的完整代碼)。

2. 運(yùn)行工具

打開終端/CMD,進(jìn)入代碼所在目錄,執(zhí)行:

python nmap_auto_scan.py

若提示“Nmap檢測成功”,則進(jìn)入主菜單。

3. 功能使用示例

示例1:探測存活主機(jī)

  1. 輸入編號1,按提示輸入掃描網(wǎng)段(默認(rèn)192.168.1.0/24);
  2. 工具自動(dòng)執(zhí)行Nmap存活掃描,解析結(jié)果后生成liveHosts.txt;
  3. 查看文件,即可看到網(wǎng)段內(nèi)所有在線主機(jī)的IP。

示例2:全端口掃描

  1. 確保已生成liveHosts.txt(先執(zhí)行示例1);
  2. 輸入編號2,工具自動(dòng)掃描存活主機(jī)的0-65535端口;
  3. 掃描結(jié)果保存為FullTCP,可打開查看開放端口、端口狀態(tài)等。

示例3:SMB Ghost漏洞掃描

  1. 輸入編號6,輸入目標(biāo)網(wǎng)段(如192.168.1.0/24);
  2. 工具掃描445端口,檢測是否存在SMB Ghost漏洞;
  3. 實(shí)時(shí)查看掃描日志,識別漏洞主機(jī)。

4. 結(jié)果文件說明

工具運(yùn)行后會(huì)生成多個(gè)結(jié)果文件,用途如下:

文件名用途
liveHosts.txt存活主機(jī)IP列表
Discovery.gnmap存活探測原始結(jié)果
FullTCP全端口掃描結(jié)果
TopTCP常用端口掃描結(jié)果
OSDetect操作系統(tǒng)探測結(jié)果
ServiceDetect服務(wù)版本檢測結(jié)果

五、擴(kuò)展與優(yōu)化:讓工具更強(qiáng)大

基礎(chǔ)版本滿足日常使用,你還可以根據(jù)需求擴(kuò)展功能:

1. 增加多線程掃描

默認(rèn)Nmap掃描是單線程,可通過-min-parallelism參數(shù)增加并行度,或用Python多線程同時(shí)掃描多個(gè)網(wǎng)段。

2. 支持更多漏洞掃描

比如添加Heartbleed(心臟滴血)、Log4j漏洞掃描:

def scan_log4j(network: str = DEFAULT_NETWORK) -> bool:
    """Log4j漏洞掃描"""
    cmd = [
        "nmap", "-p", "80,443,8080",
        "--script", "log4j-scan",
        network
    ]
    return execute_command(cmd, "Log4j漏洞掃描")

3. 結(jié)果可視化

將掃描結(jié)果解析為Excel/HTML格式,用pandas生成報(bào)表,或用matplotlib繪制端口開放率圖表。

4. 增加參數(shù)自定義

比如允許用戶自定義掃描速度(-T0~-T5)、超時(shí)時(shí)間、是否跳過Ping等:

# 新增參數(shù)輸入
scan_speed = input("請輸入掃描速度(0-5,默認(rèn)4):").strip() or "4"
cmd = ["nmap", "-sS", "-T" + scan_speed, "-p", "0-65535", ...]

5. 錯(cuò)誤重試機(jī)制

對掃描失敗的主機(jī),增加自動(dòng)重試邏輯:

def scan_with_retry(cmd: List[str], desc: str, retry: int = 2) -> bool:
    """帶重試的命令執(zhí)行"""
    for i in range(retry + 1):
        if execute_command(cmd, desc):
            return True
        print(f"第{i+1}次執(zhí)行失敗,重試中...")
    return False

六、重要注意事項(xiàng)

  1. 合法授權(quán):掃描他人網(wǎng)絡(luò)/主機(jī)需獲得書面授權(quán),未經(jīng)授權(quán)的掃描可能違反《網(wǎng)絡(luò)安全法》,承擔(dān)法律責(zé)任;
  2. 掃描速度:避免使用-T5(最快速度)掃描公網(wǎng),可能導(dǎo)致目標(biāo)網(wǎng)絡(luò)擁塞,建議內(nèi)網(wǎng)用-T4,公網(wǎng)用-T2
  3. 權(quán)限問題:Linux下執(zhí)行SYN掃描(-sS)需要root權(quán)限,需加sudo運(yùn)行工具(sudo python nmap_auto_scan.py);
  4. 跨平臺(tái)兼容:Windows下Nmap的部分腳本可能失效,建議優(yōu)先在Linux/macOS環(huán)境使用;
  5. 結(jié)果解讀:Nmap的OS探測、版本檢測并非100%準(zhǔn)確,需結(jié)合其他工具驗(yàn)證。

七、總結(jié)

本文通過Python封裝Nmap命令,實(shí)現(xiàn)了“一鍵式”網(wǎng)絡(luò)掃描工具,解決了手動(dòng)掃描的繁瑣問題。工具不僅兼容Windows/Linux/macOS,還提供了可視化菜單、跨平臺(tái)結(jié)果解析、詳細(xì)日志輸出等功能,新手也能快速上手。

無論是運(yùn)維人員做網(wǎng)絡(luò)巡檢,還是安全測試人員做漏洞掃描,這款工具都能大幅提升效率。你可以基于基礎(chǔ)版本,根據(jù)自身需求擴(kuò)展功能,打造屬于自己的專屬Nmap掃描工具。

最后再次強(qiáng)調(diào):網(wǎng)絡(luò)掃描需遵守法律法規(guī),僅在授權(quán)范圍內(nèi)使用工具,共同維護(hù)網(wǎng)絡(luò)安全!

以上就是基于Python開發(fā)的跨平臺(tái)Nmap自動(dòng)化掃描工具的詳細(xì)內(nèi)容,更多關(guān)于Python跨平臺(tái)Nmap自動(dòng)化掃描的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python處理缺失值的8種不同方法實(shí)例

    Python處理缺失值的8種不同方法實(shí)例

    缺失值是指粗糙數(shù)據(jù)中由于缺少信息而造成的數(shù)據(jù)的聚類、分組、刪失或截?cái)?下面這篇文章主要給大家介紹了關(guān)于Python處理缺失值的8種不同方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • OpenCV機(jī)器學(xué)習(xí)MeanShift算法筆記分享

    OpenCV機(jī)器學(xué)習(xí)MeanShift算法筆記分享

    這篇文章主要介紹了OpenCV機(jī)器學(xué)習(xí)MeanShift算法筆記分享,有需要的朋友可以借鑒參考下,希望可以對各位讀者的OpenCV算法學(xué)習(xí)能夠有所幫助
    2021-09-09
  • 切換路徑在Jupyter里調(diào)用本地文件的操作

    切換路徑在Jupyter里調(diào)用本地文件的操作

    這篇文章主要介紹了切換路徑在Jupyter里調(diào)用本地文件的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python驗(yàn)證碼截取識別代碼實(shí)例

    Python驗(yàn)證碼截取識別代碼實(shí)例

    這篇文章主要介紹了Python驗(yàn)證碼截取識別代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python-pywin32庫的使用高級操作方法

    Python-pywin32庫的使用高級操作方法

    文章介紹了Python的pywin32庫,該庫允許訪問Windows?API并執(zhí)行高級操作,對Python?pywin32庫使用方法感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Python實(shí)現(xiàn)釘釘自動(dòng)化完整指南

    Python實(shí)現(xiàn)釘釘自動(dòng)化完整指南

    本文詳細(xì)介紹如何使用 Python 實(shí)現(xiàn)釘釘自動(dòng)化,包括消息發(fā)送、部門管理、審批流程觸發(fā)等功能,內(nèi)容涵蓋實(shí)現(xiàn)步驟、前置條件、依賴項(xiàng)以及注意事項(xiàng),幫助快速上手并避免常見問題,需要的朋友可以參考下
    2025-03-03
  • Python 3 實(shí)現(xiàn)定義跨模塊的全局變量和使用教程

    Python 3 實(shí)現(xiàn)定義跨模塊的全局變量和使用教程

    這篇文章主要介紹了Python 3 實(shí)現(xiàn)定義跨模塊的全局變量和使用,本文通過實(shí)例代碼相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python編程快速上手——PDF文件操作案例分析

    Python編程快速上手——PDF文件操作案例分析

    這篇文章主要介紹了Python 文件操作,結(jié)合具體實(shí)例形式分析了Python針對pdf文件的遍歷、讀寫、加密、解密等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • NumPy進(jìn)行統(tǒng)計(jì)分析

    NumPy進(jìn)行統(tǒng)計(jì)分析

    本文主要介紹了NumPy進(jìn)行統(tǒng)計(jì)分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Python中用altzone()方法處理時(shí)區(qū)的教程

    Python中用altzone()方法處理時(shí)區(qū)的教程

    這篇文章主要介紹了Python中用altzone()方法處理時(shí)區(qū)的教程,是Python入門中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05

最新評論

定西市| 祁连县| 深圳市| 蒲江县| 林口县| 柘荣县| 互助| 化州市| 牡丹江市| 垫江县| 乌拉特中旗| 伊川县| 栾城县| 东山县| 陕西省| 甘谷县| 巨野县| 佛山市| 海南省| 武定县| 扶绥县| 乐平市| 乳山市| 汝南县| 栾川县| 军事| 镇原县| 旬邑县| 政和县| 新巴尔虎左旗| 霍城县| 道孚县| 法库县| 双柏县| 崇阳县| 中西区| 高密市| 北京市| 陆良县| 霍州市| 安陆市|