使用Python实现批量ping操作方法


Posted in Python onMay 06, 2020

在日常的工作中,我们通常会有去探测目标主机是否存活的应用场景,单个的服务器主机可以通过计算机自带的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操作的文章就介绍到这了,更多相关使用Python实现批量ping操作内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
把MySQL表结构映射为Python中的对象的教程
Apr 07 Python
Python类的定义、继承及类对象使用方法简明教程
May 08 Python
python设计模式大全
Jun 27 Python
解决Tensorflow使用pip安装后没有model目录的问题
Jun 13 Python
记一次python 内存泄漏问题及解决过程
Nov 29 Python
python实现给scatter设置颜色渐变条colorbar的方法
Dec 13 Python
解决django同步数据库的时候app models表没有成功创建的问题
Aug 09 Python
python实现信号时域统计特征提取代码
Feb 26 Python
pandas读取csv文件提示不存在的解决方法及原因分析
Apr 21 Python
keras-siamese用自己的数据集实现详解
Jun 10 Python
django模型类中,null=True,blank=True用法说明
Jul 09 Python
基于python实现生成指定大小txt文档
Jul 20 Python
Python super()函数使用及多重继承
May 06 #Python
python中shell执行知识点
May 06 #Python
Python 通过监听端口实现唯一脚本运行方式
May 05 #Python
python2.7使用scapy发送syn实例
May 05 #Python
python 使用raw socket进行TCP SYN扫描实例
May 05 #Python
Python之变量类型和if判断方式
May 05 #Python
Python实现CAN报文转换工具教程
May 05 #Python
You might like
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
JQuery Tips(3) 关于$()包装集内元素的改变
2009/12/14 Javascript
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
2013/05/07 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
浅谈javascript中的事件冒泡和事件捕获
2016/12/28 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
用Python进行简单图像识别(验证码)
2018/01/19 Python
pytorch:model.train和model.eval用法及区别详解
2020/02/20 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
超市5.1促销活动
2014/01/15 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
小学教师读书活动总结
2014/07/08 职场文书
药店促销活动总结
2014/07/10 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
北京故宫导游词
2015/01/31 职场文书
社区党员干部承诺书
2015/05/04 职场文书
交通事故被告答辩状
2015/05/22 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
房产证明范本
2015/06/19 职场文书
教师见习总结范文
2015/06/23 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书