python 获取区域网内所有以太网设备IP,并写入excel
时间: 2023-08-04 17:04:29 浏览: 45
可以使用Python的`scapy`库来实现获取局域网内设备IP的功能,并使用`openpyxl`库将结果写入Excel文件中。以下是一个简单的例子:
```python
from scapy.all import ARP, Ether, srp
from openpyxl import Workbook
# 构造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]
# 解析响应,获取设备IP地址和MAC地址
devices = []
for sent, received in result:
devices.append({'ip': received.psrc, 'mac': received.hwsrc})
# 将结果写入Excel文件
wb = Workbook()
ws = wb.active
ws.append(['IP', 'MAC'])
for device in devices:
ws.append([device['ip'], device['mac']])
wb.save('devices.xlsx')
```
需要注意的是,这段代码需要以管理员权限运行才能正常工作。
相关问题
Python循环获取数据区逐行写入Excel中,并保存
你可以使用 `openpyxl` 库的 `Workbook` 和 `Worksheet` 类来创建和操作 Excel 文件。具体步骤如下:
1. 使用 `Workbook` 类创建一个新的 Excel 文件。
2. 使用 `create_sheet` 方法创建一个新的工作表。
3. 循环读取数据区的每一行,并将其逐行写入工作表中。
4. 保存 Excel 文件。
以下是示例代码:
```python
from openpyxl import Workbook
# 创建 Workbook 对象和工作表
wb = Workbook()
ws = wb.create_sheet(title='Sheet1', index=0)
# 循环读取数据区的每一行,并将其逐行写入工作表中
data = [[1, 'Alice', 25], [2, 'Bob', 30], [3, 'Cathy', 35]]
for row in data:
ws.append(row)
# 保存 Excel 文件
wb.save('example.xlsx')
```
上述代码将在 `example.xlsx` 文件的 `Sheet1` 中逐行写入三行数据。注意,使用 `append` 方法将每一行数据添加到工作表的末尾。同时,使用 `save` 方法保存 Excel 文件。
使用PYTHON 获取同一区域网内所有IP、MAC地址、主机名称、工作组、网卡厂商,并导出文件
可以使用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地址、主机名称、工作组、网卡厂商,并将结果导出到文件中的功能。