IPスキャナーを自作してみましたが、
elem = elems[6].split('n')
でエラー(list index out of range)となってしまっております。
どうしても解決できない状況です。
python
1 2import re 3import socket 4import subprocess 5import pandas as pd 6 7# IPアドレス生成 8def ip_genarate(): 9 ip_list =[] 10 for i in range(1, 5): 11 res = f'10.2.0.{i}' 12 ip_list.append(res) 13 14 return ip_list 15 16 17def reserch(target): 18 19 ip = [] 20 mac = [] 21 host = [] 22 23 # 生成したIPアドレスにPing実行 24 for target_ip in target: 25 ping_res = subprocess.run(['ping', target_ip], shell= True, stdout=subprocess.PIPE) 26 ping_result = ping_res.stdout.decode('cp932').find('TTL') 27 # print(ping_result) 28 29 # Pingが成功したIPに対し、arp -aを実行 30 if ping_result != -1: 31 arp_res = subprocess.run(['arp', '-a', target_ip], stdout=subprocess.PIPE) 32 arp_result = arp_res.stdout.decode('cp932') 33 # print(arp_result) 34 35 # arp -aでMACアドレスが取得できたか判定し、MACアドレスが取得できたものは、テキストファイルにarp-aの結果を出力 36 if re.match('ARP', arp_result) is None: 37 print('OK', arp_result) 38 # with open('arp.txt', 'w', encoding='shift-jis') as f: 39 # writer = f.writelines(arp_result) 40 41 # with open('arp.txt', 'r', encoding='shift-jis') as f: 42 # elems = f.readlines() 43 44 # 以下、IPとMACアドレスを抽出する処理 45 elems = arp_result.split('n') 46 elem = elems[6].split('n') # ここでエラーが発生してしまう。 47 48 ip_address = elem[2] 49 mac_address = elem[13] 50 51 # MACアドレスが取得できなかった場合、mac_address変数に、N/Aを代入 52 else: 53 ip_address = target_ip 54 mac_address = 'N/A' 55 56 # ホスト名を取得 57 fqdn_res = socket.getfqdn(ip_address) 58 if fqdn_res != ip_address: 59 fqdn = fqdn_res 60 else: 61 fqdn = 'N/A' 62 63 # 取得した、IP、mac、ホスト名を、それぞれのリストへ格納 64 ip.append(ip_address) 65 mac.append(mac_address) 66 host.append(fqdn) 67 print(ip_address, mac_address, fqdn) 68 69 else: 70 print(f'{target_ip} - Ping NGです。') 71 # print(fqdn_result) 72 73 # 取得した、IP、mac、ホスト名をCSVに書き出す 74 to_csv(ip, mac, host) 75 76 77def to_csv(ip_arge, mac_arge, host_arge): 78 df = pd.DataFrame([ip_arge, mac_arge, host_arge]) 79 print(df.T) 80 df.T.to_csv('sample.csv', header=False, index=False, encoding='shift-jis') 81 82 83ip_res = ip_genarate() 84 85reserch(ip_res) 86