使用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 28 Python
Python编程实现数学运算求一元二次方程的实根算法示例
Apr 02 Python
Python之str操作方法(详解)
Jun 19 Python
python selenium UI自动化解决验证码的4种方法
Jan 05 Python
python多行字符串拼接使用小括号的方法
Mar 19 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
Jan 29 Python
浅析python的Lambda表达式
Feb 27 Python
Python使用crontab模块设置和清除定时任务操作详解
Apr 09 Python
Python如何输出百分比
Jul 31 Python
Pytest中skip skipif跳过用例详解
Jun 30 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
Oct 16 Python
Python pyecharts案例超市4年数据可视化分析
Aug 14 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下网站防IP攻击代码,超级实用
2010/10/24 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
php多重接口的实现方法
2015/06/20 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
深入分析node.js的异步API和其局限性
2016/09/05 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
vue实现购物车的监听
2020/04/20 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
实时获取Python的print输出流方法
2019/01/07 Python
python实现加密的方式总结
2020/01/19 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
彻底解决Python包下载慢问题
2020/11/15 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
HTML实现代码雨源码及效果示例
2020/02/25 HTML / CSS
伦敦所有西区剧院演出官方票务代理:Theatre Tickets Direct
2017/05/26 全球购物
MIKI HOUSE美国官方网上商店:日本领先的婴儿和儿童高级时装品牌
2020/06/21 全球购物
女子职高个人自荐书
2014/02/01 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
2014年学校领导班子对照检查材料
2014/09/19 职场文书
二手车转让协议书
2015/01/29 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
保姆聘用合同
2015/09/21 职场文书
教师岗位说明书
2015/09/30 职场文书