Python利用socket实现多进程的端口扫描器

 更新时间:2022年12月06日 14:26:12   作者:Sir 老王  
作为开发人员经常需要查看服务的端口开启状态判断服务是否宕机。特别是部署的服务比较多的情况下,可能存在几个甚至几十个服务端口的占用。所以本文将利用socket实现多进程的端口扫描器,需要的可以参考一下

作为开发人员经常需要查看服务的端口开启状态判断服务是否宕机。

特别是部署的服务比较多的情况下,可能存在几个甚至几十个服务端口的占用,于是我利用socket不断向服务发送请求的方式来判断端口服务是否已经完成开启。

其中加入多进程的调用方式来提高端口扫描的效率,供大家参考!

首先,我们将需要的python模块全部导入到我们的代码块中,若是没有安装的模块使用pip的当时安装一下即可。

# Importing the socket module.
import socket

# Importing the datetime module from the datetime package.
from datetime import datetime

# It's a shortcut for `from multiprocessing import Pool`
from multiprocessing.dummy import Pool

# It's a shortcut for `from loguru import logger`
from loguru import logger

然后,创建一个端口扫描类PortScanner来完成对整个业务逻辑的处理,另外,封装到类中也便于大家参考和修改。

class PortScanner:
    def __init__(self):
        """
        A constructor. It is called when an object is created from a class and it allows the class to initialize the
        attributes of a class.
        """
        super(PortScanner, self).__init__()
        self.remote_ip = None
        self.ports = []

    def scanner(self, port):
        """
        It scans the port.

        :param port: The port you want to scan
        """
        try:
            socket_ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            result_ = socket_.connect_ex((self.remote_ip, port))
            if result_ == 0:
                logger.info('地址:{} 端口:{} 已成功开启!'.format(self.remote_ip, port))
            else:
                logger.info('地址:{} 端口:{} 未开启!'.format(self.remote_ip, port))
        except Exception as e:
            logger.error('端口扫描出现异常!')
        finally:
            socket_.close()

    def start(self):
        """
        It starts the game.
        """
        remote_server = input("输入要扫描的主机地址(127.0.0.1):")
        if remote_server.strip() == '':
            remote_server = '127.0.0.1'
        self.remote_ip = socket.gethostbyname(remote_server)
        port_range = input("输入要扫描的端口范围(1,50000):")
        scanner_ports = []
        if port_range.strip() == '':
            port_range = '1,50000'
        scanner_ports = [n for n in range(int(port_range.split(',')[0]), int(port_range.split(',')[1]))]
        socket.setdefaulttimeout(0.5)
        start_ = datetime.now()
        pool = Pool(processes=10)
        pool.map(self.scanner, scanner_ports)
        pool.close()
        pool.join()
        end_ = datetime.now()
        logger.info('所有端口扫描已完成,总共耗时:{}'.format(str(end_ - start_)))

使用python模块中的main函数调用整个端口扫描器执行扫描任务。

# It's a common idiom to determine if the script is being run directly or being imported.
if __name__ == '__main__':
    scanner_ = PortScanner()
    scanner_.start()

到此这篇关于Python利用socket实现多进程的端口扫描器的文章就介绍到这了,更多相关Python socket多进程端口扫描内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现带验证码网站的自动登陆实现代码

    python实现带验证码网站的自动登陆实现代码

    本例所登录的某网站需要提供用户名,密码和验证码,在此使用了python的urllib2直接登录网站并处理网站的Cookie
    2015-01-01
  • python利用pymysql和openpyxl实现操作MySQL数据库并插入数据

    python利用pymysql和openpyxl实现操作MySQL数据库并插入数据

    这篇文章主要为大家详细介绍了如何使用Python连接MySQL数据库,并从Excel文件中读取数据,将其插入到MySQL数据库中,有需要的小伙伴可以参考一下
    2023-10-10
  • python图片剪裁代码(图片按四个点坐标剪裁)

    python图片剪裁代码(图片按四个点坐标剪裁)

    这篇文章主要介绍了python图片剪裁代码(图片按四个点坐标剪裁),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python列表推导式的基本操作详解

    Python列表推导式的基本操作详解

    Python 的列表推导式,这个看似简单的语法糖,实则内含无限威力,本文将从基础的概念认识,到各类进阶的用法和操作,更深入地探讨列表推导式,希望对大家有所帮助
    2023-06-06
  • Python实现有趣的亲戚关系计算器

    Python实现有趣的亲戚关系计算器

    每年的春节,都会有一些自己几乎没印象但父母就是很熟的亲戚,关系凌乱到你自己都说不清。本文就来用Python制作一个有趣的亲戚关系计算器,感兴趣的可以了解一下
    2023-01-01
  • Python切片操作深入详解

    Python切片操作深入详解

    这篇文章主要介绍了Python切片操作,结合实例形式详细深入的分析了Python切片操作的原理、参数属性、相关函数及操作注意事项,需要的朋友可以参考下
    2018-07-07
  • Python检测字符串中是否包含某字符集合中的字符

    Python检测字符串中是否包含某字符集合中的字符

    这篇文章主要介绍了Python检测字符串中是否包含某字符集合中的字符,需要的朋友可以参考下
    2015-05-05
  • Python包管理工具pip用法详解

    Python包管理工具pip用法详解

    本文详细讲解了Python包管理工具pip的用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • python中os模块和sys模块的使用详解

    python中os模块和sys模块的使用详解

    本文主要介绍了python中os模块和sys模块的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 利用Python制作PPT的完整步骤

    利用Python制作PPT的完整步骤

    这篇文章主要给大家介绍了关于如何利用Python制作PPT的相关资料,主要利用的是python-pptx库,我们可以通过写脚本,来定时执行更新ppt内容,需要的朋友可以参考下
    2021-09-09

最新评论