Python实现根据指定端口探测服务器/模块部署的方法
本文实例讲述了Python实现根据指定端口探测服务器/模块部署的方法,非常具有实用价值。分享给大家供大家参考借鉴。
有些时候,在维护过程中,服务器数量非常多。应用模块部署在不同服务器上。有时维护人员做了模块迁移,而未及时同步至手册中。查找比较困难。于是,产生Python根据应用端口进行探测,获取模块部署。
设想非常简单:通过简单的tcp链接,如果能够成功的建立,立即断开,防止影响业务。表示模块在某服务器上有部署。
具体功能代码如下:
#!/bin/envpython # importsocket importtime fromthreadingimportThread 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":[]} classdetect(Thread): def__init__(self,ip,port=22): Thread.__init__(self) self.ip=ip self.port=port defrun(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("detectHost%sOnline"%self.ip) onLine.append(self.ip) except: print("detectHost%sOffLine"%self.ip) offLine.append(self.ip) sock.close defsigle_detect(ip): p=detect(ip) p.start() p.join(60) defmulti_detect(host): T_thread=[] foripinset(host): t=detect(ip) t.name=ip t.start() T_thread.append(t) fortinT_thread: t.join(15) deffilter_gather(hlist): gather=[] fortinset(hlist): gather.append(t) returngather defmak_hostList_byip3(iplist): globalhostList hostList=[] foripinset(iplist): tmp=ip.split('.') if(len(tmp)==3): foriinrange(2,254): hostList.append('%s.%d'%(ip,i)) elif(len(tmp)==4): hostList.append(ip) else: continue returnhostList defupdate_hostDict(onLine,offLine): hostDict["onLine"]=onLine hostDict["offLine"]=offLine defmake_pickle_fileName(): importtime fileName="" forsintime.localtime()[:5]: fileName=fileName+str(s) fileName="Host_%s.pkl"%fileName returnfileName defsave_gathered(fileName,hostDict): importpickle F=open(fileName,'wb') pickle.dump(hostDict,F) F.close() defrecovery_gathered(fileName,keyList): importpickle try: F=open(fileName,'rb') E=pickle.load(F) keyList.append(E) except: F.close() return whileE: 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程序设计有所帮助。