Python 批量获取局域网电脑IP、MAC和电脑名称

在局域网中,我们经常需要获取局域网中的电脑IP地址、MAC地址和电脑名称等信息。本文将介绍如何使用Python批量获取局域网中电脑的IP、MAC和电脑名称,并提供相应的代码示例。

网络基础知识

在继续之前,我们先来了解一些与网络相关的基础知识。

IP地址

IP地址是用于在网络中标识设备的一串数字,它由32位二进制数组成,通常以点分十进制的方式表示。在局域网中,每台电脑都有一个唯一的IP地址。

MAC地址

MAC地址是用于在网络中标识网卡的一串唯一的字母和数字组合。每个网络设备都有一个唯一的MAC地址。

电脑名称

电脑名称是指在局域网中标识电脑的名称。

Python中的相关模块

为了获取局域网中电脑的IP、MAC和电脑名称,我们需要使用Python的socket和subprocess模块。

socket模块

socket模块是Python中用于网络通信的核心模块,它提供了对TCP/IP协议的支持。我们可以使用socket模块来获取电脑的IP地址。

subprocess模块

subprocess模块是Python中用于创建子进程并与其进行通信的模块。我们可以使用subprocess模块来执行一些系统命令,从而获取电脑的MAC地址和电脑名称。

获取局域网中电脑的IP

我们首先来看如何使用Python获取局域网中电脑的IP地址。

import socket

def get_local_ip():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(('8.8.8.8', 80))
    ip = s.getsockname()[0]
    s.close()
    return ip

local_ip = get_local_ip()
print("本机IP地址:", local_ip)

上述代码中,我们使用了socket模块的getsockname()方法来获取本机的IP地址。首先,我们创建一个UDP socket,并使用connect()方法连接到一个外部的IP地址(这里使用了Google的公共DNS服务器)。然后,使用getsockname()[0]获取socket的本地IP地址,并关闭socket。

获取局域网中电脑的MAC地址和电脑名称

要获取局域网中电脑的MAC地址和电脑名称,我们可以使用subprocess模块执行一些系统命令。

获取MAC地址

import subprocess

def get_mac(ip):
    try:
        output = subprocess.check_output(["arp", "-a", ip])
        output = output.decode('utf-8')
        mac_start = output.find("at ") + 3
        mac_end = mac_start + 17
        mac = output[mac_start:mac_end].upper()
        return mac
    except subprocess.CalledProcessError:
        return None

ip = "192.168.0.100"
mac = get_mac(ip)
print("IP地址:", ip)
print("MAC地址:", mac)

上述代码中,我们使用了arp命令来获取指定IP地址的MAC地址。我们通过subprocess模块的check_output()方法执行arp命令,并将输出结果转换为字符串。然后,我们使用字符串操作来提取MAC地址。

获取电脑名称

def get_computer_name(ip):
    try:
        output = subprocess.check_output(["nslookup", ip])
        output = output.decode('utf-8')
        name_start = output.find("Name:    ") + 9
        name_end = output.find("\n", name_start)
        name = output[name_start:name_end]
        return name
    except subprocess.CalledProcessError:
        return None

ip = "192.168.0.100"
name = get_computer_name(ip)
print("IP地址:", ip)
print("电脑名称:", name)

上述代码中,我们使用了nslookup命令来获取指定IP地址的电脑名称。我们通过subprocess模块的check_output()方法执行nslookup命令,并将输出结果转换为字符串。然后,我们使用字符串操作来提取电