Pythonでping試験を一括で実行し、結果をファイルに保存する方法についてソースコード付きで解説します。
ping試験を一括で実行&結果保存
Pythonで、CSVに記録されたIPアドレスのリストを読み込み、ping試験を行って結果をファイルに出力します。
– | 関連記事 |
---|---|
1 | ■【ping疎通試験】ネットワーク障害・エラーの原因を調べる |
2 | ■【Python】ネットワークプログラミング入門 |
– | 実行環境 |
---|---|
OS | Windows10 64bit |
Python | 3.6 |
# -*- coding: utf-8 -*- import subprocess import csv import codecs import datetime class Ping(object): def test(self, hosts): result = [] for host in hosts: # pingコマンド ping = subprocess.Popen(["ping", host], stdout=subprocess.PIPE, stderr=subprocess.PIPE ) # ping試験 out, error = ping.communicate() print("■" + host) print("----------------------") print(out.decode('Shift-JIS')) print("----------------------") result.append(out.decode('Shift-JIS')) hosts = [hosts] hosts.append(result) hosts = list(map(list, zip(*hosts))) return hosts def load_csv(self, filepath): f = codecs.open(filepath, "r") csv_data = csv.reader(f) data = [ e[0] for e in csv_data] f.close() return data def save_csv(self, filepath, data): with open(filepath, 'w', newline='') as f: #newline=''を追加した writer = csv.writer(f) writer.writerows(data) ping = Ping() # ipアドレスのリストをロード hosts = ping.load_csv("iplist.csv") # ping試験 data = ping.test(hosts) # 結果を保存 date = datetime.datetime.now() ping.save_csv("iptest-{0:%Y%m%d_%H%M%S}.txt".format(date), data)
iplist.csv
■IPアドレスのリスト
127.0.0.1,loopback 192.168.100.100,my host 192.168.100.101,same hub host 192.168.100.1,default gateway 157.112.145.21,destination host algorithm.joho.info,destination domain
iptest-20190119_213758.csv
■実行結果
127.0.0.1," 127.0.0.1 に ping を送信しています 32 バイトのデータ: 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128 127.0.0.1 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 0ms、平均 = 0ms " :
ネットワーク障害が発生した際に、自身のホストに近い順にネットワーク機器のIPアドレスを指定してping試験を実施していくのが原因特定の効果的です。
近いところから順にping試験することで「どこまで問題なく通信できるのか、どこから通信エラーが発生するのか」がわかります。
つまり、問題なく通信できた所と、通信エラーが出たところの間に原因があると推測できます。
そのため、IPアドレスのリストは上から近い順に記載されています。
– | 関連記事 |
---|---|
1 | ■【Python】ネットワークプログラミング入門 |
2 | ■【Python入門】使い方とサンプル集 |
コメント