Python实现检测服务器是否可以ping通的2种方法


Posted in Python onJanuary 01, 2015

好想在2014结束前再赶出个10篇博文来,~(>_<)~,不写博客真不是一个好兆头,至少说明对学习的欲望和对知识的研究都不是那么积极了,如果说这1天的时间我能赶出几篇精致的博文,你们信不信,哈哈,反正我是信了。。。

python检测服务器是否ping通的2种方法

1、第一种比较挫,就是用ping,python调用shell,这个适用于较少的服务器数量,几百台已经很慢了(当然是说python同步的方法,要是nodejs异步方式还是很快的,但是nodejs CPU计算不行,所以尝试了下只能200台左右的服务器可以同时ping,再多的话程序也会崩掉)

shell脚本再简单不过了,ping.sh如下:

#!/bin/bash

PING=`ping -c 3 $1 | grep '0 received' | wc -l`

echo $PING

其实很简单,ping 3个包,只要ping通,上述返回的结果就不是0。$1是传入的第一个参数,即IP

思路很简单的,从数据库读出IP 列表,然后调用上述脚本:

#检查ip能否ping通

#0:正常,1:ping不通

def check_ip_ping():

    record = get_ip() #从数据库中读取的IP列表

    for i in range(0,len(record)):

        p = subprocess.Popen([r'./ping.sh',record[i]],stdout=subprocess.PIPE)

       result = p.stdout.read()

        Status = 0

        if result =='1\n':

            Status = 1

            #print i,record[i],'----ping failed----'

        else:

            ping_ok.append(record[i])

            #print i,record[i],'----ping success----'

        mysql('update ip_connect set Status=%d where IP="%s"'%(Status,record[i]))

2、比这种快很多,适合服务器数量较大时使用,fping命令,它是对一个文件的批量ping,瞬间完成的,如果ping不通,那就较慢,日常ping不通的毕竟是少数,所以这个非常适用。来感受一下,它ping的结果,新建一个文件iplist,里面是IP列表,fping结果如下:

Python实现检测服务器是否可以ping通的2种方法

其实结果就两个 is alive / is unrreachable ,其它的中间检测时它自己输出的不用理会。

fping.sh :

#!/bin/bash

rm -f result.txt

cat ipmi_ping.txt | fping > result.txt

思路也很简单,将IP列表读取来写进一个iplist文件,然后再对这个文件fping(调用fping.sh)批量执行的结果写进result文件:
def check_online_ip():

    ip = mysql('select * from ip_check')
    #将IP写进一个文件

    if os.path.exists('iplist.txt'):

        os.remove('iplist.txt')

    iplist= 'iplist.txt'

    for i in range(0,len(ip)):

        with open(iplist, 'a') as f:

            f.write(ip[i][0]+'\n')
    #对文件中的IP进行fping

    p = subprocess.Popen(r'./fping.sh',stdout=subprocess.PIPE)

    p.stdout.read()
    #读result.txt文件,将IP is unreachable的行提取更新mysql状态为1

    result = open('result.txt','r')

    content = result.read().split('\n')

    for i in range(0,len(content)-1):

        tmp = content[i]

        ip = tmp[:tmp.index('is')-1]

        Status = 0

        if 'unreachable' in tmp:

            Status = 1

        #print i,ip

        mysql('update  ip_check set Status=%d where IP="%s"'%(Status,ip))

    print 'check all ipconnectness over!'

将这个搞成计划任务,每天跑几遍,还是挺赞的。 呵呵。。

Python 相关文章推荐
一则python3的简单爬虫代码
May 26 Python
使用Python脚本将Bing的每日图片作为桌面的教程
May 04 Python
python实现矩阵乘法的方法
Jun 28 Python
Python网络编程 Python套接字编程
Sep 13 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
解决Python requests库编码 socks5代理的问题
May 07 Python
python爬取足球直播吧五大联赛积分榜
Jun 13 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
Python 多线程,threading模块,创建子线程的两种方式示例
Sep 29 Python
基于FME使用Python过程图解
May 13 Python
python爬虫中url管理器去重操作实例
Nov 30 Python
python和anaconda的区别
May 06 Python
Python Web框架Flask信号机制(signals)介绍
Jan 01 #Python
Python模拟登录12306的方法
Dec 30 #Python
python执行shell获取硬件参数写入mysql的方法
Dec 29 #Python
简单的抓取淘宝图片的Python爬虫
Dec 25 #Python
简单使用Python自动生成文章
Dec 25 #Python
Python 抓取动态网页内容方案详解
Dec 25 #Python
利用Psyco提升Python运行速度
Dec 24 #Python
You might like
PHP截取中文字符串的问题
2006/07/12 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
discuz的php防止sql注入函数
2011/01/17 PHP
php+mysql+jquery实现日历签到功能
2017/02/27 PHP
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
JavaScript学习笔记之Function对象
2015/01/22 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
Vue父组件监听子组件生命周期
2020/09/03 Javascript
vue项目打包后请求地址错误/打包后跨域操作
2020/11/04 Javascript
python定时器使用示例分享
2014/02/16 Python
详解Python中的join()函数的用法
2015/04/07 Python
Python基于Socket实现的简单聊天程序示例
2017/08/05 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
Python中print函数简单使用总结
2019/08/05 Python
python 利用zmail库发送邮件
2020/09/11 Python
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
PHP开发的一般流程
2013/08/13 面试题
护士辞职信模板
2014/01/20 职场文书
科研先进个人典型材料
2014/01/31 职场文书
园林设计专业毕业生求职信
2014/03/23 职场文书
中职招生先进个人材料
2014/08/31 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
python 中yaml文件用法大全
2021/07/04 Python
Win11远程连接不上怎么办?Win11远程桌面用不了的解决方法
2022/08/05 数码科技