使用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中的正则表达式的用法
Apr 09 Python
python字典基本操作实例分析
Jul 11 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
Oct 01 Python
Python分析学校四六级过关情况
Nov 22 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
对numpy中的where方法嵌套使用详解
Oct 31 Python
Django 外键的使用方法详解
Jul 19 Python
Python动态声明变量赋值代码实例
Dec 30 Python
Python多线程获取返回值代码实例
Feb 17 Python
Python中random模块常用方法的使用教程
Oct 04 Python
python中doctest库实例用法
Dec 31 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 mcrypt可逆加密算法分析
2011/07/19 PHP
php广告加载类用法实例
2014/09/23 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
微信自定义分享php代码分析
2016/11/24 PHP
javascript 常用代码技巧大收集
2009/02/25 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
ie下动态加态js文件的方法
2011/09/13 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
获取offsetTop和offsetLeft值的js代码(兼容)
2013/04/16 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
vue实现购物车小案例
2019/09/27 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[47:31]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.12
2020/12/16 DOTA
python实现从网络下载文件并获得文件大小及类型的方法
2015/04/28 Python
Python设计模式之抽象工厂模式
2016/08/25 Python
简单谈谈python中的语句和语法
2017/08/10 Python
python实现简单的购物程序代码实例
2020/03/03 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
python 安装教程之Pycharm安装及配置字体主题,换行,自动更新
2020/03/13 Python
完美解决TensorFlow和Keras大数据量内存溢出的问题
2020/07/03 Python
介绍一下XMLHttpRequest对象的常用方法和属性
2013/05/24 面试题
资产经营总监岗位职责
2013/12/04 职场文书
小区门卫岗位职责
2013/12/31 职场文书
安全生产实施方案
2014/02/23 职场文书
大学生心理活动总结
2014/07/04 职场文书