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