使用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程序中操作文件之flush()方法的使用教程
May 24 Python
Python 探针的实现原理
Apr 23 Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
解决django model修改添加字段报错的问题
Nov 18 Python
python面向对象之类属性和类方法案例分析
Dec 30 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
python如何操作mysql
Aug 17 Python
python中翻译功能translate模块实现方法
Dec 17 Python
python爬取抖音视频的实例分析
Jan 19 Python
Python代码风格与编程习惯重要吗?
Jun 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
php adodb分页实现代码
2009/03/19 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
PHP入门教程之数学运算技巧总结
2016/09/11 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
javascript引导程序
2008/10/26 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
Jquery uploadify上传插件使用详解
2016/01/13 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
vue和webpack项目构建过程常用的npm命令详解
2018/06/15 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
python读取xlsx的方法
2018/12/25 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
基于python实现坦克大战游戏
2020/10/27 Python
用CSS3写的模仿iPhone中的返回按钮
2015/04/04 HTML / CSS
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
澳大利亚波西米亚风连衣裙在线商店:Fortunate One
2019/04/01 全球购物
幼儿园健康教育方案
2014/06/14 职场文书
运动会加油稿100字
2014/09/19 职场文书
离婚协议书怎么写
2015/01/26 职场文书
综合测评个人总结
2015/03/03 职场文书
初中家长意见
2015/06/03 职场文书
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android