■現在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())

 

以上