使用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 24 Python
Python程序设计入门(4)模块和包
Jun 16 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
Python进阶篇之字典操作总结
Nov 16 Python
Python3.6日志Logging模块简单用法示例
Jun 14 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
Python 分享10个PyCharm技巧
Jul 13 Python
Python企业编码生成系统之系统主要函数设计详解
Jul 26 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
Python values()与itervalues()的用法详解
Nov 27 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
python字符串拼接+和join的区别详解
Dec 03 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
加速XP搜索功能堪比vista
2007/03/22 PHP
php递归列出所有文件和目录的代码
2008/09/10 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
2016/02/01 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
JS实现文字放大效果的方法
2015/03/03 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
理解javascript对象继承
2016/04/17 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
python时间time模块处理大全
2020/10/25 Python
Matlab使用Plot函数实现数据动态显示方法总结
2021/02/25 Python
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
优秀学生事迹材料
2014/02/08 职场文书
社区党务公开实施方案
2014/03/18 职场文书
售后服务承诺书模板
2014/05/21 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
施工安全员岗位职责
2015/04/11 职场文书
写给女朋友的保证书
2015/05/09 职场文书
2015年建筑工程工作总结
2015/05/13 职场文书
红高粱观后感
2015/06/10 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
Go 语言结构实例分析
2021/07/04 Golang