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