■現在pingが返ってくるIPアドレスとそれに対応するMACアドレスをarpで得る。
OS Windows11pro
言語 python3
■標準出力例
searching start at 2024-12-24 16:11:32.410630
['192.168.10.1', '80-22-a7-a9-34-fc', '2024-12-24 16:11:32.455467']
['192.168.10.20', 'a4-77-f3-04-f9-d7', '2024-12-24 16:11:41.207037']
['192.168.10.22', 'mine', '2024-12-24 16:11:41.655802']
・・・中略
['192.168.10.120', 'f6-9f-7e-03-5e-71', '2024-12-24 16:12:25.935954']
['192.168.10.192', '74-a7-ea-41-0d-e1', '2024-12-24 16:13:01.201194']
searching end at 2024-12-24 16:13:32.156538
■コマンドarp-aの出力例
PS C:\Users\kabay> arp -a
インターフェイス: 192.168.10.22 --- 0x9
インターネット アドレス 物理アドレス 種類
192.168.10.1 80-22-a7-a9-34-fc 動的
192.168.10.20 a4-77-f3-04-f9-d7 動的
・・・中略(arpコマンドでは自分自身は表示されない
192.168.10.120 f6-9f-7e-03-5e-71 動的
192.168.10.192 74-a7-ea-41-0d-e1 動的
192.168.10.255 ff-ff-ff-ff-ff-ff 静的
224.0.0.22 01-00-5e-00-00-16 静的
224.0.0.251 01-00-5e-00-00-fb 静的
224.0.0.252 01-00-5e-00-00-fc 静的
239.255.255.250 01-00-5e-7f-ff-fa 静的
255.255.255.255 ff-ff-ff-ff-ff-ff 静的
■pythonコード
# get ping by ipaddress and get mac-address by arp
# made by kabayon 20241224
import subprocess
import datetime
# get ping by ipaddress
header_segment_ip = '192.168.10.'
address_ip_mine = "192.168.10.22"
address_mac_mine = "mine"
list_arp=[]
dataset=[]
msg_offline = "タイムアウト"
print("searching start at",str(datetime.datetime.now()))
for i in range(1,255):
#print("search ",i)
adr_ip = header_segment_ip+str(i)
if adr_ip==address_ip_mine:
dataset = [address_ip_mine,address_mac_mine,str(datetime.datetime.now())]
print(dataset)
else:
result_ping = subprocess.run(["ping ",adr_ip,"-n","1", "-w", "300"],stdout=subprocess.PIPE)
str_result_ping = result_ping.stdout.decode("cp932")
if result_ping.returncode == 0 :
if msg_offline not in str_result_ping:
result_arp = subprocess.run(["arp ","-a",adr_ip],stdout=subprocess.PIPE)
str_result_arp = result_arp.stdout.decode("cp932").replace( "\r\n","")
list_arp1 = str_result_arp.split("種類")
list_arp2 = list_arp1[1].split("動的")
address_ip_live = list_arp2[0][0:17].replace(" ","")
address_mac_live = list_arp2[0][-25:].replace(" ","")
dataset = [address_ip_live,address_mac_live,str(datetime.datetime.now())]
print(dataset)
#print(list_adr_ip_live)
print("searching end at ",datetime.datetime.now())
以上