讓網絡管理更高效!快速掃描局域網,實時獲取 IP 與 MAC 地址
你是否曾在深夜突然收到網絡故障的警報?當網絡中的某個設備出現問題時,很多工作都會因此停滯,影響到員工們的正常作業(yè)。面對公司內部錯綜復雜的網絡架構,如何迅速定位問題設備,并找到其IP地址和MAC地址,成為了很多運維人員的一大挑戰(zhàn)。
有時,問題可能僅僅源于一個小小設備的故障,或是一個新加入的設備意外干擾了整個局域網的穩(wěn)定運行。如果不能快速確認這些設備的信息,排查故障的過程可能會被延長數小時甚至一整天。想象一下,如果我們能夠高效準確地掃描整個局域網,實時獲取所有在線設備的IP與MAC地址信息,這不僅能夠極大提高故障定位的速度,還能顯著改善整體網絡管理的質量。這樣的解決方案聽起來是不是非常吸引人呢?

生產環(huán)境中的挑戰(zhàn)
讓我們設想一下,在一個典型的企業(yè)網絡環(huán)境中,技術部門負責的設備數量龐大,從打印機、工作站到服務器和路由器,每一臺設備都可能影響到企業(yè)的生產運營。每次遇到網絡故障,IT運維人員都會面臨如下挑戰(zhàn):
- 設備定位難:局域網內的設備種類繁多,IP地址分配混亂,MAC地址與設備綁定關系不明確,導致問題排查困難。
 - 掃描效率低:傳統的手工檢查方法不僅費時,而且容易遺漏某些存活設備的情況。
 - 實時性差:面對緊急故障,手動操作掃描可能會浪費寶貴的時間,拖延故障解決進程。
 
而這個問題,似乎困擾著所有的IT運維人員:如何在最短時間內,全面掃描整個局域網,實時獲取設備的IP地址和MAC地址?
快速掃描局域網,精準獲取設備信息
其實,通過自動化的腳本掃描,我們可以快速、準確地獲取所有設備的IP與MAC地址,從而大幅提高網絡故障排查的效率。無論是新接入的設備,還是網絡中的老設備,都能一網打盡。
通過Python腳本結合ping命令和arp命令,我們能夠實現以下目標:
- 快速檢測存活設備:通過對IP段進行批量掃描,快速識別哪些設備處于在線狀態(tài)。
 - 精準獲取MAC地址:利用arp命令可以輕松地獲取設備的MAC地址,幫助進一步識別設備類型或進行網絡隔離。
 - 實時輸出結果:將所有存活設備的信息,包括IP和MAC地址,實時輸出,幫助運維人員即時掌握網絡情況,快速做出響應。
 
以下是一個簡潔易用的Python腳本,旨在幫助快速掃描局域網內的設備。它能有效地收集在線設備的關鍵信息,包括IP地址、MAC地址以及它們的操作系統類型,并以清晰整齊的表格形式展示出來。
import os
import subprocess
import platform
import re
import concurrent.futures
# 檢查IP是否存活
def ping_ip(ip):
    param = "-n"if platform.system().lower() == "windows"else"-c"
    command = ["ping", param, "1", ip]
    response = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    return response.returncode == 0
# 獲取MAC地址
def get_mac(ip):
    command = ["arp", "-a", ip]
    result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    match = re.search(r"([a-fA-F0-9]{2}[:-]){5}[a-fA-F0-9]{2}", result.stdout)
    return match.group(0) if match elseNone
# 獲取設備平臺
def get_platform(ip):
    try:
        result = subprocess.run(["nmap", "-O", ip], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
        if"OS details"in result.stdout:
            os_match = re.search(r"OS details: (.*)", result.stdout)
            if os_match:
                return os_match.group(1)
    except Exception:
        return"Unknown"
    return platform.system()
# 掃描單個IP的功能
def scan_single_ip(ip):
    if ping_ip(ip):
        mac = get_mac(ip)
        platform_info = get_platform(ip)
        return {"ip": ip, "mac": mac, "platform": platform_info}
    returnNone
# 掃描IP段
def scan_network(ip_range):
    live_ips = []
    with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:  # 使用多線程
        results = executor.map(scan_single_ip, ip_range)
        for result in results:
            if result:
                live_ips.append(result)
    return live_ips
# 示例IP段生成器
def generate_ip_range(network):
    base_ip = network.split(".")
    ip_range = []
    for i in range(1, 255):
        ip_range.append(".".join(base_ip[:3] + [str(i)]))
    return ip_range
# 格式化輸出
def print_ip_mac(live_ips):
    print("IP\t\t\tMAC Address\t\t\tPlatform")
    print("-" * 60)
    for info in live_ips:
        print(f"{info['ip']}\t\t{info['mac']}\t\t{info['platform']}")
if __name__ == "__main__":
    network = "192.168.171"# 假設掃描192.168.171.1到192.168.171.254
    ip_range = generate_ip_range(network)
    live_ips = scan_network(ip_range)
    print_ip_mac(live_ips)- ping_ip方法: 通過ping命令檢測給定的IP地址是否在線。返回True表示IP存活,False表示未存活。
 - get_mac方法: 使用arp命令獲取給定IP地址的MAC地址。
 - get_platform方法: 通過nmap命令獲取設備的操作系統信息。
 - scan_single_ip方法: 掃描單個IP地址,檢查設備是否在線,若在線則獲取MAC地址和平臺信息。
 - scan_network 方法: 掃描整個IP段,獲取所有存活設備的信息(IP、MAC、平臺)。
 - generate_ip_range方法: 根據給定的網絡前綴生成一個IP段范圍。
 - print_ip_mac方法: 格式化并打印掃描結果。
 
成功運行上述腳本后,您將會看到以下結果:
root@wtrpro:~# python3 scan_network.py
IP                      MAC Address                     Platform
------------------------------------------------------------
192.168.31.1       bc:24:11:fa:87:44            Linux
192.168.31.100     bc:24:11:50:ff:92           Linux 4.15 - 5.6總結
通過這樣的自動化掃描,你能夠從繁瑣的手工排查中解放出來,精準識別每個設備的IP和MAC地址。無論是為了提升網絡管理效率,還是應對突發(fā)的網絡故障,快速掃描工具都將是IT運維人員的重要助手。















 
 
 

 
 
 
 