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利用正则表达式匹配并截取指定子串及去重的方法
Jul 30 Python
python web框架学习笔记
May 03 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
May 15 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
Python如何使用内置库matplotlib绘制折线图
Feb 24 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
python利用google翻译方法实例(翻译字幕文件)
Sep 21 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
Dec 01 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
Jun 11 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仿QQ验证码的实例分析
2013/07/01 PHP
php利用单例模式实现日志处理类库
2014/02/10 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
jQuery操作CheckBox的方法介绍(选中,取消,取值)
2014/02/04 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
jquery $(document).ready()和window.onload的区别浅析
2015/02/04 Javascript
微信小程序 教程之wxapp 视图容器 view
2016/10/19 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
Python中除法使用的注意事项
2014/08/21 Python
Python变量作用范围实例分析
2015/07/07 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
2019/10/01 Python
python构造函数init实例方法解析
2020/01/19 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
python中pyqtgraph知识点总结
2021/01/26 Python
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
共产党员承诺书
2014/03/25 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
浅谈MySQL之select优化方案
2021/08/07 MySQL
JS实现数组去重的11种方法总结
2022/04/04 Javascript
正则表达式基础与常用验证表达式
2022/06/16 Javascript