使用PYTHON 获取同一区域网内所有IP、MAC地址、主机名称、工作组、网卡厂商,并导出文件
时间: 2023-07-10 18:26:25 浏览: 276
可以使用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地址、主机名称、工作组、网卡厂商,并将结果导出到文件中的功能。
阅读全文