通过python 获取当前局域网内存在的IP和MAC

这篇具有很好参考价值的文章主要介绍了通过python 获取当前局域网内存在的IP和MAC。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

通过python 获取当前局域网内存在的ip文章来源地址https://www.toymoban.com/news/detail-695404.html

'''
通过ipconfig /all 命令获取局域网所在的网段
通过arp -d *命令清空当前所有的arp映射表
循环遍历当前网段所有可能的ip与其ping一遍建立arp映射表
for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.3.%i
通过arp -a命令读取缓存的映射表获取所有与本机连接的设备的Mac地址。
'''
import os
import re
import time
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED
import psutil# 逻辑cpu个数
count = psutil.cpu_count()
print("cpu个数:",str(count))
import pandas as pd
def get_net_segment():
    with os.popen("arp -a") as res:
        for line in res:
            line = line.strip()
            if line.startswith("接口"):
                net_segment = re.findall("(\d+\.\d+\.\d+)\.\d+", line)[0]
                break
        return net_segment
def ping_net_segment_all(net_segment):
    # for i in range(1, 255):
    #     os.system(f"ping -w 1 -n 1 {net_segment}.{i}")
    # 多线程并发 5个线程时耗时是30秒,8个线程是28秒
    with ThreadPoolExecutor(max_workers=4) as executor:
        for i in range(1, 255):
            executor.submit(os.popen, f"ping -w 1 -n 1 {net_segment}.{i}")
def get_arp_ip_mac():
    header = None
    list1 = []
    #os.system('arp -a > temp11.txt')
    with os.popen("arp -a") as res:
        for line in res:
            line = line.strip()         
            if not line or line.startswith("接口"):
                continue
            if header is None:                
                header = re.split(" {2,}", line.strip())
            line1 = re.split(" {2,}", line.strip())
            list1.append(line1)

    df = pd.DataFrame(list1,columns=header)
    return df
def ping_ip_list(ips, max_workers=4):
    print("正在扫描在线列表")
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        future_tasks = []
        for ip in ips:
            future_tasks.append(executor.submit(os.popen, f"ping -w 1 -n 1 {ip}"))
            wait(future_tasks, return_when=ALL_COMPLETED)
if __name__ == '__main__':
    # 是否进行初始扫描
    init_search = True #False
    if init_search:
        print("正在扫描当前网段所有ip,预计耗时1分钟....")
        ping_net_segment_all(get_net_segment())
    last = None
    while 1:
        df = get_arp_ip_mac()
        df = df.loc[df.类型 == "动态", ["Internet 地址", "物理地址"]]
        if last is None:
            print("当前在线的设备:")
            print(df)
        else:
            online = df.loc[~df.物理地址.isin(last.物理地址)]
            if online.shape[0] > 0:
                print("新上线设备:")
                print(online)
            offline = last[~last.物理地址.isin(df.物理地址)]
            if offline.shape[0] > 0:
                print("刚下线设备:")
            print(offline)
        time.sleep(5)
        ping_ip_list(df["Internet 地址"].values)
        last = df

到了这里,关于通过python 获取当前局域网内存在的IP和MAC的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows下通过hosts文件隐藏局域网IP

    局域网中,隐藏IP访问局域网网址。 1、hosts文件 位置: C:WindowsSystem32driversetc 在文件尾部,增加DNS解析,IP和网址对应 2、更新网络解析 更新网络解析: ipconfig/flushdns 3、测试解析 在局域网中,可以不用通过域名访问,隐藏了局域网IP。

    2024年02月11日
    浏览(40)
  • ESP8266 教程3 — 通过TCP组建局域网并通信

    目录 1、ESP8266 的 AP 模式 1.1、查询 ESP8266 的wifi应用模式 1.2、设置 ESP8266 模块的wifi信息 1.3、查询已经接入的设备 2、ESP8266 的Station 模式 2.1、设置ESP8266为station模式 2.2、ESP8266接入到wifi热点 2.3、ESP8266断开接入的热点 3、ESP8266 的 AP+STA 模式 4、理解 ESP8266 在局域网内的单连接通

    2024年03月22日
    浏览(52)
  • Java获取局域网中所有ip和Mac地址

    定义一个Util service调用util 返回类

    2024年02月16日
    浏览(37)
  • 【解决方法】通过二层互联实现 DHCP 环境,并使两个局域网互联

    工具:锐捷 EVE 模拟器,VMware Workstation Pro 远程工具:SecureCRT 系统版本:Windows 10 描述:在项目实施中,通常会使用二层互联的方式实现设备的DHCP环境的搭建,左边为原监控和库房网络,右边为现搭建的 WIFI 网络。 提示:若按照教程还是无法完成操作,可以进入右侧的企鹅,

    2024年02月16日
    浏览(34)
  • [路由][问题]OpenWrt解决局域网设备无法通过域名访问主机的问题

    1. 问题描述 测试发现使用OpenWrt进行端口端口转发或者Upnp之后,本地局域网设备使用域名访问主机但是却无法访问。 2. 问题分析 此问题经过查询属于\\\"NAT环回问题\\\",但是OpenWrt在做端口转发时自动设置了NAT环回,,而且已经将WAN口入站数据和转发设置为“接受”但是无效。。

    2024年02月16日
    浏览(73)
  • Xshell+Xftp通过代理的方式访问局域网内网服务器

    最近在部署项目时遇到只有1台服务器拥有公网ip,其它服务器只有局域网ip,当然其它服务器可以正常访问网络,例如如下模型。之前访问其它几台服务器,都是先通过登录公网IP服务器,然后在Xshell里面执行ssh远程连接,这种方式不够直观而且上传文件到其它服务器很繁琐,

    2024年02月03日
    浏览(57)
  • server2012 通过防火墙开启局域网内限定IP进行远程桌面连接

    我这里需要被远程桌面的电脑系统版本为windows server2012 1、打开允许远程连接设置 2、开启防火墙 3、设置允许“远程桌面应用”通过防火墙 勾选”远程桌面“ 3、入站规则设置 高级设置→入站规则→远程桌面-用户模式(TCP-In) 进入远程桌面属性的作用域——远程IP地址——添加

    2024年02月04日
    浏览(43)
  • 群晖NAS:通过SMB服务在局域网访问共享文件夹(windows、mac)

    系统介绍: 版本: DS918+ DSM:7.1(其他版本大同小异,仅供参考) 操作端:windows系统、mac 访问方式:web浏览器、网络邻居 局限:群晖nas 和 操作设备同一个局域网 安装SMB: 套件中心 - SMB Service 设置中心 - 勾选SMB win10 添加: 我的电脑 - 添加一个网络位置 复制地址 粘贴 - 下

    2024年02月13日
    浏览(152)
  • 在本地搭建WAMP服务器并通过端口实现局域网访问(无需公网IP)

    软件技术的发展日新月异,各种能方便我们生活、工作和娱乐的新软件层出不穷,但也有一些经过时间和用户考验的老牌软件屹立不倒。就一我们熟悉的网站集成环境来说,全球就有很多种server软件。每个软件都有各自的特色(虽然同质化很严重),也拥有自己固定的适用群

    2024年02月12日
    浏览(55)
  • 配置Vite获取内网IP(Vue3项目​ts版本获取本机局域网IP地址)

    参考文章:vue项目获取本机局域网IP地址(vue.config.js版本) 在Vite中,没有vue.config.js文件,而是使用vite.config.js(或vite.config.ts,如果项目使用TypeScript)来配置项目; 1.获取 IP 需要借助  os  模块,需要先安装依赖: 2.其次在vite.config.ts中引用模块  3.接着,添加一个获取本机内

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包