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\t%s\n" % (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("\n", '').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")
posted @   咕咚!  阅读(2891)  评论(2编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示