Python 多线程C段扫描、检测 Ping扫描脚本的实现

实现Python多线程C段扫描和Ping扫描脚本需要以下步骤:

  1. 导入模块:需要导入threadingQueuesubprocess等模块,其中threadingQueue分别用于多线程实现和队列管理,subprocess用于执行系统命令。

  2. 编写C段扫描函数:需要传入要扫描的 IP 段作为参数。使用Queue实现队列管理,将要扫描的 IP 地址存入队列中,使用threading启动多个线程,每个线程从队列中获取 IP 地址,执行扫描操作,将扫描结果存入结果队列中。

  3. 编写 Ping 扫描函数:将需要扫描的 IP 地址放入队列中,使用threading启动多个线程,每个线程从队列中获取 IP 地址,使用subprocess模块执行 ping 命令,若结果中包含“TTL”字段,则表示扫描到的主机能够响应 ping 请求,否则主机不在线。

下面是两个示例说明:

示例一:C段扫描

使用以下代码实现 C 段扫描函数:

import queue
import threading
import subprocess

def check_ip(q, result):
    while not q.empty():
        ip = q.get()
        ret=subprocess.run(f"ping {ip} -c 1 -w 1", shell=True, stdout=subprocess.PIPE)
        if ret.returncode == 0:
            result.put(ip)
        q.task_done()

def scan_ips(ip_prefix):
    q = queue.Queue()
    result = queue.Queue()

    for i in range(1, 255):
        ip = f"{ip_prefix}.{i}"
        q.put(ip)

    threads = []
    for i in range(10):
        t = threading.Thread(target=check_ip, args=(q, result))
        threads.append(t)
        t.start()

    q.join()
    ips = []
    while not result.empty():
        ips.append(result.get())

    return ips

将需要扫描的 IP 段参数传给scan_ips函数,即可返回扫描到的开放主机列表。

示例二:Ping扫描

使用以下代码实现Ping扫描函数:

import queue
import threading
import subprocess

def ping_ip(q, result):
    while not q.empty():
        ip = q.get()
        ret=subprocess.run(f"ping {ip} -c 1 -w 1", shell=True, stdout=subprocess.PIPE)
        if "TTL" in ret.stdout.decode():
            result.put(ip)
        q.task_done()

def ping_scan_ips(ips):
    q = queue.Queue()
    result = queue.Queue()

    for ip in ips:
        q.put(ip)

    threads = []
    for i in range(10):
        t = threading.Thread(target=ping_ip, args=(q, result))
        threads.append(t)
        t.start()

    q.join()
    online_ips = []
    while not result.empty():
        online_ips.append(result.get())

    return online_ips

将需要扫描的 IP 地址传给ping_scan_ips函数,即可返回在线主机的 IP 列表。

以上就是Python多线程C段扫描和Ping扫描脚本的实现方法及示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 多线程C段扫描、检测 Ping扫描脚本的实现 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python实现自动计算特定格式的时间差

    当计算时间差需要频繁进行时,手动计算会变得繁琐和容易出错。为了方便进行时间差的计算,Python提供了实用的datetime模块。使用该模块可以轻松实现自动计算特定格式的时间差。 下面是完整攻略步骤: 1. 导入datetime模块 要使用datetime模块,必须先导入它。在Python中,使用import语句实现: import datetime 2. …

    python 2023年6月2日
    00
  • Python 常见的配置文件写法梳理汇总

    使用Markdown格式,以下是Python常见配置文件的写法梳理汇总完整攻略。 Python常见配置文件写法梳理汇总 1. INI 文件 INI 文件是最常用的配置文件之一,它通常被用于Windows操作系统的应用程序中。INI 文件本质上是一个键值对集合,由多个节组成,每个节下面可以有多个键值对。(示例代码见下) ; Python配置文件示例 [data…

    python 2023年6月3日
    00
  • Python 第三方日志框架loguru使用

    当下的 Python 日志系统很复杂,各种日志框架比比皆是。在这些框架中,Loguru 是一个功能强大且极易上手的日志框架,在使用方面非常简单。下面将介绍Loguru的优势、核心功能以及如何使用它。 Loguru 的优势 强大的配置能力 支持异常信息捕捉 附带统一格式的日志 具有极佳的性能,适用于高并发场景 安装 Loguru 终端 / 控制台:pip in…

    python 2023年5月31日
    00
  • python聚类算法选择方法实例

    Python聚类算法选择方法实例 聚类是一种无监督学习方法,它将相似的数据点分组到一起。在本攻略中,我们将介绍如何选择适合的聚类算法来处理不同类型的数据。 步骤1:了解聚类算法 在选择聚类算法之前,我们需要了解不同类型的聚类算法。在本攻略中,我们将介绍两种常见的聚类算法:K均值聚类和层次聚类。 K均值聚类 K均值聚类是一种基于距的聚类算法,它将数据点分成K个…

    python 2023年5月14日
    00
  • python代码有一行标黄问题的解决方案

    针对“python代码有一行标黄问题”的解决方案,我将按照以下步骤进行说明: 1. 问题描述 在编写Python代码时,如果出现了一行标黄,这通常意味着该行代码存在某种语法错误或问题,导致代码无法正常执行。此时我们需要针对该行代码进行调试和排查。 2. 解决方案 在解决该问题时,我们可以按照以下步骤进行: 步骤1:检查代码错误 首先,我们需要检查该行代码是否…

    python 2023年5月13日
    00
  • Python pickle类库介绍(对象序列化和反序列化)

    当我们需要在Python程序中,将一个Python对象直接持久化至磁盘中,或是从磁盘中加载一个Python对象时,我们可以使用pickle类库。其实,pickle类库实现的是Python对象的序列化和反序列化。 接下来,我们将会详细讲解pickle类库的一些相关概念、函数的基本使用方法以及示例。 1. 序列化和反序列化 所谓序列化,即是将一个Python对象…

    python 2023年6月2日
    00
  • python实现读取并显示图片的两种方法

    Python实现读取并显示图片的两种方法 在Python中,我们可以使用多种库来读取和显示图片,其中最常用的是Pillow和OpenCV库。本攻略将介绍如何使用这两个库来读取和显示图片。 方法一:使用Pillow库 Pillow是Python中最常用的图像处理库之一,它可以用于读取、处理和显示各种类型的图像。以下是一个示例代码,演示如何使用Pillow库读取…

    python 2023年5月15日
    00
  • Python查找算法之分块查找算法的实现

    Python查找算法之分块查找算法的实现 分块查找算法是一种高效的查找算法,它的基本思想是将一个大的有序数组分成若干个块,每个块内部有序,块与块之间无序。通过先在块内部进行二分查找,然后再在块之间进行查找,从而实现整个数组的查找。本文将详细讲解Python实现分块查找算法的过程,并提供两个示例说明。 分块查找算法的实现 在Python中,可以使用简单的代码实…

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