根据指定端口探测服务器/模块部署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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值