Board logo

标题: CentOS8使用Socket(检测TCP端口) [打印本页]

作者: admin    时间: 2021-12-19 08:59     标题: CentOS8使用Socket(检测TCP端口)

操作系统的版本信息: [root@centos8 ~]# cat /etc/redhat-release CentOS Linux release 8.2.2004 (Core) [root@centos8 ~]# [root@centos8 ~]# uname -r 4.18.0-193.el8.x86_64 Python的版本信息: [root@centos8 ~]# python3 --version Python 3.6.8 ###### 检测本机的某个TCP端口是否能被访问: [root@centos8 ~]# cat check.py #coding=utf-8 import socket host_1 = socket.gethostname() #获取本机的主机名 ip_1 = '127.0.0.1' #本机的回环IP地址 port_1 = 80 #检测 TCP 80 端口 try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip_1, port_1)) except: print(f"本机({host_1})的TCP端口{port_1}是不通的。") else: print(f"本机({host_1})的TCP端口{port_1}是通的。") 设置脚本权限: [root@centos8 ~]# chmod a+x check.py 脚本运行的结果:(端口不能被访问时) [root@centos8 ~]# systemctl stop httpd [root@centos8 ~]# [root@centos8 ~]# python3 check.py 本机(centos8.zhuohua.store)的TCP端口80是不通的。 [root@centos8 ~]# 脚本运行的结果:(端口能被访问时) [root@centos8 ~]# systemctl start httpd [root@centos8 ~]# [root@centos8 ~]# python3 check.py 本机(centos8.zhuohua.store)的TCP端口80是通的。 [root@centos8 ~]# ###### 使用函数检测本机的多个TCP端口是否能被访问: [root@centos8 ~]# cat check.py #coding=utf-8 import socket import datetime dt = datetime.datetime.now() tt = dt.strftime('%Y%m%d_%H%M%S') hostname_1 = socket.gethostname() #获取本机的主机名 ip_1 = socket.gethostbyname(hostname_1) #获取本机的IP地址 def func1(ip_1,port_1): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip_1, port_1)) except: Result_2 = f"检测时间:{tt} 本机'{ip_1}'的TCP端口{port_1}是不通的。" print(Result_2) #把失败的输出结果写入(追加)到文件error.log;文件不存在时,会自动创建 Path_1 = r'/root/error.log' f_name = open(Path_1,'a') print(Result_2,file=f_name) else: Result_1 = f"检测时间:{tt} 本机'{ip_1}'的TCP端口{port_1}是通的。" print(Result_1) #把成功的输出结果写入(追加)到文件success.log Path_1 = r'/root/success.log' f_name = open(Path_1,'a') print(Result_1,file=f_name) if __name__ == '__main__': ### 多次执行函数,就可以一次性检测本机的多个TCP端口了 func1(ip_1,80) func1(ip_1,3306) 两次运行脚本的结果: [root@centos8 ~]# python3 check.py 检测时间:20210208_205319 本机'192.168.168.154'的TCP端口80是通的。 检测时间:20210208_205319 本机'192.168.168.154'的TCP端口3306是不通的。 [root@centos8 ~]# [root@centos8 ~]# python3 check.py 检测时间:20210208_205500 本机'192.168.168.154'的TCP端口80是通的。 检测时间:20210208_205500 本机'192.168.168.154'的TCP端口3306是不通的。 [root@centos8 ~]# cat success.log 检测时间:20210208_205319 本机'192.168.168.154'的TCP端口80是通的。 检测时间:20210208_205500 本机'192.168.168.154'的TCP端口80是通的。 [root@centos8 ~]# cat error.log 检测时间:20210208_205319 本机'192.168.168.154'的TCP端口3306是不通的。 检测时间:20210208_205500 本机'192.168.168.154'的TCP端口3306是不通的。 ###### 使用类检测本机的多个TCP端口是否能被访问: [root@centos8 ~]# cat check.py #coding=utf-8 import socket import datetime dt = datetime.datetime.now() tt = dt.strftime('%Y%m%d_%H%M') hostname_1 = socket.gethostname() ip_1 = socket.gethostbyname(hostname_1) class class1(): def __init__(self,ip_1,port_1): self.ip_1 = ip_1 self.port_1 = port_1 def func1(self): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((self.ip_1, self.port_1)) except: Result_2 = f"检测时间:{tt} 本机'{self.ip_1}'的TCP端口{self.port_1}是不通的。" print(Result_2) #把失败的输出结果写入(追加)到文件/root/error.log Path_1 = r'/root/error.log' f_name = open(Path_1,'a') print(Result_2,file=f_name) else: Result_1 = f"检测时间:{tt} 本机'{self.ip_1}'的TCP端口{self.port_1}是通的。" print(Result_1) #把成功的输出结果写入(追加)到文件/root/success.log Path_1 = r'/root/success.log' f_name = open(Path_1,'a') print(Result_1,file=f_name) if __name__ == '__main__': ### 多次执行类,就可以一次性检测本机的多个TCP端口了 myclass = class1(ip_1,80) myclass.func1() myclass = class1(ip_1,3306) myclass.func1() 两次运行脚本的结果: [root@centos8 ~]# python3 check.py 检测时间:20210208_2102 本机'192.168.168.154'的TCP端口80是通的。 检测时间:20210208_2102 本机'192.168.168.154'的TCP端口3306是不通的。 [root@centos8 ~]# [root@centos8 ~]# python3 check.py 检测时间:20210208_2103 本机'192.168.168.154'的TCP端口80是通的。 检测时间:20210208_2103 本机'192.168.168.154'的TCP端口3306是不通的。 [root@centos8 ~]# cat success.log 检测时间:20210208_2102 本机'192.168.168.154'的TCP端口80是通的。 检测时间:20210208_2103 本机'192.168.168.154'的TCP端口80是通的。 [root@centos8 ~]# [root@centos8 ~]# cat error.log 检测时间:20210208_2102 本机'192.168.168.154'的TCP端口3306是不通的。 检测时间:20210208_2103 本机'192.168.168.154'的TCP端口3306是不通的。 ############ ############ Linux安装第三方库:(retry) [root@centos8 ~]# pip3 install retry -i http://mirrors.aliyun.com/pypi/simple --trusted-host=mirrors.aliyun.com Linux卸载第三方库:(retry) [root@centos8 ~]# pip3 uninstall retry -y Uninstalling retry-0.9.2: Successfully uninstalled retry-0.9.2 ###### 使用函数+retry检测本机的某个TCP端口是否能被访问: [root@centos8 ~]# cat check.py #coding=utf-8 from retry import retry import socket,datetime host_1 = socket.gethostname() ip_1 = socket.gethostbyname(host_1) port_1 = 80 @retry() #当retry装饰器无参数时,遇到异常会一直重试,直到成功为止 def func1(ip_1,port_1): global tt s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((ip_1, port_1)) dt = datetime.datetime.now() tt = dt.strftime('%Y%m%d_%H%M%S') return f"检测时间:{tt} 本机'{ip_1}'的TCP端口{port_1}通了。" def func2(): #把成功的输出结果写入(覆盖)到文件/root/1.txt Path_1 = r'/root/1.txt' #文件不存在时,会自动创建 f_name = open(Path_1,'w') print(Result_1,file=f_name) print(f"检测时间:{tt} 端口通了,输出结果已经写入到文件/root/1.txt") if __name__ == '__main__': #假如func1()没有执行成功,就不会执行func2() Result_1 = func1(ip_1,port_1) func2() 脚本运行的效果:(本机的TCP 80端口不通时,会一直重试,直到成功为止;组合键Ctrl+c可以结束脚本的运行) 图片1.png 脚本运行的效果:(本机的TCP 80端口通了后) [root@centos8 ~]# systemctl start httpd [root@centos8 ~]# [root@centos8 ~]# python3 check.py 检测时间:20210208_210726 端口通了,输出结果已经写入到文件/root/1.txt [root@centos8 ~]# [root@centos8 ~]# cat 1.txt 检测时间:20210208_210726 本机'192.168.168.154'的TCP端口80通了。 ###### 使用类+retry检测本机的某个TCP端口是否能被访问: [root@centos8 ~]# cat check.py #coding=utf-8 from retry import retry import socket,datetime host_1 = socket.gethostname() ip_1 = socket.gethostbyname(host_1) class class1(): def __init__(self,ip_1,port_1): self.ip_1 = ip_1 self.port_1 = port_1 @retry() #当retry装饰器无参数时,遇到异常会一直重试,直到成功为止 def func1(self): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((self.ip_1, self.port_1)) dt = datetime.datetime.now() self.tt = dt.strftime('%Y%m%d_%H%M%S') self.Result = f"检测时间:{self.tt} 本机'{self.ip_1}'的TCP端口{self.port_1}通了。" def func2(self): Path_1 = r'/root/1.txt' f_name = open(Path_1,'w') print(self.Result,file=f_name) print(f"检测时间:{self.tt} 端口通了,输出结果已经写入到文件/root/1.txt") if __name__ == '__main__': #假如func1()没有执行成功,就不会执行func2() myclass = class1(ip_1,80) myclass.func1() myclass.func2() 脚本运行的效果:(本机的TCP 80端口不通时,会一直重试,直到成功为止;组合键Ctrl+c可以结束脚本的运行) 图片1.png 脚本运行的效果:(本机的TCP 80端口通了后) [root@centos8 ~]# systemctl start httpd [root@centos8 ~]# [root@centos8 ~]# python3 check.py 检测时间:20210208_212707 端口通了,输出结果已经写入到文件/root/1.txt [root@centos8 ~]# [root@centos8 ~]# cat 1.txt 检测时间:20210208_212707 本机'192.168.168.154'的TCP端口80通了。 相关文章: CentOS6使用Socket(检测TCP端口) Python3获取主机名和IP地址 retry装饰器 自定义函数 自定义类 CentOS8安装Python3 CentOS8使用Virtual Environment

图片附件: 图片1.png (2022-2-8 23:02, 6.15 KB) / 下载次数 70
http://blog.zhuohua.store/attachment.php?aid=19097&k=30a8bcd35b782e07f119480167dbc9ec&t=1714630482&sid=0S9Bnv



图片附件: 图片1.png (2022-2-8 23:03, 6.15 KB) / 下载次数 80
http://blog.zhuohua.store/attachment.php?aid=19098&k=703fbdb60c3e11d81f463485eaecbae1&t=1714630482&sid=0S9Bnv






欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2