使用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中的对象拷贝示例 python引用传递
Jan 23 Python
在Python的setuptools框架下生成egg的教程
Apr 13 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
Python下载网络小说实例代码
Feb 03 Python
Python 类的特殊成员解析
Jun 20 Python
Python中安装easy_install的方法
Nov 18 Python
python里 super类的工作原理详解
Jun 19 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
django中related_name的用法说明
May 20 Python
Python 转移文件至云对象存储的方法
Feb 07 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 cron中的批处理
2008/09/16 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
无刷新预览所选择的图片示例代码
2014/04/02 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
ExpressJS入门实例
2015/01/14 Javascript
html的DOM中Event对象onabort事件用法实例
2015/01/21 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
jquery插件pagination实现无刷新ajax分页
2015/09/30 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
[06:09]辉夜杯主赛事开幕式
2015/12/25 DOTA
浅谈Python 对象内存占用
2016/07/15 Python
python 基础教程之Map使用方法
2017/01/17 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
Python 字符串换行的多种方式
2018/09/06 Python
使用TensorFlow实现SVM
2018/09/06 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
深入浅析Python科学计算库Scipy及安装步骤
2019/10/12 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
美国沃尔玛网上超市:Walmart
2020/08/14 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
小学教师节活动方案
2014/01/31 职场文书
2015年超市工作总结
2015/04/09 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS