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")
    
  • 相关阅读:
    查看linux服务器CPU相关
    Innobackupex(xtrabackup)物理备份
    给xen虚拟机添加硬盘分区格式化
    快速做ssh免密钥登陆
    windows基本命令大全
    linux系统下python升级安装
    快速安装Java环境
    「十二省联考 2019」骗分过样例
    「十二省联考 2019」皮配
    「SNOI2019」积木
  • 原文地址:https://www.cnblogs.com/linga/p/11097793.html
Copyright © 2011-2022 走看看