Python implements the method of detecting server and module deployment based on the specified port
- 2020-04-02 14:00:32
- OfStack
This example demonstrates how a Python implementation detects server/module deployment based on a specified port. Share with you for your reference.
Sometimes, during maintenance, the number of servers is very large. Application modules are deployed on different servers. Sometimes the maintainer does a module migration and does not synchronize it to the manual in time. It's hard to find. Python is then generated to probe against the application port and obtain the module deployment.
The scenario is simple: with a simple TCP link, if it can be successfully established, disconnect immediately to prevent business disruption. Indicates that the module is deployed on a server.
The specific function code is as follows:
#!/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)
Hopefully, the approach described in this article will help you with your Python programming.