在日常的工作中,我们通常会有去探测目标主机是否存活的应用场景,单个的服务器主机可以通过计算机自带的DOS命令来执行,但是业务的存在往往不是单个存在的,通常都是需要去探测C段的主机(同一个网段下的存活主机),这样使用DOS来进行操作是不可取,探测的速度太慢了,不满足实际需要。一般批量的操作需要使用脚本进行一键部署执行,本文主要通过使用Python语言来实现批量ping的操作(使用多线程实现Python批量处理)

Python版本 :Python3

使用的第三方库:subprocess, logging, threading, queue

日志导出模块功能:

def set_logging_format():
logging.basicConfig(level=logging.INFO,
format='%(message)s',
filename='ping_host.log',
filemode='w'
)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
多线程实现批量操作:
threads = []
THREAD_NUM = 20
user_iput = input('please input modren: ')
if user_iput == 'addr':
IP_L = IP_LIST
if user_iput == 'file':
IP_L = IP_QUEUE
for i in range (THREAD_NUM):
t = threading.Thread(target = ping_IP,args = (IP_L,))
threads.append(t)
for i in range (THREAD_NUM):
threads[i].start()
for i in range (THREAD_NUM):
threads[i].join()

完整代码部分:
import subprocess
import logging
import datetime
import time
import threading
from queue import Queue
import sys # 实现日志导出
def set_logging_format():
logging.basicConfig(level=logging.INFO,
format='%(message)s',
filename='ping_host.log',
filemode='w'
)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console) # 将需要ping 连接的IP加入队列 def insert_ip_queue(ip_list_path):
IP_QUEUE = Queue()
with open (ip_list_path,'r') as f:
for ip in f.readlines():
IP_QUEUE.put(ip)
f.close()
return IP_QUEUE def IP_list ():
ip_list = Queue()
for i in range (1,255):
ip = '192.168.1.' + str(i)
ip_list.put(ip)
return ip_list
# print (IP_list()) #print (IP_list()) #定义 ping 函数 def ping_IP (IP_QUEUE):
while not IP_QUEUE.empty():
ip = IP_QUEUE.get().strip('\n')
#print (ip)
res = subprocess.call('ping -w 1000 -n 1 %s' % ip , stdout=subprocess.PIPE,shell=True)
#print (res)
if res == 0:
h =subprocess.getoutput('ping' + ' ' + ip)
#print (h) if 'TTL=' in h:
res = ('网络可以正常连通平均延时 = %s' % h.split('平均 = ')[1])
else: res = '网络连接失败!'
today = datetime.datetime.now().strftime("%Y - %m - %d %H : %M : %S")
logging.info("%s IP = %s %s" % (today,ip,res)) def main ():
set_logging_format()
ip_list_path = './hostip.txt'
IP_QUEUE = insert_ip_queue(ip_list_path)
IP_LIST = IP_list() threads = []
THREAD_NUM = 20
user_iput = input('please input modren: ')
if user_iput == 'addr':
IP_L = IP_LIST
if user_iput == 'file':
IP_L = IP_QUEUE
for i in range (THREAD_NUM):
t = threading.Thread(target = ping_IP,args = (IP_L,))
threads.append(t)
for i in range (THREAD_NUM):
threads[i].start()
for i in range (THREAD_NUM):
threads[i].join() if __name__ == '__main__':
main()
 

使用Python实现批量ping操作的更多相关文章

  1. python实现批量ping IP,并将结果写入

    最近工作需要,写了一个Python小脚本,分享给大家,因为公司的IP用的差不多了,然后离职人员的IP有没有及时删除,导致没多少IP用了,所以做了一个python脚本跑了跑,清出来一堆ping不通的IP ...

  2. linux,windows下检测指定的IP地址是否可用或者检测IP地址冲突的3种方式(批处理程序,python程序,linux shell 批量ping)

    本文中的脚本适用范围: 1)检测某些IP地址是否被占用: 2)检测网络中某些设备是否存活: 3)在分配新的ip地址之前,批量检测环境中是否存在冲突的机器 以上检测基于ICMP Ping报文,要求所有的 ...

  3. shell脚本和python脚本实现批量ping IP测试

    先建一个存放ip列表的txt文件: [root@yysslopenvpn01 ~]# cat hostip.txt 192.168.130.1 192.168.130.2 192.168.130.3 ...

  4. Shell学习笔记之shell脚本和python脚本实现批量ping IP测试

    0x00 将IP列表放到txt文件内 先建一个存放ip列表的txt文件: [root@yysslopenvpn01 ~]# cat hostip.txt 192.168.130.1 192.168.1 ...

  5. python实现本地批量ping多个IP

    本文主要利用python的相关模块进行批量ping ,测试IP连通性. 下面看具体代码(python3): #!/usr/bin/env python#-*-coding:utf-8-*- impor ...

  6. python 批量ping服务器

    最近在https://pypi.python.org/pypi/mping/0.1.2找到了一个python包,可以用它来批量ping服务器,它是中国的大神写的,支持单个服务器.将服务器IP写在txt ...

  7. 批量Ping IP

    刚刚接触Python 想做点什么 听说Python 在网络方便很厉害 后来总结如下: 第一:发现公司都固定IP 每次新来同事都要猜一个没有人用的IP  很费劲 第二:我们公司有的IP可以上QQ 有的不 ...

  8. 使用PSSH批量SSH操作Linux服务器

    http://www.opstool.com/article/266 服务器多了,有一个烦恼就是如何批量快速操作一堆服务器.这里我推荐一下经常使用利器pssh.这个工具给我的工作带来了莫大的帮助. 简 ...

  9. python作业03-文件操作&函数

    一.文件处理相关 1.编码问题 (1)请说明python2 与python3中的默认编码是什么?答:Python2默认的字符编码是ASCII,默认的文件编码也是ASCII :python3默认的字符编 ...

随机推荐

  1. Windows Server 2016 Storage Replication

    Storage Replication是Windows Server 2016中新增的一项功能,它是利用windows server自带的块存储复制技术 首先,我们简答粗暴的交代一下部署需求: 1.该 ...

  2. pgsql中的事务隔离

    pgsql中的事务隔离级别 前言 事物隔离级别 在各个级别上被禁止出现的现象是 脏读 不可重复读 幻读 序列化异常 读已提交隔离级别 可重复读隔离级别 可序列化隔离级别 摘录 pgsql中的事务隔离级 ...

  3. [题解]P1449 后缀表达式(栈)

    题目链接:P1449 后缀表达式 题目描述: 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优 ...

  4. python在办公时能给我们带来什么?

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:谦睿科技教育 PS:如有需要Python学习资料的小伙伴可以加点击下方 ...

  5. stand up meeting 12/10/2015

    part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 修改了详细释义的自动换行功能:设计并完成了背景图片的切换功能    6 完成单词释义热度排序    6 PDF Reade ...

  6. OpenCV 之 基本绘图

    OpenCV 虽是开源的计算机视觉库,但里面也有一些基础的绘图函数,本文将介绍几种常用绘图函数:直线.圆.椭圆.长方形.多边形等. 1  数据结构 1.1  二维向量 cv::Point 代表的是二维 ...

  7. MVC5+EasyUI+EF6增删改查的演示

    一.创建MVC项目 二.引入EasyUI 1.进入easyui官网下载源码 2. 将上述源码中需要的jquery 有选择的加到项目中来 添加Content文件夹,放入easyui代码 三.添加EF, ...

  8. 编程语言千千万,为什么学习Python的占一半?

    如果让你从数百种的编程语言中选择一个入门语言?你会选择哪一个? 是应用率最高.长期霸占排行榜的常青藤 Java?是易于上手,难以精通的 C?还是在游戏和工具领域仍占主流地位的 C++?亦或是占据 Wi ...

  9. thinkphp5 -- _initialize()初始化控制器

    public function _initialize() { parent::_initialize(); } public function __construct() { $; parent:: ...

  10. elementaryos5安装mysql5.7、php7.2、nginx1.14.0

    一.mysql5.7 安装mysql5.7: sudo apt-get install mysql-server-5.7 查看安装的mysql版本: mysql -V 5.7版本mysql安装过程中以 ...