用python扫描网内所有电脑并返回它们的IP与MAC

'''子网掩码是255.255.252.0,
用python扫描网内所有电脑并返回它们的IP与MAC

要使用 Python 扫描子网内的所有电脑并返回它们的 IP 和 MAC,
需要使用 socket 和 scapy 库进行操作。

请参考下面的代码,其中包含要执行的基本步骤:'''
'''以下这个winpcap如果没装的话,运行会出现如下错误,先装一下:
RuntimeError: Sniffing and sending packets is not available at layer 2: 
winpcap is not installed. 
You may use conf.L3socket orconf.L3socket6 to access layer 3

winpcap简介:
winpcap(windows packet capture)是windows平台下一个免费,
公共的网络访问系统。
开发winpcap这个项目的目的在于为win32应用程序提供访问网络
底层的能力。它用于windows系统下的直接的网络编程。
反正就是说你想抓包,先安装这个才行
下载地址:
http://soft.onlinedown.net/soft/2685.htm
解压后直接安装即可,问题解决。'''

'''安装 scapy 库
pip install scapy
您还可以安装特定版本的库,例如:
pip install scapy==2.4.5
注意:这个命令可能需要使用管理员权限运行。
安装完成后,您可以在 Python 中使用以下导入语句导入库:
import socket
from scapy.all import ARP, Ether, srp
'''

import socket
from scapy.all import srp
from scapy.layers.l2 import ARP,Ether
#ARP和Ether要在scapy.layers.l2中引用,不能在scapy.all中引用

# 初始化目标 IP 和子网掩码
目标IP = "192.168.1.0/22"
#IP 地址 192.168.1.0/22 的范围是
# 从 IP 地址 192.168.0.0 到 192.168.3.255,
# 共包含 1022 个可用的 IP 地址。

# 创建 ARP 请求包
arp = ARP(pdst=目标IP)
#ARP是地址解析协议,它是一种将IP地址转换成物理地址的协议。
# ARP协议运行在IP层,
# 它的工作是将网络接口上存储的IP地址转换成对应的物理地址。
以太网 = Ether(dst="ff:ff:ff:ff:ff:ff")
数据包 = 以太网/arp

# 发送请求包并解析响应
结果, _ = srp(数据包, timeout=3, verbose=0)

# 将响应数据处理成字典形式
电脑列表 = []
for sent, received in 结果:
    电脑列表.append({'ip': received.psrc, 'mac': received.hwsrc})

# 打印出子网内的所有计算机的 IP 和 MAC 地址列表
for 电脑 in 电脑列表:
    print(f"IP地址:{电脑['ip']} | MAC地址:{电脑['mac']}")

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
可以使用Python中的`scapy`库实现获取同一区域网内所有IPMAC地址、主机名称、工作组、网卡厂商的功能。具体步骤如下: 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']]) ``` 以上代码实现了获取同一区域网内所有IPMAC地址、主机名称、工作组、网卡厂商,并将结果导出到文件中的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

将出东方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值