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

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日

相关文章

  • 使用 XMLHttpRequest() 时如何在 python 中接收 POST 数据

    【问题标题】:How to receive POST data in python when using XMLHttpRequest()使用 XMLHttpRequest() 时如何在 python 中接收 POST 数据 【发布时间】:2023-04-07 07:10:01 【问题描述】: 我有两个关于使用 XMLHttpRequest() 时接收数据的…

    Python开发 2023年4月8日
    00
  • python装饰器简介—这一篇也许就够了(推荐)

    关于“Python装饰器简介—这一篇也许就够了(推荐)”的完整攻略,我来给您详细讲解一下。 什么是装饰器? 装饰器(decorator)是 Python 中非常强大的工具,它是一种特殊的函数,用于修改其他函数的行为。 在 Python 中,一切皆为对象,因此函数也可以看作是对象。装饰器本质上是一个 Python 函数或类,使用 Python 内置的 @ …

    python 2023年5月14日
    00
  • Python极简代码实现杨辉三角示例代码

    下面是Python极简代码实现杨辉三角的攻略。 一、杨辉三角的定义 杨辉三角,又称帕斯卡三角形,是二项式系数在三角形中的一种几何排列。它的形状像一个三角形,内容则由数字组成,数字是由它上面的两个数字相加而得出的,它最左侧和最右侧的数字都是1。 下面是一个6行的杨辉三角: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 11 5 10 10 5 1 二…

    python 2023年5月19日
    00
  • Python读取HTML中的canvas并且以图片形式存入Word文档

    在Python中,我们可以使用各种库和框架来读取HTML中的canvas并将其以图片形式存入Word文档。以下是Python读取HTML中的canvas并且以图片形式存入Word文档的完整攻略,包含两个示例。 示例1:使用selenium和Pillow库读取HTML中的canvas并以图片形式存入Word文档 以下是一个示例,可以使用selenium和Pil…

    python 2023年5月15日
    00
  • python使用cPickle模块序列化实例

    使用python内置的cPickle模块可以很方便地将python对象序列化为二进制流并存储到文件或数据库中。在需要使用这个对象时,我们可以反序列化获取原对象。本文将为大家详细讲解如何使用cPickle模块序列化实例。 1. cPickle模块序列化实例 1.1 序列化实例 在Python中,我们可以使用cPickle模块对一个类的实例进行序列化,其底层其实…

    python 2023年6月2日
    00
  • 计算机二级python学习教程(3) python语言基本数据类型

    计算机二级python学习教程(3) python语言基本数据类型 本教程将着重介绍Python语言中的基本数据类型,包括数字、字符串、布尔值、列表、元组和字典等,并且会通过简单的示例让大家更好地理解这些数据类型的使用。 数字类型 Python中的数字类型包括整数和浮点数。其中整数类型是没有小数部分的数字。在Python中,整数可以表示为十进制、二进制、八进…

    python 2023年5月20日
    00
  • 教你用Python创建微信聊天机器人

    教你用Python创建微信聊天机器人 在这篇攻略中,我们将介绍如何使用Python和itchat库来创建一个微信聊天机器人。通过这个机器人,用户可以给机器人发信息,然后机器人会根据用户的信息进行回复。 准备工作 首先,你需要安装Python和itchat库。安装Python的方法可以在Python官网https://www.python.org/上找到,而安…

    python 2023年5月23日
    00
  • 使用Python解析JSON数据的基本方法

    当使用Python解析JSON数据时,可以使用内置的json模块。下面是解析JSON数据的基本方法: 将JSON数据加载到Python中 使用json模块的load()或loads()函数可以将JSON数据加载到Python中。load()函数从文件中读取JSON数据,而loads()函数从字符串中读取JSON数据。以下是一个从字符串中加载JSON数据的示例…

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