Python武器库开发-武器库篇之C段扫描器开发(四十三)

2024-01-08 14:32:58

Python武器库开发-武器库篇之C段扫描器开发(四十三)

在我们进行渗透过程中的信息收集的步骤时,收集资产目标的C段也是非常重要的一部分。

C段是指互联网中的一类IP地址。IP地址是互联网上每台设备的唯一标识符。IP地址由一系列数字组成,通常以点分十进制的形式表示(例如192.168.0.1)。在IP地址中,C段是指IP地址中倒数第三个部分,范围是从0到255。C段的划分常用于网络规划和管理,以便对网络进行细分和管理。例如,一个网络可以划分为多个C段,每个C段可以表示不同的子网。

C段扫描器是一种网络安全工具,用于扫描特定IP地址段的主机,检测其开放的端口和服务。以此可以帮助系统管理员或安全专家发现网络中存在的漏洞或安全风险。

在开发C段扫描器时,可以按照以下步骤进行:

  1. 确定需求:明确开发C段扫描器的目标和功能,例如需要扫描的IP地址范围、要检测的端口和服务类型等。

  2. 设计算法:设计扫描算法,根据需求逐个扫描目标IP地址,通过发送网络请求并解析返回信息来判断目标主机的存活状态、开放的端口和服务类型。

  3. 开发网络扫描模块:使用编程语言(如Python、C++等)开发网络扫描模块,利用套接字编程等技术实现与目标主机的通信,发送网络请求并解析返回信息。

  4. 多线程处理:由于扫描大量的IP地址是一个耗时的任务,可以考虑使用多线程技术,同时处理多个IP地址的扫描请求,提高效率。

开发C段扫描器的核心思想就是去ping一下网段内存在的各个IP地址,观察返回的响应包是否有回复,如果有响应,就存在该IP地址,没有则不存在。

C段扫描器的代码部分如下:

# 导入库
import threading
from multiprocessing import Queue
from subprocess import Popen, PIPE


class CScan(threading.Thread):
    def __init__(self, queue):
        threading.Thread.__init__(self)
        self.queue = queue

    def run(self):
        """获取队列中的url"""
        while not self.queue.empty():
            ip = self.queue.get()

            try:
                """ping C段内的IP地址"""
                check_ping = Popen("ping {0} \n".format(ip), stdin=PIPE, stdout=PIPE, shell=True)
                """读取返回的响应包并赋值给data"""
                data = check_ping.stdout.read()
                """如果回复的响应包中包含TTL,则该主机在线"""
                if "TTL" in str(data):
                    if "128" in str(data):
                        print(ip + " IP存活, 目标主机系统为Windows")
                    elif "64" or "255" in str(data):
                        print(ip + " IP存活, 目标主机系统为Linux")
                else:
                    """如果回复的响应包中不包含TTL,则该主机离线或不存在"""
                    pass
            except:
                pass


def start(count):
    queue = Queue()

    for i in range(1, 255):
        """设置扫描的C段网络"""
        queue.put('192.168.0.' + str(i))

    """多线程"""
    threads = []
    thread_count = int(count)
    for i in range(thread_count):
        threads.append(CScan(queue))

    for t in threads:
        t.start()

    for t in threads:
        t.join()

    print("C段扫描完毕")


if __name__ == '__main__':
    """线程数设置"""
    count = 128
    start(count)

代码实列运行效果如下:

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_64973687/article/details/135451059
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。