Linux中使用python测试主机存活 Linux系统CentOS Linux release 7.3.1611 (Core) py版本Python 2.7.5
下面是最初的情况
#/usr/bin/env python
# -*- coding: utf-8 -*- import os
import time
import subprocess
import threading
from threadpool import ThreadPool
import threadpool
import re
from Queue import Queue def ping_call():
while not IP_QUEUE.empty():
ip=IP_QUEUE.get()
command='ping -c 2 -W 1 %s'%ip
print(command)
result=subprocess.Popen(command,
shell=True,stdout=subprocess.PIPE) //A
s=result.stdout.read()
e = "ttl" in s
if e:
print('ip地址:{} ping ok'.format(ip))
else:
print('ip地址:{} ping fall'.format(ip)) //B if __name__ == '__main__':
network=input('请输入网段>>>').strip()
host=input('请输入主机范围以空格隔开>>>').strip().split()
a,b=host[0],host[1]
print(network.split('.'))
if len(network.split('.'))==3 and a.isdigit() and b.isdigit() and re.match('\d{1,3}\.\d{1,3}\.\d{1,3}',network):
a=int(a)
b=int(b)
start_time = time.time()
IP_QUEUE=Queue()
threads=[]
for i in range(a,b+1):
IP_QUEUE.put(network+'.'+str(i))
for i in range(50):
thread=threading.Thread(target=ping_call)
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
print("程序耗时{:.2f}".format(time.time() - start_time))
上面的例子也可用改为subprocess.call,在linux系统中命令结果成功为真就时0 ,失败则为假,windows系统上面只关心命令本身是不是可用执行,不关心结果,所以只能用在Linux系统上面
修改标注A到B的代码结果为:
#/usr/bin/env python
# -*- coding: utf-8 -*- import os
import time
import subprocess
import threading
import re
from Queue import Queue def ping_call():
while not IP_QUEUE.empty():
ip=IP_QUEUE.get()
command='ping -c 2 -W 1 %s'%ip
print(command)
result=subprocess.call(command,
shell=True,stdout=subprocess.PIPE) if result:
print('ip地址:{} ping fail'.format(ip))
else:
print('ip地址:{} ping ok'.format(ip)) if __name__ == '__main__':
network=input('请输入网段>>>').strip()
host=input('请输入主机范围以空格隔开>>>').strip().split()
a,b=host[0],host[1]
print(network.split('.'))
if len(network.split('.'))==3 and a.isdigit() and b.isdigit() and re.match('\d{1,3}\.\d{1,3}\.\d{1,3}',network):
a=int(a)
b=int(b)
start_time = time.time()
IP_QUEUE=Queue()
threads=[]
for i in range(a,b+1):
IP_QUEUE.put(network+'.'+str(i))
for i in range(50):
thread=threading.Thread(target=ping_call)
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
print("程序耗时{:.2f}".format(time.time() - start_time))
进一步改版为:
#/usr/bin/env python
# -*- coding: utf-8 -*- import os
import time
import subprocess
import threading
from threadpool import ThreadPool
import threadpool
import re
from Queue import Queue def ping_call():
while not IP_QUEUE.empty():
ip=IP_QUEUE.get()
command='ping -c 2 -W 1 %s'%ip
file=open('/dev/null','w')
result=subprocess.call(command,
shell=True,stdout=file,stderr=file)
if result:
print('ip地址:{} ping fail'.format(ip))
else:
print('ip地址:{} ping ok'.format(ip))
success.append(ip.split('.')[-1])
file.close() if __name__ == '__main__':
network=input('请输入网段>>>').strip()
host=input('请输入主机范围以空格隔开>>>').strip().split()
a,b=host[0],host[1]
print(network.split('.'))
if len(network.split('.'))==3 and a.isdigit() and b.isdigit() and re.match('\d{1,3}\.\d{1,3}\.\d{1,3}',network):
a=int(a)
b=int(b)
start_time = time.time()
IP_QUEUE=Queue()
threads=[]
success=[]
for i in range(a,b+1):
IP_QUEUE.put(network+'.'+str(i))
for i in range(50):
thread=threading.Thread(target=ping_call)
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
print("程序耗时{:.2f}".format(time.time() - start_time))
print("成功主机有:")
for i in success:
print(i)
那么上面的几个脚本如何执行呢,这里也是碰到了很多坑,主要是输入的数据要打引号
[root@centos7 ~]# python ping_host.py
请输入网段>>>'192.168.0'
请输入主机范围以空格隔开>>>'1 10'
['', '', '']
ip地址:192.168.0.1 ping ok
ip地址:192.168.0.4 ping fail
ip地址:192.168.0.3 ping fail
ip地址:192.168.0.5 ping fail
ip地址:192.168.0.9 ping fail
ip地址:192.168.0.6 ping fail
ip地址:192.168.0.8 ping fail
ip地址:192.168.0.2 ping fail
ip地址:192.168.0.7 ping fail
程序耗时2.16
成功主机有:
1
Linux中使用python测试主机存活 Linux系统CentOS Linux release 7.3.1611 (Core) py版本Python 2.7.5的更多相关文章
- 如何在Linux中显示和设置主机名
原文链接 随着连接到网络的计算机数量越来越多,每一台计算机都需要有一个属性来区别于其它计算机.和现实世界中的人一样,计算机也有一个叫做hostname(主机名)的属性. 什么是hostname 从它的 ...
- 如何在Linux中显示和设置主机名(适用ubantu、centos等版本)
随着连接到网络的计算机数量越来越多,每一台计算机都需要有一个属性来区别于其它计算机.和现实世界中的人一样,计算机也有一个叫做hostname(主机名)的属性. 什么是hostname 从它的操作手册来 ...
- Linux中的nc测试端口是否开放
nc测试端口是否开放 在Linux中有一个级强大的网络工具netcat,在默认情况下面都是没有安装的,现在介绍一下安装过程 其实安装很简单 一.安装使用 1.只需输入命令yum安装: [root@SZ ...
- linux中uptime命令获取主机运行时间和查询系统负载信息
系统中的uptime命令主要用于获取主机运行时间和查询linux系统负载等信息.uptime命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系 ...
- Linux 中使用 dd 测试磁盘性能
翻译自 : Linux I/O Performance Tests using dd 基本说明 dd 可以用来做简单的低级别复制文件. 这样做, 一般都是可一直直接访问设备文件. 需要说明的是, 错误 ...
- kali 2.0 linux中的Nmap的主机探测
不多说,直接上干货! 如果是第一次接触Nmap,推荐在MSF终端中输入不加任何参数的Nmap命令,以查看其使用方法. 更多,其实, msf > nmap -h [*] exec: nmap -h ...
- 在linux 中wget 无法解析主机
vim /etc/resolv.cof 在里面加入节点 nameserver 8.8.8.8 / nameserver 8.8.4.4 即可 失败时: 成功时:
- fping命令测试主机存活
author:headsen chen date: 2018-10-09 20:11:22 1,测试一个范围内的主机: fping -a -g 192.168.1.1 192.168.1.255 ...
- Python 局域网主机存活扫描
#! python # -*- coding: utf-8 -*- __author__ = 'Deen' import os import threading import argparse # 从 ...
随机推荐
- elasticsearch UNASSIGNED 处理
PUT /_settings HTTP/1.1 Host: 192.168.1.12:9200 Cache-Control: no-cache Postman-Token: 1befb0fb-6492 ...
- mac里安装Mycrypt扩展
https://jingyan.baidu.com/article/e3c78d644cf1ed3c4c85f5a8.html 先用homebrew安装mycrpt 再下载php5.6版本源码 然后进 ...
- Druid + Grafana 应用实践
谈到大数据,大家首先想到的肯定是Hadoop,近年来互联网技术的快速增长催生了各类大体量数据的爆发,Hadoop最大的贡献在于帮助企业将那些低价值的事件流数据转化为高价值的聚合数据,为企业的经营决策提 ...
- sql重置标识
DBCC CHECKIDENT ( 'table_name' [ , { NORESEED | { RESEED [ , new_reseed_val ...
- Flsk-Werkzeug-请求参数获取备忘
Werkzeug:response,request,routing 获取请求参数:data,form,args,files,cookies,headers,method,url routing:Rul ...
- 转自高手关于SQL 锁的叙述。。(nolock,rowlock,tablock,xlock,paglock)
锁的概述 一. 为什么要引入锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: [丢失更新]A,B两个用户读同一数据并进行修改,其中一个用户的修改结果破坏了另一个修改的结果,比如订票系统 ...
- IIS7.0 下使用Intelligencia.UrlRewriter时Session为空问题
背景 新年伊始,本人的开发环境由Windows Server 2003 +IIS 6 升级成了 Windows Server 2008 +IIS 7,之后便着手参加新项目的开发.项目开发后期测试过程中 ...
- Bitmap BitmapData
var sp:Sprite=new Sprite(); sp.graphics.beginFill(0xffccdd); sp.graphics.drawRect(0,0,100,100); sp.g ...
- asp.net控件拖不动。控件错误
有一种可能是工程的存储路径名称不规范导致,更改命名空间及路径. 我的存储路径是C#文件夹下,去掉#完美解决
- [转][C#]枚举的遍历Enum
// 加载所有颜色 //foreach (Color item in Enum.GetValues(typeof(Color))) foreach (var item in typeof(Color) ...