执_念 发表于 2023-7-20 15:37

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())

土鸡炖蘑菇 发表于 2023-7-20 16:16

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

bdzwater 发表于 2023-7-20 16:25

自从有了chatgpt,写代码方便了好多,直接说需求就行了{:1_918:}

gun008 发表于 2023-7-20 16:25

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>

斯文败类 发表于 2023-7-20 16:27

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())

anwen 发表于 2023-7-20 16:31

似乎有点儿问题?不太对,另外楼主开头的第一行的`第一种代码`注释一下或者删掉~哈哈

#### 执行结果
执行结果好像没一个对的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']
```

wkdxz 发表于 2023-7-20 16:31

如果不列出本机的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:36

本帖最后由 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
```

law.liu 发表于 2023-7-20 16:45

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')

li231475 发表于 2023-7-20 16:45

arp -a的命令我记得并不能显示全部在线的ip。
我还以为是用ping之类的命令去遍历ip
页: [1] 2
查看完整版本: Python一键提取局域网在线IP和对应Mac地址