这段代码用于获取局域网内在线设备的IP地址和MAC地址,并分别将其存储在IP列表和MAC列表中。通过调用get_ip()
函数可以获取IP列表,通过调用get_mac()
函数可以获取MAC列表。以下是代码的解释和完整版本:
import os
import re
# 获取局域网在线IP和对应Mac地址
def get_ip_mac():
ip_mac = os.popen('arp -a')
ip_mac = ip_mac.read()
ip_mac = ip_mac.split('\n')
ip_mac = ip_mac[3:-1]
ip_mac_list = []
for i in ip_mac:
ip_mac_dict = {'ip': re.findall(r'(\d+\.){3}\d+', i)[0],
'mac': re.findall(r'(([0-9a-fA-F]{2}-){5}[0-9a-fA-F]{2})', i)[0][0]}
ip_mac_list.append(ip_mac_dict)
return ip_mac_list
# 获取局域网在线IP
def get_ip():
ip_mac_list = get_ip_mac()
ip_list = []
for i in ip_mac_list:
ip_list.append(i['ip'])
return ip_list
# 获取局域网在线Mac地址
def get_mac():
ip_mac_list = get_ip_mac()
mac_list = []
for i in ip_mac_list:
mac_list.append(i['mac'])
return mac_list
if __name__ == '__main__':
print(get_ip())
print(get_mac())
解释和注意事项:
- 代码中使用了
os.popen('arp -a')
来执行arp -a
命令,该命令用于查看局域网内的ARP缓存表,从而获取局域网中在线设备的IP和MAC地址。这种方法仅适用于Windows系统。 - 正则表达式用于从命令输出中提取IP和MAC地址。
re.findall(r'(\d+\.){3}\d+', i)[0]
用于提取IP地址,re.findall(r'(([0-9a-fA-F]{2}-){5}[0-9a-fA-F]{2})', i)[0][0]
用于提取MAC地址。 ip_mac_list
列表存储每个设备的IP和MAC信息,最终get_ip()
和get_mac()
函数分别提取IP列表和MAC列表。- 代码适用于获取局域网中在线设备的IP和MAC信息,但请注意在实际使用时,一些设备可能因为安全策略或网络配置的不同,可能无法被正常获取。
- 请确保你的使用行为是合法合规的,并且仅在你有权限和合法目的下使用该代码。
评论前必须登录!
注册