zoukankan      html  css  js  c++  java
  • Python实现telnet命令测试防火墙

    Python实现telnet命令测试防火墙

    • telnet主要用于测试主机端口是否开通
    • ping主要是用来测试网络是否畅通和主机是否正在使用

    使用Python实现Telnet测试主机端口是否开通的功能。使用telnet命令是会出现以下集中情况:

    1. 主机和端口都是通的
    2. 主机通端口不通
    3. 主机不通

    通过Python的socket模块来实现,根据上述三种情况进行不同的处理

    Telnet协议是基于tcp协议实现的

    主机和端口都是通的

    这种情况,就会正常连接,正常发送和返回,socket没有任何异常,不用管是否需要密码这一情况,这种情况只需要socket连接主机ip和port,就肯定能链接目标主机ip和端口。

    只需要连接自后断开就ok

    主机通端口不通

    这种情况,连接过程中,socket会抛出ConnectionRefusedError异常,这种情况只需要socket连接主机ip和port,然后捕获对应的异常进行处理即可。

    只需要针对连接过程中会抛出ConnectionRefusedError异常进行处理

    主机不通

    这种情况,socket会一直尝试连接,针对这种情况设置一个超时时间,会抛出socket.timeout的异常,捕获该异常进行处理即可

    只需要针对连接过程中会抛出socket.timeout异常进行处理

    代码逻辑如下:

    #!/usr/bin/python3
    # -*-encoding: utf8 -*-
    
    import socket
    
    
    Buffer_ = 1024
    
    
    def write_ip_port(file_name, host, ports):
        """
        文件操作,生成对应的记录文件
        :param file_name: 生成的文件名
        :param host: 主机IP
        :param ports: 主机端口
        :return:
        """
        with open('./%s' % file_name, mode='a+', encoding='utf8') as file_handler:
            file_handler.write("%s	%s
    " % (host, ports))
    
    
    def connection_host(host, port):
        """
        测试防火墙是否开通
        :param host: 主机ip
        :param port: 主机端口
        :return:
        """
        cli = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
        cli.settimeout(1)
        try:
            """
            处理正常连接
            """
            cli.connect((host, int(port)))
            cli.close()
            file = 'successful.txt'
            write_ip_port(file, host, port)
        except ConnectionRefusedError as cre:
            """
            处理端口关闭
            """
            # print(cre)
            file = 'ConnectionRefusedError.txt'
            write_ip_port(file, host, port)
        except socket.timeout as scto:
            """
            处理主机不通
            """
            # print(scto)
            file = "failed.txt"
            write_ip_port(file, host, port)
    
    
    def read_ip_list(file_name):
        """
        读取ipList.txt文件中的ip和端口,添加到ip_list列表中
        """
        ip_list = []
        with open('./%s' % file_name, mode='r', encoding='utf8') as file_handle:
    
            for line in file_handle.readlines():
                line = line.replace("
    ", '').strip()
                if line is '':
                    continue
                line = line.split(' ')
                ip_list.append(line)
        return ip_list
    
    
    def main(file):
        """
        主程序入口
        :param file: ip和端口的文件名,及其为路径,默认是当前路径
        :return:
        """
        ip_list = read_ip_list(file)
        for ip_port in ip_list:
            connection_host(ip_port[0], ip_port[1])
    
    
    if __name__ == '__main__':
        main("ipList.txt")
    
  • 相关阅读:
    STM32使用keil串口输出中文乱码问题
    STM32CUBEMX忘记配置sys中的debug导致程序只能下载一次的问题
    远渡重洋的开源之路我是买家项目
    其实我就是个技术迷自身定位及展望
    五一上海行
    The Secret 秘密 读书笔记
    MySQL数据库设计复习笔记及项目实战
    PHP可调试团队开发环境配置支持企业级开发
    WIN7下QQ概念版使用手记
    Memento
  • 原文地址:https://www.cnblogs.com/linga/p/11097793.html
Copyright © 2011-2022 走看看