python获取目标主机的MAC地址

下载插件:WinPcap · Download

下载后直接安装(虽然已停止更新,但还能正常使用)

 

 python代码:安装 scapy

from scapy.all import Ether, ARP, srp


def get_mac_address(ip):
    # 创建一个ARP请求数据包
    arp = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(op=1, pdst=ip)

    # 发送ARP请求并接收响应数据包
    result, _ = srp(arp, timeout=2, verbose=False)

    # 从响应数据包中获取目标主机的MAC地址
    if result:
        return result[0][1][Ether].src
    else:
        return None


# 示例用法
target_ip = "192.168.0.1"
mac_address = get_mac_address(target_ip)

if mac_address:
    print(f"目标主机 {target_ip} 的MAC地址为:{mac_address}")
else:
    print(f"无法获取目标主机 {target_ip} 的MAC地址")

会有两个异常提示:【不影响运行】

1、在 'all.py' 中找不到引用 'Ether

2、在 'all.py' 中找不到引用 'ARP' 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python中的`scapy`库实现获取同一区域网内所有IP、MAC地址主机名称、工作组、网卡厂商的功能。具体步骤如下: 1. 安装`scapy`库 在命令行中输入以下命令安装`scapy`库: ``` pip install scapy ``` 2. 构建ARP请求包 在同一区域网内获取主机信息,可以使用ARP协议实现。构建ARP请求包,发送到广播地址,等待主机响应,获取主机信息。 ```python from scapy.all import ARP, Ether, srp # 构建ARP请求包 arp = ARP(pdst='192.168.1.0/24') ether = Ether(dst='ff:ff:ff:ff:ff:ff') packet = ether/arp # 发送ARP请求包,获取响应 result = srp(packet, timeout=3, verbose=0)[0] ``` 其中,`pdst`参数指定要扫描的IP地址范围,`dst`参数指定目标MAC地址为广播地址,`timeout`参数指定等待响应时间。 3. 解析响应数据 解析响应数据,获取主机的IP地址、MAC地址主机名、工作组、网卡厂商等信息。可以使用`socket`库中的`getfqdn`函数获取主机名,使用`nmap`库获取工作组和网卡厂商。 ```python import socket import nmap # 解析响应数据 devices = [] for sent, received in result: devices.append({'ip': received.psrc, 'mac': received.hwsrc}) # 获取主机名 for device in devices: try: device['hostname'] = socket.getfqdn(device['ip']) except: device['hostname'] = 'unknown' # 获取工作组和网卡厂商 nm = nmap.PortScanner() for device in devices: try: info = nm.scan(hosts=device['ip'], arguments='-O')['scan'][device['ip']] device['os'] = info['osmatch'][0]['name'] device['vendor'] = info['osmatch'][0]['osclass'][0]['vendor'] except: device['os'] = 'unknown' device['vendor'] = 'unknown' ``` 4. 导出文件 将获取到的主机信息导出到文件中,可以使用`csv`库实现。 ```python import csv # 导出文件 with open('devices.csv', 'w', newline='') as file: writer = csv.writer(file) writer.writerow(['IP', 'MAC', 'Hostname', 'Workgroup', 'Vendor']) for device in devices: writer.writerow([device['ip'], device['mac'], device['hostname'], device['os'], device['vendor']]) ``` 以上代码实现了获取同一区域网内所有IP、MAC地址主机名称、工作组、网卡厂商,并将结果导出到文件中的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值