Python实现根据指定端口探测服务器/模块部署的方法
程序员文章站
2022-06-08 20:57:47
本文实例讲述了python实现根据指定端口探测服务器/模块部署的方法,非常具有实用价值。分享给大家供大家参考借鉴。
有些时候,在维护过程中,服务器数量非常多。应用模块部署...
本文实例讲述了python实现根据指定端口探测服务器/模块部署的方法,非常具有实用价值。分享给大家供大家参考借鉴。
有些时候,在维护过程中,服务器数量非常多。应用模块部署在不同服务器上。有时维护人员做了模块迁移,而未及时同步至手册中。查找比较困难。于是,产生python根据应用端口进行探测,获取模块部署。
设想非常简单:通过简单的tcp链接,如果能够成功的建立,立即断开,防止影响业务。表示模块在某服务器上有部署。
具体功能代码如下:
#!/bin/env python # import socket import time from threading import thread hostlist=["10.10.126.170","10.10.126.173","10.10.126.177","10.10.126.170","10.10.126.173","10.10.126.177"] online=[] offline=[] gathered=[] hostdict={"online":[],"offline":[]} class detect(thread): def __init__(self,ip, port=22): thread.__init__(self) self.ip=ip self.port=port def run(self): address=(self.ip,self.port) sock=socket.socket(socket.af_inet, socket.sock_stream) try: sock.connect(address) buff=sock.recv(1024) if(len(buff)): print("detect host %s online" % self.ip) online.append(self.ip) except: print("detect host %s offline" % self.ip) offline.append(self.ip) sock.close def sigle_detect(ip): p=detect(ip) p.start() p.join(60) def multi_detect(host): t_thread=[] for ip in set(host): t=detect(ip) t.name=ip t.start() t_thread.append(t) for t in t_thread: t.join(15) def filter_gather(hlist): gather=[] for t in set(hlist): gather.append(t) return gather def mak_hostlist_byip3(iplist): global hostlist hostlist=[] for ip in set(iplist): tmp=ip.split('.') if(len(tmp)==3): for i in range(2,254): hostlist.append('%s.%d' % (ip, i)) elif(len(tmp)==4): hostlist.append(ip) else: continue return hostlist def update_hostdict(online, offline): hostdict["online"]=online hostdict["offline"]=offline def make_pickle_filename(): import time filename="" for s in time.localtime()[:5]: filename=filename+str(s) filename="host_%s.pkl" % filename return filename def save_gathered(filename, hostdict): import pickle f=open(filename,'wb') pickle.dump(hostdict,f) f.close() def recovery_gathered(filename, keylist): import pickle try: f=open(filename,'rb') e=pickle.load(f) keylist.append(e) except: f.close() return while e: try: e=pickle.load(f) keylist.append(e) except: f.close() break if __name__=='__main__': sigle_detect(hostlist[0]) #--------------- mak_hostlist_byip3(hostlist) multi_detect(hostlist) online=filter_gather(online) print(online) offline=filter_gather(offline) print(offline) gathered=online+offline print(gathered) update_hostdict(online, offline) print(hostdict) fn=make_pickle_filename() save_gathered(fn,hostdict) keylist=[] recovery_gathered(fn,keylist) print(keylist)
希望本文讲述的方法对大家的python程序设计有所帮助。
上一篇: Python命名空间详解