使用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文件操作类操作实例详解
Jul 11 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
Python的Django框架中的数据库配置指南
Jul 17 Python
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
Python正则表达式知识汇总
Sep 22 Python
python实现决策树分类
Aug 30 Python
Python3 合并二叉树的实现
Sep 30 Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 Python
python实现udp传输图片功能
Mar 20 Python
python操作toml文件的示例代码
Nov 27 Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 Python
python中time tzset()函数实例用法
Feb 18 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
织梦模板标记简介
2007/03/11 PHP
php Try Catch异常测试
2009/03/01 PHP
PHP5中新增stdClass 内部保留类
2011/06/13 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
python分割和拼接字符串
2013/11/01 Python
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
Python实现自动上京东抢手机
2018/02/06 Python
python中time库的实例使用方法
2019/10/31 Python
python实现银行实战系统
2020/02/26 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
英国第一的滑雪服装和装备零售商:Snow+Rock
2020/02/01 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
护理自我鉴定范文
2013/10/06 职场文书
好的自荐信的要求
2013/10/30 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
质量承诺书格式范文
2015/04/28 职场文书
企业战略合作意向书
2015/05/08 职场文书
车间班组长竞聘书
2015/09/15 职场文书
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技