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复制与引用用法分析
Apr 08 Python
python 编程之twisted详解及简单实例
Jan 28 Python
Python中str.format()详解
Mar 12 Python
Python实现简单的语音识别系统
Dec 13 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
Apr 16 Python
Django Aggregation聚合使用方法解析
Aug 01 Python
python多线程分块读取文件
Aug 29 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
解决pytorch多GPU训练保存的模型,在单GPU环境下加载出错问题
Jun 23 Python
关于tensorflow softmax函数用法解析
Jun 30 Python
Python 在函数上添加包装器
Jul 28 Python
python包的导入方式总结
Mar 02 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发电子邮件
2006/10/09 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
Node 搭建一个静态资源服务器的实现
2019/05/20 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
简介Django中内置的一些中间件
2015/07/24 Python
不要用强制方法杀掉python线程
2017/02/26 Python
pycham查看程序执行的时间方法
2018/11/29 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
python框架django项目部署相关知识详解
2019/11/04 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
详解CSS3的box-shadow属性制作边框阴影效果的方法
2016/05/10 HTML / CSS
百丽国际旗下购物网站:优购
2017/02/28 全球购物
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
建筑工程实习自我鉴定
2013/09/19 职场文书
护士的自我鉴定
2014/02/07 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
金融保险专业求职信
2014/09/03 职场文书
2015年话务员工作总结
2015/04/29 职场文书
公安机关起诉意见书
2015/05/20 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
教你怎么用PyCharm为同一服务器配置多个python解释器
2021/05/31 Python
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏