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 # 从 ...
随机推荐
- SSH实现隧道功能穿墙
Putty和SSH tunnel 目前寻求FQ的方式无非就几种: 寻找web代理(这个可以进我放置的在线代理进行测试) 自行寻找http/sock5代理(这个可以去网上搜索代理ip) vpnFQ(目前 ...
- [NEWS]Microsoft expands partnerships with AOL and AppNexus, Bing to power search for AOL properties
http://advertising.microsoft.com/en/blog/33906/microsoft-expands-partnerships-with-aol-and-appnexus- ...
- java线程调度原则
线程的调度采用占先原则,优先级越高的线程越优先执行.每个JAVA线程优先级有设置在常数1-10的范围,默认值是5.但优先级高并不代表能独自占用执行时间片,而是优先级越高得到越多的执行时间片,反之,优先 ...
- 黄聪:微信公众平台开发OAuth2.0网页授权(转)
微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...
- IDEA创建Springmvc项目
项目主要步骤如下: 1.创建一个javaweb动态项目 2.导入springmvc demo所需要的jar包 3.生成项目war包 4.配置项目tomacat服务器 5.配置web.xml文件 6.编 ...
- C++进阶--代码复用 继承vs组合
//############################################################################ /* * 代码复用: 继承 vs 组合 * ...
- Flink 集群安装配置
以下操作均在主节点进行 1.环境变量 添加FLINK_HOME以及path的内容: export FLINK_HOME=/bigdata/flink- export PATH=$PATH:$JAVA_ ...
- SEO之HTML代码优化
原文地址:http://www.admin5.com/article/20081128/117821.shtml 一.文档类型(DOCTYPE) XHTML1.0有三种DOCTYPE: 1.过渡型 ...
- 基于folly的AtomicIntrusiveLinkedList无锁队列进行简单封装的多生产多消费模型
1.基于folly的AtomicIntrusiveLinkedList略微修改的无锁队列代码: #ifndef FOLLY_REVISE_H #define FOLLY_REVISE_H namesp ...
- lamda匿名函数(与sorted(),filter(),map() 一起用), 递归函数, 二分查找
一. 匿名函数 为了解决一些简单的需求而设计的一句话函数. lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数 语法: 函数名 = lambda 参数: 返回值 ...