Python实现根据指定端口探测服务器/模块部署的方法


Posted in Python onAugust 25, 2014

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
python实现监控windows服务并自动启动服务示例
Apr 17 Python
Python中的defaultdict模块和namedtuple模块的简单入门指南
Apr 01 Python
python中getaddrinfo()基本用法实例分析
Jun 28 Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 Python
TensorFlow实现创建分类器
Feb 06 Python
解决Python运行文件出现out of memory框的问题
Dec 03 Python
Python将json文件写入ES数据库的方法
Apr 10 Python
Django Rest framework频率原理与限制
Jul 26 Python
Python实现微信好友的数据分析
Dec 16 Python
Python遍历字典方式就实例详解
Dec 28 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
Jan 07 Python
python的类变量和成员变量用法实例教程
Aug 25 #Python
Python写的创建文件夹自定义函数mkdir()
Aug 25 #Python
Python中的startswith和endswith函数使用实例
Aug 25 #Python
Python socket.error: [Errno 98] Address already in use的原因和解决方法
Aug 25 #Python
Python对小数进行除法运算的正确方法示例
Aug 25 #Python
Python实现的一个自动售饮料程序代码分享
Aug 25 #Python
Python中请使用isinstance()判断变量类型
Aug 25 #Python
You might like
PHP Memcached应用实现代码
2010/02/08 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
PHP里8个鲜为人知的安全函数分析
2014/12/09 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
javascript数组排序汇总
2015/07/07 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Python编程实现的图片识别功能示例
2017/08/03 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
Python对象转换为json的方法步骤
2019/04/25 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
python字符串下标与切片及使用方法
2020/02/13 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
波兰品牌鞋履在线商店:Eastend.pl
2020/01/11 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
linux下进程间通信的方式
2014/12/23 面试题
法定授权委托证明书
2014/09/27 职场文书