Python 从IP地址获取MAC地址

Python 从IP地址获取MAC地址,python,python-3.x,mac-address,Python,Python 3.x,Mac Address,我正在学习Python3.6.4,我正在尝试让这段代码正常工作 我的局域网上有一个ip地址列表,我需要获取列表中每个ip的相关mac地址 运行代码时,出现以下错误: ip地址作为字节=str.encodeip地址类型错误:描述符 “encode”需要一个“str”对象,但收到一个“list” 我不知道如何将单个列表项转换为字节 import subprocess import re def get_mac_addresses(ip_addresses): for ip

我正在学习Python3.6.4,我正在尝试让这段代码正常工作

我的局域网上有一个ip地址列表,我需要获取列表中每个ip的相关mac地址

运行代码时,出现以下错误:

ip地址作为字节=str.encodeip地址类型错误:描述符 “encode”需要一个“str”对象,但收到一个“list”

我不知道如何将单个列表项转换为字节

import subprocess
import re

def get_mac_addresses(ip_addresses):

            for ip_address in ip_addresses:
                subprocess.Popen(["ping", "-c 1", ip_address], stdout=subprocess.PIPE)

            proc = subprocess.Popen("arp -a", stdout=subprocess.PIPE)

            data = proc.communicate()[0]

            results = []

            ip_address_as_bytes = str.encode(ip_address)
            type(ip_address_as_bytes)  # ensure it is byte representation

            ip_addresses_as_bytes = str.encode(ip_addresses)
            type(ip_addresses_as_bytes)

            for ip_address_as_bytes in ip_addresses_as_bytes[:]:
                if ip_address_as_bytes in data:

                    ip_data = data[data.find(ip_address_as_bytes):]

                    mac = re.search(r"(([a-f\d]{1,2}:){5}[a-f\d]{1,2})", ip_data)

                    if mac is None:
                        mac = re.search(r"(([a-f\d]{1,2}-){5}[a-f\d]{1,2})", ip_data)

                    if mac is not None:
                        mac = mac.groups()[0].replace('-', ':').upper()

                    else:
                        mac = '00:00:00:00:00:00'

                    ip_addresses = ip_addresses_as_bytes.decode()
                    type(ip_addresses)  # ensure it is string representation

                    ip_address = ip_address_as_bytes.decode()
                    type(ip_address)  # ensure it is string representation

                    ip_addresses.remove(ip_address)

                    results += [[ip_address, mac]]

                return results
谢谢你的帮助

谢谢

您的问题在于:

ip_addresses_as_bytes = str.encode(ip_addresses)
ip_地址是一个列表,encode需要一个字符串

使用循环:

ip_addresses_as_bytes = []
for ip_addresse in ip_addresses:
    ip_addresses_as_bytes.append(str.encode(ip_addresses))

您在IP地址列表中被传递,但只需要传递一个。使用ip_地址[0]传递第一个地址,或者如果希望对每个地址进行编码,请使用循环。如果不想解析这些复杂的输出,请尝试: