この記事の例では、指定されたポートに基づいてサーバー/モジュールのデプロイメントを検出する 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 プログラミングに役立つことを願っています。