Python实现扫描局域网活动ip(扫描在线电脑)

yizhihongxing

Python实现扫描局域网活动ip(扫描在线电脑)攻略

一、实现原理

我们可以通过ping指令或UDP广播的方式来探测局域网内的主机,若存在回复则代表主机在线,反之则不在线。具体实现上我们可以使用Python编写脚本,通过Python的socket库来实现基于UDP协议的主机广播扫描,或使用Python内置的subprocess库来调用系统命令执行ping操作。

二、代码实现

1. UDP广播扫描

我们可以使用Python的socket库来实现UDP广播扫描,示例代码如下:

import socket

def broadcast_scan(ip_prefix, port):
    """
    UDP广播扫描在线主机
    """
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    udp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    udp_socket.bind(("", port))
    online_ips = []
    for i in range(1, 255):
        address = ip_prefix + str(i)
        udp_socket.sendto("ping".encode("utf-8"), (address, port))
        udp_socket.settimeout(0.1)
        try:
            data, addr = udp_socket.recvfrom(1024)
            if addr[0] not in online_ips:
                online_ips.append(addr[0])
                print("IP地址为 %s 的主机在线!" % addr[0])
        except socket.timeout:
            pass
    udp_socket.close()
    return online_ips

if __name__ == '__main__':
    ip_prefix = "192.168.1."
    port = 8080
    online_ips = broadcast_scan(ip_prefix, port)
    print("在线主机数量为: %d" % len(online_ips))

在上述代码中,我们使用了Python的socket库实现了UDP广播扫描的功能。具体流程如下:

  1. 创建一个UDP socket对象,并将其设置为广播模式(设置SO_BROADCAST标志位为1);

  2. 绑定端口号,侦听网络端口;

  3. 循环遍历目标局域网所有IP地址,通过调用UDP socket的sendto方法,将"ping"数据包发送给目标IP地址;

  4. 接收来自各主机的回应,查看是否为"ping"数据包,并将其IP地址记录到online_ips列表中。

这样,我们便可以很方便地实现UDP广播扫描功能,从而快速扫描到目标网络上的所有在线主机IP地址。

2. ping扫描

除了UDP广播扫描,我们还可以使用Python的subprocess库调用系统命令来执行ping操作。示例代码如下:

import subprocess

def ping_scan(ip_prefix):
    """
    使用ping命令扫描在线主机
    """
    online_ips = []
    for i in range(1, 255):
        address = ip_prefix + str(i)
        ret = subprocess.call(["ping", "-n", "1", "-w", "10", address])
        if ret == 0:
            online_ips.append(address)
            print("IP地址为 %s 的主机在线!" % address)
    return online_ips

if __name__ == '__main__':
    ip_prefix = "192.168.1."
    online_ips = ping_scan(ip_prefix)
    print("在线主机数量为:%d" % len(online_ips))

在上述代码中,我们使用了Python的subprocess库来调用系统的ping命令来执行ping扫描操作。具体流程如下:

  1. 循环遍历目标局域网所有IP地址,通过调用subprocess库中的call方法执行ping指令,并指定参数:"-n 1"表示仅发送1个请求;"-w 10"表示等待最长10ms的回应;

  2. 根据返回码判断目标主机是否在线。

这样,我们便可以使用Python快速实现简单的ping扫描功能。

三、示例说明

示例1:使用UDP广播扫描判断目标网络内所有在线设备

if __name__ == '__main__':
    ip_prefix = "192.168.1."
    port = 8080
    online_ips = broadcast_scan(ip_prefix, port)
    print("在线主机数量为: %d" % len(online_ips))

在上述示例中,我们指定了目标局域网的IP地址前缀和端口号,即192.168.1.xxx,同时扫描端口为8080的主机,并通过UDP广播的方式将"ping"数据包发送给目标主机,从而判断主机是否在线。最终,我们会得到该网络上所有在线设备的IP地址列表,以及在线设备的数量。

示例2:使用ping扫描判断目标网络内所有在线设备

if __name__ == '__main__':
    ip_prefix = "192.168.1."
    online_ips = ping_scan(ip_prefix)
    print("在线主机数量为:%d" % len(online_ips))

在上述示例中,我们同样指定了目标局域网的IP地址前缀,即192.168.1.xxx,并通过调用系统的ping命令来执行ping扫描操作,从而判断主机是否在线。最终,我们会得到该网络上所有在线设备的IP地址列表,以及在线设备的数量。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现扫描局域网活动ip(扫描在线电脑) - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • 如何使用Python在MySQL中使用行级锁?

    在MySQL中,行级锁是一种用于控制并发访问的机制,它可以确保多个用户同时访问同一行时不会发生冲突。在Python中,可以使用MySQL连接来执行行级锁查询。以下是在Python使用行级锁的完整攻略,包括行级锁的基本语法、使用行级锁的例以及如何在Python中使用行。 行级锁的基本语法 在MySQL中,可以使用SELECT语句来获取行级锁。以下是行级锁的基语…

    python 2023年5月12日
    00
  • Python八皇后问题解答过程详解

    当我看到你的问题时,我想到了一个非常有趣也非常经典的算法问题–八皇后问题。这个问题是把8个皇后放在8×8的棋盘上,使得每个皇后都不会互相攻击。这是一个经典的递归算法问题,Python的优雅语法和解决问题的多种方式使其成为解决八皇后问题的理想选择。 下面我将提供一些关于如何通过Python解决八皇后问题的完整攻略: 1. 定义函数 首先,定义一个函数来实现八…

    python 2023年5月14日
    00
  • python实现的登录与提交表单数据功能示例

    Python实现的登录与提交表单数据功能是Web开发中常见的需求,本文将介绍两个示例,演示如何使用Python实现登录和提交表单数据。 1. 使用requests库实现登录和提交表单数据 我们可以使用requests库实现登录和提交表单数据。以下是一个示例,演示如何使用requests库实现登录和提交表单数据: import requests # 登录 lo…

    python 2023年5月15日
    00
  • Python:与闭包的继承等价

    【问题标题】:Python: Equivalent of Inheritance with ClosuresPython:与闭包的继承等价 【发布时间】:2023-04-06 14:50:01 【问题描述】: 我正在尝试从 OOP 过渡到函数式编程。我有以下情况:(变量没有意义 – 它们只是示例)。 Funcs = namedtuple(‘Funcs’, (…

    Python开发 2023年4月7日
    00
  • 使用 sphinx 自动记录 python 类、模块

    【问题标题】:Using sphinx to auto-document a python class, module使用 sphinx 自动记录 python 类、模块 【发布时间】:2023-04-04 06:36:01 【问题描述】: 我已经安装了Sphinx 以记录我正在处理的一些 Python 模块和类。虽然标记语言看起来很不错,但我还没有设法自动…

    Python开发 2023年4月6日
    00
  • python中list循环语句用法实例

    Python中列表(List)的循环语句用法 Python中的列表(List)是一种常用的数据类型,可以存储多个元素。在实际开发中,我们需要对列表进行遍历操作。本文将详细讲解中列表的循环语句用法,包括for循环遍历、while循环遍历和列表推导式,并提供两个实例说明。 for循环遍历 使用for循环遍历列表常见的方法。可以使用关键字来遍历列表中的每个元素。例…

    python 2023年5月13日
    00
  • vue el-form一行里面放置多个el-form-item的实现

    Vue 的 Element-UI 库提供了许多常见的组件,例如表单组件 el-form 和其子组件 el-form-item。el-form-item是用于定义表单项的组件,一个 el-form 中可以包含多个 el-form-item。但是默认情况下,每个 el-form-item 占据了一整行,如果希望在同一行里面放置多个 el-form-item,则需…

    python 2023年6月13日
    00
  • Python3实现的爬虫爬取数据并存入mysql数据库操作示例

    Python3实现的爬虫爬取数据并存入mysql数据库操作示例 简介 本攻略展示了如何使用Python3编写一个简单的爬虫程序,抓取网页数据并将其存入MySQL数据库中。 要完成本攻略,您需要有Python3和MySQL数据库的基本知识,并安装好相应的Python库:requests、beautifulsoup4、pymysql。 前置准备 安装Python…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部