使用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黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
Python使用pylab库实现画线功能的方法详解
Jun 08 Python
python微信跳一跳系列之色块轮廓定位棋盘
Feb 26 Python
Python连接Redis的基本配置方法
Sep 13 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
python实现贪吃蛇小游戏
Mar 21 Python
Python当中的array数组对象实例详解
Jun 12 Python
Python实现密码薄文件读写操作
Dec 16 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
Jul 03 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 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自动反斜杠的函数代码
2010/01/05 PHP
php跨服务器访问方法小结
2015/05/12 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
AngularJS控制器controller正确的通信的方法
2016/01/25 Javascript
详解JavaScript数组和字符串中去除重复值的方法
2016/03/07 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
解决iView中时间控件选择的时间总是少一天的问题
2018/03/15 Javascript
JS中async/await实现异步调用的方法
2019/08/28 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
python使用matplotlib模块绘制多条折线图、散点图
2020/04/26 Python
详解通过API管理或定制开发ECS实例
2018/09/30 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
centos7之Python3.74安装教程
2019/08/15 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
Servlet如何得到服务器的信息
2015/12/22 面试题
韩语专业本科生求职信
2013/10/01 职场文书
口腔医学技术应届生求职信
2013/11/09 职场文书
幼儿园大班评语大全
2014/04/17 职场文书
节能宣传周活动总结
2014/05/08 职场文书
学生自我评语
2015/01/04 职场文书
2016新年晚会开场白
2015/12/03 职场文书
教师学习心得体会范文
2016/01/21 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python