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多线程编程中的join函数使用心得
Sep 02 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
Python基础知识_浅谈用户交互
May 31 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
python中强大的format函数实例详解
Dec 05 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
Mar 30 Python
关于Python核心框架tornado的异步协程的2种方法详解
Aug 28 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
Jun 18 Python
python MD5加密的示例
Oct 19 Python
python实现马丁策略回测3000只股票的实例代码
Jan 22 Python
python基于Kivy写一个图形桌面时钟程序
Jan 28 Python
Django框架模板用法详解
Jun 10 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二维数组排序详解
2013/11/06 PHP
php实现递归与无限分类的方法
2015/02/16 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
PHP实现的XXTEA加密解密算法示例
2018/08/28 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
JS实现动态生成表格并提交表格数据向后端
2020/11/25 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
ES6扩展运算符的用途实例详解
2017/08/20 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
玩转Koa之核心原理分析
2018/12/29 Javascript
Python创建xml的方法
2015/03/10 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Python中的命令行参数解析工具之docopt详解
2017/03/27 Python
浅析python递归函数和河内塔问题
2017/04/18 Python
python数据类型_字符串常用操作(详解)
2017/05/30 Python
Python tkinter事件高级用法实例
2018/01/31 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
jupyter notebook tensorflow打印device信息实例
2020/04/20 Python
Python实现手绘图效果实例分享
2020/07/22 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
结合CSS3的布局新特征谈谈常见布局方法
2016/01/22 HTML / CSS
福克斯租车:Fox Rent A Car
2017/04/13 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
办公室驾驶员岗位职责
2013/11/15 职场文书
货车司机岗位职责
2014/03/18 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书