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

在日常的工作中,我们通常会有去探测目标主机是否存活的应用场景,单个的服务器主机可以通过计算机自带的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操作内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python使用arcpy.mapping模块批量出图

    出图是项目里常见的任务,有的项目甚至会要上百张图片,所以批量出土工具很有必要.arcpy.mapping就是ArcGIS里的出图模块,能快速完成一个出图工具. arcpy.mapping模块里常用的类有MapDocument.DataFrame.Layer.DataDrivenPages和TextElement. MapDocument类是地图文档(.mxd文件)对应的类.初始化参数是一个字符串,一般是.mxd文件的路径: mxd=arcpy.mapping.MapDocument(r"F:\G

  • 在Python中调用Ping命令,批量IP的方法

    如下所示: #!/usr/bin/env python #coding:UTF-8 ''''''' Author: jefferchen@163.com 可在命令行直接带目的IP,也可将IP列表在文本文件中. pingip.py -d DestIP DestIP示例: a)单个: 192.168.11.1 b)多个: 192.168.11.1;172.16.8.1;176.13.18.2 c)网段: 192.168.11.1-127 文本文件:ip.txt 目的IP多行存储 ''''''' im

  • python实现本地批量ping多个IP的方法示例

    本文主要利用python的相关模块进行批量ping ,测试IP连通性. 下面看具体代码(python3): ''' 遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书! ''' #!/usr/bin/env python #-*-coding:utf-8-*- import re import subprocess from io import StringIO import multipro

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

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

  • 七牛云的python sdk 批量删除资源的操作方法

    今天做项目的时候用到七牛云,关于对资源的操作是在后端做的,用的SDK,但是,在网上没找到详细的解析,官方文档也没有太详细的解说,所以无奈只好看下源码 这里做一下简单的记录 from qiniu import build_batch_delete, Auth, BucketManager #需要填写你的 Access Key 和 Secret Key,这个在你的个人中心里有 access_key = 'Access_Key' secret_key = 'Secret_Key' #构建鉴权对象 q

  • Linux下安装或升级Python 2.7的操作方法

    1.准备编译环境gcc 2.去官网下载要安装的对应版本的python的源代码 下载地址:https://www.python.org/downloads/source/ 你可以选择你要下载的版本,用wget指令来下载相应的源代码 3.解压下载的代码包 tar -zxvf Python-x.x.x.tgz cd Python-x.x.x 4.配置 1)查找configure文件 find . -name configure cd 搜索结果(一般就在Python文件根目录下) 2)进行配置 ./co

  • Python实现批量将word转html并将html内容发布至网站的方法

    本文实例讲述了Python实现批量将word转html并将html内容发布至网站的方法.分享给大家供大家参考.具体实现方法如下: #coding=utf-8 __author__ = 'zhm' from win32com import client as wc import os import time import random import MySQLdb import re def wordsToHtml(dir): #批量把文件夹的word文档转换成html文件 #金山WPS调用,抢先

  • Python实现批量下载文件

    Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_all() from gevent.pool import Pool import requests import sys import os def download(url): chrome = 'Mozilla/5.0 (X11; Linux i86_64) AppleWebKit/537.36

  • python Django批量导入不重复数据

    本文为大家分享了python Django批量导入不重复数据的实现代码,供大家参考,具体内容如下 程序如下: #coding:utf-8 import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "www.settings") ''' Django 版本大于等于1.7的时候,需要加上下面两句 import django django.setup() 否则会抛出错误 django.core.exceptions

  • Python实现批量下载图片的方法

    本文实例讲述了Python实现批量下载图片的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python #-*-coding:utf-8-*-' #Filename:download_file.py import os,sys import re import urllib import urllib2 base_url = 'xxx' array_url = list() pic_url = list() inner_url = list() def get_a

  • Python实现批量更换指定目录下文件扩展名的方法

    本文实例讲述了Python实现批量更换指定目录下文件扩展名的方法.分享给大家供大家参考,具体如下: #encoding=utf-8 #author: walker #date: 2013-12-06 #function: 深度遍历指定目录,更换指定扩展名 import os import os.path #读入指定目录并转换为绝对路径 rootdir = raw_input('root dir:\n') rootdir = os.path.abspath(rootdir) print('abso

随机推荐