使用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 break语句详解
Mar 11 Python
python flask 多对多表查询功能
Jun 25 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
Win系统PyQt5安装和使用教程
Dec 25 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
解决echarts中饼图标签重叠的问题
May 16 Python
解决pytorch 交叉熵损失输出为负数的问题
Jul 07 Python
python爬虫beautifulsoup解析html方法
Dec 07 Python
Python之多进程与多线程的使用
Feb 23 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
星际流派综述
2020/03/04 星际争霸
大师制作的中短波矿石收音机
2020/04/02 无线电
php查看session内容的函数
2008/08/27 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
Laravel框架Auth用户认证操作实例分析
2019/09/29 PHP
Javascript客户端将指定区域导出到Word、Excel的代码
2008/10/22 Javascript
javascript 对象定义方法 简单易学
2009/03/22 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
JS 退出系统并跳转到登录界面的实现代码
2013/06/29 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
用angular实现多选按钮的全选与反选实例代码
2017/05/23 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
使用python编写批量卸载手机中安装的android应用脚本
2014/07/21 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
python多线程扫描端口(线程池)
2019/09/04 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
Django在Model保存前记录日志实例
2020/05/14 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
中学生差生评语
2014/01/30 职场文书
新生儿未入户证明
2015/06/23 职场文书
php微信小程序解包过程实例详解
2021/03/31 PHP
如何使用SQL Server语句创建表
2022/04/12 SQL Server
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL