小编给大家分享一下python检测IP通不通的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家学习,希望大家阅读完这篇文章后大所收获,下面让我们一起去学习方法吧!

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

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

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

#!/bin/bashPING=`ping-c3$1|grep'0received'|wc-l`echo$PING

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

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

#检查ip能否ping通#0:正常,1:ping不通defcheck_ip_ping():record=get_ip()#从数据库中读取的IP列表foriinrange(0,len(record)):p=subprocess.Popen([r'./ping.sh',record[i]],stdout=subprocess.PIPE)result=p.stdout.read()Status=0ifresult=='1\n':Status=1#printi,record[i],'----pingfailed----'else:ping_ok.append(record[i])#printi,record[i],'----pingsuccess----'mysql('updateip_connectsetStatus=%dwhereIP="%s"'%(Status,record[i]))

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

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

fping.sh:

#!/bin/bashrm-fresult.txtcatipmi_ping.txt|fping>result.txt

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

代码如下:

defcheck_online_ip():ip=mysql('select*fromip_check')#将IP写进一个文件ifos.path.exists('iplist.txt'):os.remove('iplist.txt')iplist='iplist.txt'foriinrange(0,len(ip)):withopen(iplist,'a')asf:f.write(ip[i][0]+'\n')#对文件中的IP进行fpingp=subprocess.Popen(r'./fping.sh',stdout=subprocess.PIPE)p.stdout.read()#读result.txt文件,将IPisunreachable的行提取更新mysql状态为1result=open('result.txt','r')content=result.read().split('\n')foriinrange(0,len(content)-1):tmp=content[i]ip=tmp[:tmp.index('is')-1]Status=0if'unreachable'intmp:Status=1#printi,ipmysql('updateip_checksetStatus=%dwhereIP="%s"'%(Status,ip))print'checkallipconnectnessover!'

以上是python检测IP通不通的方法的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!