■現在pingが返ってくるIPアドレスとそれに対応するMACアドレスをarpで得る。

OS macOS
言語 python3

 

■標準出力例

searching start at 2024-12-24 17:44:02.079183
['192.168.10.1', '80:22:a7:a9:34:fc', '2024-12-24 17:44:02.116664']
・・・

ping: sendto: No route to host
・・・
['192.168.10.20', 'mine', '2024-12-24 17:44:25.917250']
['192.168.10.22', 'e0:51:d8:11:3e:46', '2024-12-24 17:44:27.286894']
ping: sendto: No route to host
['192.168.10.32', '90:1b:e:47:6f:68o', '2024-12-24 17:44:39.213177']
['192.168.10.101', '0:41:e:f0:c2:7on', '2024-12-24 17:46:09.301556']
・・・中略
['192.168.10.113', '46:64:c7:3b:78:ea', '2024-12-24 17:46:15.226049']
・・・中略

['192.168.10.192', '74:a7:ea:41:d:e1o', '2024-12-24 17:47:58.509145']
searching end at  2024-12-24 17:49:20.574079

 

●10.2から10.19のあいだに妙なエラーメッセージがでています。

 

■ツール「LanScan」でみたアドレス関係

●10.2から10.19の間にはなにもでてこない。

 

ping: sendto: No route to hostについてネットで調査

参考出典
https://qiita.com/ecodrive/items/ec7e32037d7cfd8106a5

無線デバイスとくにiphoneなどアップルの端末こうなるらしいのですが、

でも、10.2から10.19の間にはなにもないんですけど。。。

タイムアウトが300msecでは短すぎるとかか???

とりあえず無視することにします。
 

■pythonコード(Windows11・python3用)

# 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.20"
address_mac_mine = "mine"
list_adr_ip_live=[]
list_arp=[]
dataset=[]
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,"-c","1", "-W", "300","-b","en0"],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",adr_ip],stdout=subprocess.PIPE)
                str_result_arp = result_arp.stdout.decode("cp932").replace( "\r\n","")
                list_arp1 = str_result_arp.split("at ")
                list_arp2 = list_arp1[0].split("(")
                list_arp3 = list_arp2[1].split(")")
                address_ip_live = list_arp3[0].replace(" ","")                
                address_mac_live = list_arp1[1][0:18].replace(" ","")
                dataset = [address_ip_live,address_mac_live,str(datetime.datetime.now())]
                print(dataset)
print("searching end at ",datetime.datetime.now())

 

以上