Pythonを使ってロットping操作方法を実現します。


日常の仕事では、ターゲットホストが生存しているかどうかを確認するアプリケーションシーンがあります。個々のサーバホストはコンピュータによってDOSコマンドを実行できますが、業務の存在は単一ではなく、通常はCセグメントのホスト(同じセグメントでの生存ホスト)を探知する必要があります。このようにDOSを使って操作してはいけません。探知の速度が遅すぎて、実際の要求に満足できません。一般的なバッチの操作は、スクリプトを使用して、主にPython言語を使用して、バッチpingの操作を実現する必要があります(マルチスレッドを使用して、Python一括処理を実現します)。
Pythonバージョン:Python 3
使用する第三者ライブラリ:subprocess、loging、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('
') #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操作の内容を実現します。以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。