前言
最近比较空闲,继续自学Python,写个小代码练习练习,还是新手,多多包含。
上一篇文章中说到使用ping命令来测试主机是否在线,但是很多情况主机的防火墙是开启了,这样默认情况下使用ping是无法真正知道主机是否真的在线,同时有些主机是向外提供服务的,所以业务在线的情况也需要去监控。
思路
一般很普遍的测试方法就是使用telnet命令去测试端口的连接情况,例如:telnet 127.0.0.1 80。这个是一个方法,就像上一篇文章一样使用Popen来运行telnet命令,但是这用方式存在一个问题就是很多情况没有返回信息,这样就无法使用返回信息来确定telnet是否成功。还有一个思路是使用os.system来执行telnet命令,这样会有一个返回值,这个我还没有去尝试,不知道能不能成功。
现在有一个比较好的方法,使用stocket模块的connect方法来实现对端口的测试,通过异常处理来判断是否连接成功。
代码
# -*- coding:UTF-8 -*-
import socket
def monitor(ip, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(3)
host = (ip, port)
try:
s.connect(host)
print('已经成功连接%s的%d端口!' % (ip, port))
except Exception:
print('无法连接%s的%d端口!' % (ip, port))
s.close()
if __name__ == "__main__":
ip = input('请输入需要测试的主机ip地址:')
port = int(input('请输入测试的端口:'))
monitor(ip, port)
总结
虽然是简单的实现了功能,但是还是可以完善不少地方,后面有空继续自我学习,继续完善。