讓網絡管理更高效!快速掃描局域網,實時獲取 IP 與 MAC 地址
你是否曾在深夜突然收到網絡故障的警報?當網絡中的某個設備出現問題時,很多工作都會因此停滯,影響到員工們的正常作業。面對公司內部錯綜復雜的網絡架構,如何迅速定位問題設備,并找到其IP地址和MAC地址,成為了很多運維人員的一大挑戰。
有時,問題可能僅僅源于一個小小設備的故障,或是一個新加入的設備意外干擾了整個局域網的穩定運行。如果不能快速確認這些設備的信息,排查故障的過程可能會被延長數小時甚至一整天。想象一下,如果我們能夠高效準確地掃描整個局域網,實時獲取所有在線設備的IP與MAC地址信息,這不僅能夠極大提高故障定位的速度,還能顯著改善整體網絡管理的質量。這樣的解決方案聽起來是不是非常吸引人呢?
生產環境中的挑戰
讓我們設想一下,在一個典型的企業網絡環境中,技術部門負責的設備數量龐大,從打印機、工作站到服務器和路由器,每一臺設備都可能影響到企業的生產運營。每次遇到網絡故障,IT運維人員都會面臨如下挑戰:
- 設備定位難:局域網內的設備種類繁多,IP地址分配混亂,MAC地址與設備綁定關系不明確,導致問題排查困難。
- 掃描效率低:傳統的手工檢查方法不僅費時,而且容易遺漏某些存活設備的情況。
- 實時性差:面對緊急故障,手動操作掃描可能會浪費寶貴的時間,拖延故障解決進程。
而這個問題,似乎困擾著所有的IT運維人員:如何在最短時間內,全面掃描整個局域網,實時獲取設備的IP地址和MAC地址?
快速掃描局域網,精準獲取設備信息
其實,通過自動化的腳本掃描,我們可以快速、準確地獲取所有設備的IP與MAC地址,從而大幅提高網絡故障排查的效率。無論是新接入的設備,還是網絡中的老設備,都能一網打盡。
通過Python腳本結合ping命令和arp命令,我們能夠實現以下目標:
- 快速檢測存活設備:通過對IP段進行批量掃描,快速識別哪些設備處于在線狀態。
- 精準獲取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地址。無論是為了提升網絡管理效率,還是應對突發的網絡故障,快速掃描工具都將是IT運維人員的重要助手。