使用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获取apk文件URL地址实例
Nov 01 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
python对json的相关操作实例详解
Jan 04 Python
python实现字典(dict)和字符串(string)的相互转换方法
Mar 01 Python
详解python3中zipfile模块用法
Jun 18 Python
kafka-python批量发送数据的实例
Dec 27 Python
python实现剪切功能
Jan 23 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
Djang的model创建的字段和参数详解
Jul 27 Python
Python PyInstaller库基本使用方法分析
Dec 12 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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合并数组+与array_merge的区别分析
2010/08/01 PHP
php 学习资料零碎东西
2010/12/04 PHP
php解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
jQuery中iframe的操作(点击按钮新增窗口)
2016/04/20 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
基于Vue实现支持按周切换的日历
2020/09/24 Javascript
JS库中的Particles.js在vue上的运用案例分析
2017/09/13 Javascript
微信小程序支付及退款流程详解
2017/11/30 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
jQuery编写QQ简易聊天框
2020/08/27 jQuery
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
Django-Scrapy生成后端json接口的方法示例
2020/10/06 Python
面试后的感谢信范文
2014/02/01 职场文书
优秀护士演讲稿
2014/04/30 职场文书
集中整治工作方案
2014/05/01 职场文书
省委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
2014年科普工作总结
2014/12/06 职场文书
英语教师个人工作总结
2015/02/09 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
Golang数据类型和相互转换
2022/04/12 Golang