操作系统的版本信息:
[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可以结束脚本的运行)
脚本运行的效果:(本机的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可以结束脚本的运行)
脚本运行的效果:(本机的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 |