Python一键提取局域网在线IP和对应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
ip_mac_list = []
for i in ip_mac:
ip_mac_dict = {'ip': re.findall(r'(\d+\.){3}\d+', i),
'mac': re.findall(r'(({2}-){5}{2})', i)}
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()) C:\Python38\python.exe D:/python/测试/不保存222.py
Traceback (most recent call last):
File "D:/python/测试/不保存222.py", line 38, in <module>
print(get_ip())
File "D:/python/测试/不保存222.py", line 21, in get_ip
ip_mac_list = get_ip_mac()
File "D:/python/测试/不保存222.py", line 13, in get_ip_mac
ip_mac_dict = {'ip': re.findall(r'(\d+\.){3}\d+', i),
IndexError: list index out of range
进程已结束,退出代码为 1
自从有了chatgpt,写代码方便了好多,直接说需求就行了{:1_918:} PS D:\Documents\mine> python .\Ip.py
['100.', '100.', '100.', '100.', '100.', '100.', '100.', '0.', '0.', '0.', '255.', '255.']
['74-05-a5-53-7c-34', 'd4-5d-64-06-3a-d2', '3c-7c-3f-2b-db-4d', '78-24-af-d9-2a-83', '40-b0-76-46-cc-ca', 'd4-5d-64-06-3c-5b', 'ff-ff-ff-ff-ff-ff', '01-00-5e-00-00-16', '01-00-5e-00-00-fb', '01-00-5e-00-00-fc', '01-00-5e-7f-ff-fa', 'ff-ff-ff-ff-ff-ff']
PS D:\Documents\mine> import subprocess
import re
def get_ip_mac():
result = subprocess.run(['arp', '-a'], capture_output=True, text=True)
arp_output = result.stdout.splitlines()
ip_mac_list = []
for line in arp_output:
ip = re.findall(r'(\d+\.\d+\.\d+\.\d+)', line)
mac = re.findall(r'({2}-){5}{2}', line)
ip_mac_list.append({'ip': ip, 'mac': mac})
return ip_mac_list
def get_ip():
ip_mac_list = get_ip_mac()
ip_list = for entry in ip_mac_list]
return ip_list
def get_mac():
ip_mac_list = get_ip_mac()
mac_list = for entry in ip_mac_list]
return mac_list
if __name__ == '__main__':
print(get_ip())
print(get_mac()) 似乎有点儿问题?不太对,另外楼主开头的第一行的`第一种代码`注释一下或者删掉~哈哈
#### 执行结果
执行结果好像没一个对的QAQ
```json
['31.', '31.', '31.', '31.', '31.', '0.', '0.', '0.', '255.', '255.']
['64-64-4a-ad-c8-98', '90-78-41-8d-77-dc', '7c-fd-6b-02-c6-6a', '64-9e-31-bc-e8-c5', 'ff-ff-ff-ff-ff-ff', '01-00-5e-00-00-16', '01-00-5e-00-00-fb', '01-00-5e-00-00-fc', '01-00-5e-7f-ff-fa', 'ff-ff-ff-ff-ff-ff']
``` 如果不列出本机的IP和MAC,还代码可以简单一些import os
def lan_ip_mac():
output = os.popen('arp -a')
return [ for i in output if '动态' in i for ip, mac, _ in ]
本帖最后由 anwen 于 2023-7-20 16:37 编辑
wkdxz 发表于 2023-7-20 16:31
如果不列出本机的IP和MAC,还代码可以简单一些import os
能获取本机ipv6的么?这个好像只有ipv4~
我把v6开通了,但是v6是会变化的,可以设置一个脚本定时推送到各种接收消息的软件上面
定时执行,这样妈妈再也不用担心在外面的时候访问不了家里啦~
```json
192.168.31.1 64-64-4a-ad-c8-98
192.168.31.14 90-78-41-8d-77-dc
192.168.31.65 7c-fd-6b-02-c6-6a
192.168.31.159 64-9e-31-bc-e8-c5
``` 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
ip_mac_list = []
for i in ip_mac:
ip = re.findall(r'(\d+\.\d+\.\d+\.\d+)', i)
mac = re.findall(r'({2}[:-]){5}{2}', i)
if ip and mac:
ip_mac_dict = {'ip': ip, 'mac': mac}
ip_mac_list.append(ip_mac_dict)
return ip_mac_list
# 保存IP和对应MAC地址到txt文件
def save_ip_mac_to_txt(filename):
ip_mac_list = get_ip_mac()
with open(filename, 'w') as file:
for entry in ip_mac_list:
file.write(f"IP: {entry['ip']} - MAC: {entry['mac']}\n")
if __name__ == '__main__':
save_ip_mac_to_txt('ip_mac_addresses.txt') arp -a的命令我记得并不能显示全部在线的ip。
我还以为是用ping之类的命令去遍历ip
页:
[1]
2