使用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 相关文章推荐
python解析模块(ConfigParser)使用方法
Dec 10 Python
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Django如何实现内容缓存示例详解
Sep 24 Python
win10下Python3.6安装、配置以及pip安装包教程
Oct 01 Python
Python使用pip安装pySerial串口通讯模块
Apr 20 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
Jan 08 Python
Python流程控制常用工具详解
Feb 24 Python
python通过对字典的排序,对json字段进行排序的实例
Feb 27 Python
python关于集合的知识案例详解
May 30 Python
Python数据分析之绘图和可视化详解
Jun 02 Python
用Python selenium实现淘宝抢单机器人
Jun 18 Python
Python自动化实战之接口请求的实现
May 30 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系列学习之日期函数使用介绍
2012/08/18 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
只要1K 纯JS脚本送你一朵3D红色玫瑰
2016/08/09 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
weex里Vuex state使用storage持久化详解
2017/09/09 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
nodejs实现爬取网站图片功能
2017/12/14 NodeJs
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
django之常用命令详解
2016/06/30 Python
使用PyCharm创建Django项目及基本配置详解
2018/10/24 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
python两个list[]相加的实现方法
2020/09/23 Python
canvas实现有递增动画的环形进度条的实现方法
2019/07/10 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
服装创业计划书范文
2014/02/05 职场文书
电工技术比武方案
2014/05/11 职场文书
2014年小学校长工作总结
2014/12/08 职场文书
教师先进事迹材料
2014/12/16 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
学前班教学反思
2016/02/24 职场文书
PHP中->和=>的意思
2021/03/31 PHP