基于Python编写一个简单的端口扫描器

下面是基于Python编写一个简单的端口扫描器的攻略:

1. 确定需要扫描的IP地址和端口范围

首先,需要确定需要扫描的IP地址和端口范围。IP地址可以是单个目标IP,也可以是一段IP地址范围。端口范围可以是单个端口,也可以是一段端口范围。这个过程可以手动输入,也可以从命令行参数读取。例如:

python scan.py -t 192.168.1.1-192.168.1.255 -p 22,80,443-445

2. 编写端口扫描函数

然后,需要编写一个函数,用于扫描指定IP地址上的指定端口,判断端口是否开放。这个函数可以使用socket库来实现,具体代码如下:

import socket

def scan_port(ip, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(1)
    result = sock.connect_ex((ip, port))
    sock.close()
    if result == 0:
        return True
    else:
        return False

3. 循环扫描端口

接下来,需要循环扫描指定IP地址上的指定端口范围。这个过程可以使用两重循环来实现。例如:

import argparse

def main(target, port_range):
    for ip in ip_range(target):
        for port in port_range:
            if scan_port(ip, port):
                print('Port {} is open on {}'.format(port, ip))

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='A simple port scanner written in Python')
    parser.add_argument('-t', '--target', type=str, help='The target IP address range')
    parser.add_argument('-p', '--port', type=str, help='The port range')
    args = parser.parse_args()
    target = args.target
    port = args.port
    port_range = parse_port_range(port)
    main(target, port_range)

其中,ip_range和parse_port_range是两个辅助函数,用于生成IP地址范围和端口范围。这些函数的具体实现可以参考下面的示例代码。

示例代码

完整的端口扫描器的示例代码如下:

import socket
import argparse
import ipaddress

def scan_port(ip, port):
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(1)
    result = sock.connect_ex((ip, port))
    sock.close()
    if result == 0:
        return True
    else:
        return False

def ip_range(target):
    if '-' in target:
        start, end = target.split('-')
        return [str(ip) for ip in ipaddress.IPv4Range(start, end)]
    else:
        return [target]

def parse_port_range(port):
    port_range = []
    for p in port.split(','):
        if '-' in p:
            start, end = p.split('-')
            port_range.extend(range(int(start), int(end) + 1))
        else:
            port_range.append(int(p))
    return port_range

def main(target, port_range):
    for ip in ip_range(target):
        for port in port_range:
            if scan_port(ip, port):
                print('Port {} is open on {}'.format(port, ip))

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='A simple port scanner written in Python')
    parser.add_argument('-t', '--target', type=str, help='The target IP address range')
    parser.add_argument('-p', '--port', type=str, help='The port range')
    args = parser.parse_args()
    target = args.target
    port = args.port
    port_range = parse_port_range(port)
    main(target, port_range)

假设需要扫描IP地址范围为192.168.1.1-192.168.1.5的端口21和22,可以执行以下命令:

python scan.py -t 192.168.1.1-192.168.1.5 -p 21,22

输出结果如下:

Port 22 is open on 192.168.1.1
Port 22 is open on 192.168.1.2
Port 22 is open on 192.168.1.3
Port 22 is open on 192.168.1.4

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Python编写一个简单的端口扫描器 - Python技术站

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

相关文章

  • 详解Python中 sys.argv[]的用法简明解释

    下面是详解Python中sys.argv[]的用法简明解释的完整攻略。 什么是sys.argv? sys.argv是Python中的一个内置模块,用于接受命令行参数。这个模块提供了一个可以访问命令行参数的列表,以及一些跟运行环境有关的变量参数。 sys.argv[]的用法 sys.argv[]是一个包含在sys模块中的列表,用于获取命令行参数。sys.arg…

    python 2023年6月2日
    00
  • 利用Python发送 10 万个 http 请求

    以下是Python发送10万个http请求的攻略,具体分为以下几个步骤: 1. 安装必要的库 使用Python发送http请求需要用到requests库,可通过以下命令安装: pip install requests 2. 编写发送请求的Python脚本 按照以下格式编写Python脚本: import requests # 设置要发送请求的url url …

    python 2023年5月19日
    00
  • Python基础学习之反射机制详解

    Python基础学习之反射机制详解 1. 反射机制的概念 在Python中,反射机制指的是在运行时(runtime)动态地访问、检查、修改程序对象的能力。具体来说,可以通过字符串形式的对象名来访问对象的属性、方法,或者通过属性名、方法名来访问属性、方法。 2. 反射机制的应用 2.1 动态导入模块 Python中的import语句可以在程序运行时动态地导入模…

    python 2023年6月3日
    00
  • Python面向对象编程之类的继承

    Python面向对象编程之类的继承 什么是类和对象 在Python中,我们可以通过定义类(class)和创建对象(object)来完成面向对象的编程。类是一种抽象的概念,它是对具有相同属性和方法的对象进行封装和抽象后得到的结果。对象则是类的一个具体实例,有着自己的属性和方法。 什么是继承 继承是指在现有的类的基础上创建新的类,新的类拥有原有类的属性和方法。子…

    python 2023年6月6日
    00
  • python数组和矩阵的用法解读

    Python数组和矩阵的用法解读 Python中,数组和矩阵是常用的数据类型。本文将从定义、创建、修改、访问和操作等几个方面,对数组和矩阵的用法进行详细讲解。 定义 数组和矩阵是由相同类型元素构成的多维数据结构。 数组 在Python中,数组通常指的是Numpy中的array。其定义方式如下: import numpy as np arr = np.arra…

    python 2023年6月5日
    00
  • 详解Python单元测试的两种写法

    详解Python单元测试的两种写法 单元测试是软件开发中的一项重要实践,它可以帮助开发人员在编写过程中及时发现和修复问题,提高代码质量和可维护性。作为一种流行的编程语言,Python也提供了丰富的单元测试框架和工具。本文将介绍Python单元测试的两种常见写法并提供示例说明。 1. unittest模块 unittest是Python自带的单元测试框架,它提…

    python 2023年5月13日
    00
  • Python OpenCV实现姿态识别的详细代码

    让我们来详细讲解一下Python OpenCV实现姿态识别的详细代码攻略。 一、简介 Python OpenCV是一种基于Python编程语言和OpenCV计算机视觉库的姿态识别方法。它可以用于检测人脸姿态、特定物品的位置和方向等。在本攻略中,我将介绍如何使用Python OpenCV实现姿态识别,包括识别姿态的步骤和实现姿态识别的详细代码。 二、步骤 1.…

    python 2023年5月18日
    00
  • Python xlwt模块使用代码实例

    Pythonxlwt模块是python中处理Excel文件的常用库之一,它提供了创建、读取、修改Excel文件的方法。下面将介绍Pythonxlwt模块的使用代码实例。 安装Pythonxlwt模块 在使用Pythonxlwt模块之前,需要先安装该模块。使用pip install xlwt命令即可完成安装,具体操作方法如下: pip install xlwt…

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