让网络管理更高效!快速扫描局域网,实时获取 IP 与 MAC 地址

网络
面对公司内部错综复杂的网络架构,如何迅速定位问题设备,并找到其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运维人员的重要助手。

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2009-08-08 22:10:29

IP地址的分配局域网设置

2009-02-24 09:41:00

局域网共享上网效率

2013-07-23 17:30:24

局域网监控

2010-12-23 15:55:00

上网行为管理

2009-10-20 20:04:29

GLBP

2018-05-08 14:58:07

戴尔

2009-01-20 10:51:00

局域网IP地址分配

2010-09-27 10:00:18

无线局域网

2010-01-22 15:59:19

2009-06-29 09:47:00

局域网IP地址划分

2009-02-19 17:24:18

2013-07-26 16:22:40

网络人局域网监控软件

2010-12-15 14:14:57

2011-07-28 20:36:12

2010-10-08 15:15:30

2010-09-14 10:31:16

无线局域网设置

2010-09-16 14:14:50

2023-09-07 23:59:44

网络Kubernetes局域网

2011-07-21 13:52:43

组策略网络打印机

2009-01-15 09:57:00

点赞
收藏

51CTO技术栈公众号