• 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")
    
  • 相关阅读:
    php 多进程
    关于TP的RBAC的使用
    谈谈自己对于Auth2.0的见解
    php 写队列
    关于thinkphp中Hook钩子的解析
    JS的闭包
    单链表的查找和取值-1
    shell输入输出重定向
    转-Visual Studio控制台程序输出窗口一闪而过的解决方法
    linux下如何调用不同目录下的.h 库文件
  • 原文地址:https://www.cnblogs.com/linga/p/11097793.html
Copyright © 2020-2023  润新知