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实现文件大小输出
Jan 11 Python
Python网站验证码识别
Jan 25 Python
python rsa 加密解密
Mar 20 Python
numpy中矩阵合并的实例
Jun 15 Python
python Tkinter的图片刷新实例
Jun 14 Python
使用django实现一个代码发布系统
Jul 18 Python
在django view中给form传入参数的例子
Jul 19 Python
pytorch载入预训练模型后,实现训练指定层
Jan 06 Python
如何通过python实现人脸识别验证
Jan 17 Python
python实现程序重启和系统重启方式
Apr 16 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
Jun 10 Python
python 模块重载的五种方法
Apr 24 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
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
jquery获得同源iframe内body下标签的值的方法
2014/09/25 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
jQuery实现强制cookie过期方法汇总
2015/05/22 Javascript
JS+CSS3实现超炫的散列画廊特效
2016/07/16 Javascript
js倒计时显示实例
2016/12/11 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
关于React动态加载路由处理的相关问题
2019/01/07 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
详解Node.JS模块 process
2020/08/31 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
浅谈python写入大量文件的问题
2018/11/09 Python
Python列表对象实现原理详解
2019/07/01 Python
python 默认参数相关知识详解
2019/09/18 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
2020/06/03 Python
Python魔术方法专题
2020/06/19 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
业务员岗位职责范本
2013/12/15 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
小区文明倡议书
2014/05/16 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
公务员政审材料
2014/12/23 职场文书
中秋节随笔
2015/08/15 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
JS Canvas接口和动画效果大全
2021/04/29 Javascript