使用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下载Bing图片(代码)
Nov 07 Python
Python如何快速实现分布式任务
Jul 06 Python
Python实现破解猜数游戏算法示例
Sep 25 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
python使用opencv对图像mask处理的方法
Jul 05 Python
python提取log文件内容并画出图表
Jul 08 Python
通过python3实现投票功能代码实例
Sep 26 Python
Python enumerate内置库用法解析
Feb 24 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
如何安装并在pycharm使用selenium的方法
Apr 30 Python
浅谈Selenium 控制浏览器的常用方法
Dec 04 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
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
去除html代码里面的script正则方法
2016/05/19 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
VUEX-action可以修改state吗
2019/11/19 Javascript
Jquery $.map使用方法实例详解
2020/09/01 jQuery
[04:01]2014DOTA2国际邀请赛 TITAN告别Ohaiyo期望明年再战
2014/07/15 DOTA
Python中的面向对象编程详解(上)
2015/04/13 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
Python遍历文件夹和读写文件的实现代码
2016/08/28 Python
利用python爬取散文网的文章实例教程
2017/06/18 Python
Django admin美化插件suit使用示例
2017/12/12 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
Python如何访问字符串中的值
2020/02/09 Python
python实现定时发送邮件
2020/12/23 Python
python中yield的用法详解
2021/01/13 Python
adidas美国官网:adidas US
2016/09/21 全球购物
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
银行实习自我鉴定
2013/10/12 职场文书
高中数学教师求职信
2013/10/30 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
2015年校长新年寄语
2014/12/08 职场文书
医生个人年终总结
2015/02/28 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
党员转正介绍人意见
2015/06/03 职场文书
股东出资协议书
2016/03/21 职场文书
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python