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 # 从 ...
随机推荐
- NET设计模式 第二部分 结构性模式(12):享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern) ——.NET设计模式系列之十三 Terrylee,2006年3月 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是在某些情 ...
- HanLP 关键词提取算法分析详解
HanLP 关键词提取算法分析详解 l 参考论文:<TextRank: Bringing Order into Texts> l TextRank算法提取关键词的Java实现 l Text ...
- HTML:meta标签使用总结 [转载] [360浏览器 指定极速模式]
meta标签作用 META标签是HTML标记HEAD区的一个关键标签,提供文档字符集.使用语言.作者等基本信息,以及对关键词和网页等级的设定等,最大的作用是能够做搜索引擎优化(SEO). PS:便于搜 ...
- Java MyBatis insert数据库数据后返回主键
<selectKey keyProperty="id" resultType="java.lang.Long" order="AFTER&quo ...
- 弄清SDI显示工程中的每一个信号,每一个逻辑
弄清SDI显示工程中的每一个信号,每一个逻辑 1. FIFO外部逻辑控制 FIFO的读和写在不同的时钟域,所以读和写的控制逻辑应当分开写在不同的两个always块语句中. 2.播出端复位信号的产生 : ...
- 安装ruby&gem
#安装yaml#------------------------------------------------------- cd /opt tar zxf yaml-0.1.7.tar.gz ./ ...
- MySQL GTID 主从复制错误修复方法
https://yq.aliyun.com/articles/155827?spm=5176.8067842.tagmain.6.RFPTAL MySQL 传统的主从复制方式使用 master_log ...
- github上传本地仓库
前提是你已经有了自己的github账号,并且已经关联了本地和远程的仓库,设置好了ssh密钥.自行百度解决. 上传的主要命令: git init git add . git commit -m &quo ...
- JAVA中Integer类型变量比较问题
今天在做实验的时候,发现了一个比较奇怪的问题:两个Integer型变量用==进行比较时,有时候能成功有时候不能成功.举个例子: 代码1: Integer l1 = 122; Integer l2 = ...
- P【1012】拼数
十分蒟蒻...(还是看别人的博才过的...) 题解 #include<cstdio>#include<cstring>#include<algorithm>#inc ...