python 端口探测_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程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值