代码语言:javascript复制
# -*- coding: utf-8 -*-
import socket
import struct
import os
def outputCmd(cmd):
r = os.popen(cmd)
text = r.read()
r.close()
return text
def getPCName(ip):
return socket.gethostbyaddr(ip)
def getIpMacList():
ipList = []
arp_cmd = "arp -a" # 列出局域网所有 ip
arp_result = outputCmd(arp_cmd)
result = arp_result.split("n")
ipInfo = []
total = len(result) - 3
for idx in range(3,len(result)):
item = {}
line = result[idx]
lineSplit = line.split(" ")
ip = ''
mac = ''
notNullCount = 0
for idx2 in lineSplit:
if idx2 != "":
notNullCount = 1
if notNullCount == 1:
ip = idx2
elif notNullCount == 2:
mac = idx2
if ip == "":
continue
if mac == "":
continue
item['ip'] = ip
item['mac'] = mac
ipList.append(item)
return ipList
if __name__ == '__main__':
ipMacList = getIpMacList()
total = len(ipMacList)
ipInfo = []
for idx in range(0,len(ipMacList)):
item = {}
ip = ipMacList[idx]['ip']
mac = ipMacList[idx]['mac']
name = ''
if ip.startswith('192') == False:
continue
try:
name = getPCName(ip)
except Exception:
pass
else:
pass
if name == "" or name is None:
continue
item['ip'] = ip
item['mac'] = mac
item['name'] = name[0]
ipInfo.append(item)
print("Getting {}/{}".format(idx,total))
print("iptmactname")
for item in ipInfo:
print("{}t{}t{}".format(item["ip"],item["mac"],item["name"]))
打印的结果
Getting 2/20 Getting 3/20 Getting 4/20 Getting 8/20 Getting 10/20 Getting 11/20 ip mac name 192.168.0.100 38-37-8b-ef-5a-ff DESKTOP-OI2H5K4 192.168.0.103 28-f0-76-15-ef-fe MACDEIMAC 192.168.0.106 64-00-6a-43-7d-bb windows10.microdone.cn 192.168.0.117 f8-bc-12-96-a1-91 xxx-PC 192.168.0.121 b0-83-fe-69-c0-f5 DESKTOP-2O8GSR9 192.168.0.127 b8-9a-2a-54-19-97 xxx-LAPTOP