局域网IP搜索小工具

  对于需要经常组建局域网的人来说,获取每台设备的IP地址是必须的。但是有的时候你是没有办法获取到网关设备的管理权限的,如果是有显示屏的设备还好说,直接本地查看IP地址就好了。一旦没有显示屏,一切就会显得有些麻烦,这时恐怕只能提前设置固定IP了。这就是我写这个Python小工具的原因啦。

  其实这个小工具的开发原理非常简单,仅仅只是利用了一下arp列表,如果你懂arp指令的话,直接命令行操作就能解决问题了٩(ˊᗜˋ*)و。

  • 工具首先会利用 ‘arp -d’ 清除一下arp列表,这时需要管理员权限;
  • 然后循环ping所有网段中的IP,重建arp列表;
  • 最后利用正则表达式匹配MAC地址,获取对应的IP地址。

  使用的时候直接运行.exe文件就好了,完全绿色无污染~ 工程文件和exe执行档我都上传到我的GitHub(GodenX)了。

下面贴一下Python源码:
#!/usr/bin/python3
# -*- coding:utf-8 -*-
# Time    : 2019/2/16 8:59
# @Author : Jackie Yang
# File    : Search_all_IP_in_LAN.py
# Project : Search_all_IP_in_LAN
# Version : v0.1

from progressbar import *
import os
import re
import time


def arp_del():
    with open("./temp.bat", "w", newline='') as bat:
        bat.write(
            '''@echo off\r\n%1 %2\r\nver|find "5.">nul&&goto :st\r\nmshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :st","","runas",1)(window.close)&goto :eof\r\n:st\r\ncopy "%~0" "%windir%\system32\\"\r\narp -d''')
    os.system('cmd.exe /c ' + os.path.dirname(os.path.abspath(__file__)) + r'\temp.bat')
    os.remove('temp.bat')


def run():
    arp_del()
    # noinspection PyBroadException
    try:
        var = os.popen("arp -a").read()
        ip_address = re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", var, flags=0).group()
        print("本机IP: ", ip_address)
        var = ip_address.split(".")
        ip = var[0] + "." + var[1] + "." + var[2] + "."
    except Exception as e:
        print(e)
        return
    # noinspection PyBroadException
    try:
        mac = input("请输入MAC地址(以‘-’间隔):").lower()
        mac = re.search(r"[a-zA-Z0-9]{1,2}\-[a-zA-Z0-9]{1,2}\-[a-zA-Z0-9]{1,2}\-"
                        r"[a-zA-Z0-9]{1,2}\-[a-zA-Z0-9]{1,2}\-[a-zA-Z0-9]{1,2}", mac, flags=0).group()
    except Exception as e:
        print("输入错误!")
        return
    print("MAC: %s" % mac)
    progress = ProgressBar()
    for i in progress(range(1, 256)):
        os.popen("ping -n 1 " + ip + str(i))
        time.sleep(0.01)
    var = os.popen("arp -a").read()
    l = var.split(" ")
    for i in range(len(l)):
        if l[i] == mac:
            for j in range(1, 20):
                if l[i - j] != "":
                    print("IP地址:", l[i - j])
                    break
            break
    else:
        print("MAC不在局域网中!")


if __name__ == "__main__":
    try:
        run()
    except Exception as e:
        print(e)
    finally:
        input("输入 Enter 退出")

  其实这个小脚本还有一个需要改进的地方,不知道是Pyinstaller的原因还是什么其他原因,我利用了Windows自带的库并没有能够获取到管理员权限。我仅仅只是使用了一个折中的办法,利用Python脚本生成了一个temp.bat批处理文件,在这个文件中申请管理员权限,在运行完后再删除它。如果有朋友能够帮忙解决一下,欢迎博客下留言或者直接GitHub留言,谢谢!

Enjoy it!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
局域网跨网段IP搜索是指在一个局域网中,搜索其他网段的IP地址的过程。在进行跨网段IP搜索前,需要了解局域网的网络拓扑结构,包括各个网段的IP地址范围以及子网掩码。 首先,要实现跨网段IP搜索,需要一个控制台或者服务器作为搜索发起方,该控制台或服务器需要处于局域网中并且具有网络访问权限。其次,搜索发起方需要通过IP扫描工具或者编程语言(如Python的scapy库)来实现IP搜索功能。 具体操作如下: 1. 确定目标网段的IP地址范围和子网掩码,例如192.168.0.0/24表示192.168.0.0网段的所有IP地址。 2. 设置搜索发起方的IP地址,确保其在同一局域网中,并且与目标网段不冲突。 3. 使用IP扫描工具或编程语言的API,设置搜索发起方的IP地址范围,并设置超时时间。 4. 发起搜索请求,工具会依次扫描每个IP地址,并且发送探测数据包到目标网段中的每个IP地址。 5. 目标网段中,接收到探测数据包的主机会进行响应,并将响应报文返回到搜索发起方。搜索发起方根据接收到的响应判断目标主机是否在线。 6. 搜索发起方将在线的主机IP地址记录下来,并且可以进一步对其进行端口扫描、服务探测等操作。 需要注意的是,进行跨网段IP搜索可能需要一些时间,并且需要注意不要对网络造成干扰。此外,为了确保搜索的准确性和有效性,建议在进行跨网段IP搜索之前,事先和网络管理员或相关部门沟通并获得授权。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值