Hallo....
Ich würde gerne mit Autoit auslesen, ob sich mein Handy in meinem WLan befindet.... ist das möglich?
Gruß
Hallo....
Ich würde gerne mit Autoit auslesen, ob sich mein Handy in meinem WLan befindet.... ist das möglich?
Gruß
Im Allgemeinen bieten die Router eine Seite mit den aktuellen Verbindungen an (zumindest die Fritz.Box kann es) . Die kann man direkt auslesen.
Wenn du im Router der Mac-adresse des Handys eine feste IP zuweist, dann kannst du in einem gewissen Intervall einfach ein Ping dorthin absetzen.
Wenn du im Router der Mac-adresse des Handys eine feste IP zuweist, dann kannst du in einem gewissen Intervall einfach ein Ping dorthin absetzen.
hört sich einfach an... Wie sieht so ein Ping aus??
Autoit Hilfe öffnen und nach Ping suchen.
Wenn IP und/oder MAC bekannt sind, kannst du den ARP-Cache auslesen... denn da stehen die drin, wenn das Gerät verbunden ist.
#include <Array.au3>
; IP und MAC anpassen!!!
Global $g_sIP = '192.168.178.30'
Global $g_sMAC = '8c-f5-a3-0a-7f-f4'
If $g_sIP Then Ping($g_sIP, 1000) ; Stellt sicher, dass die IP und MAC im ARP-Cache landen, wenn das Gerät erreichbar ist.
Example1($g_sIP, $g_sMAC) ; Wenn IP und MAC bekannt sind
Example2($g_sMAC) ; Wenn nur die MAC bekannt ist
Example3($g_sIP) ; Wenn nur die IP bekannt ist
Func Example1($_sIP, $_sMAC)
Local $sOutput = _GetArpCache()
Local $aRx1 = StringRegExp($sOutput, '(?s)(\Q' & $_sIP & '\E|' & $_sMAC & ')', 3)
_ArrayDisplay($aRx1, '$aRx1')
EndFunc ;==>Example1
Func Example2($_sMAC)
Local $sOutput = _GetArpCache()
Local $aRx2 = StringRegExp($sOutput, '(?s)(?i)(\d+\.\d+\.\d+\.\d+)\s+(' & $_sMAC & ')', 3)
_ArrayDisplay($aRx2, '$aRx2')
EndFunc ;==>Example2
Func Example3($_sIP)
Local Static $g_sMAC_Pattern = '([0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}|[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2})'
Local $sOutput = _GetArpCache()
Local $aRx3 = StringRegExp($sOutput, '(?s)(?i)(\Q' & $_sIP & '\E)\s+' & $g_sMAC_Pattern, 3)
_ArrayDisplay($aRx3, '$aRx3')
EndFunc ;==>Example3
Func _GetArpCache()
Local $iPID = Run(@ComSpec & ' /C arp -a', '', @SW_HIDE, $STDOUT_CHILD)
ProcessWaitClose($iPID)
Return StdoutRead($iPID)
EndFunc ;==>_GetArpCache
Alles anzeigen
Ich mache so etwas mit dem Wireless Network Watcher, wenn es nicht unbedingt Autoit sein soll.
Wenn IP und/oder MAC bekannt sind, kannst du den ARP-Cache auslesen... denn da stehen die drin, wenn das Gerät verbunden ist.
Ich bin kein Netzwerkprofi aber: Bist du sicher?
Meines Wissens nach ist der ARP-Cache lediglich ein Zwischenspeicher in dem sich gemerkt wird, welche MAC-Adresse eine IP zu der bereits mal eine Verbindung bestand im Ethernet hat.
Sonst müsste vor jeder Verbindung erst ein ARP-Request ins Netz gebrüllt werden.
Dies bedeutet meiner Ansicht nach:
Um wirklich die aktuelle MAC zu einer IP zu ermitteln, löscht man daher in der Regel den Arp-Cache (arp -d) und macht dann einen Ping auf die IP. Das führt implizit zu einem Arp-Request und wenn das Gerät im Netz existiert, sollte ein Eintrag hierfür im Arp-Cache landen.
Wenn die Sachlage andersherum ist - nämlich das nur die MAC-Adresse aber nicht die IP bekannt ist, dann könnte folgendes funktionieren:
Es gibt da wohl auch das RARP-Protokoll aber das ist wohl mittlerweile eher out of date. ÜBer DHCP würde es wohl auch gehen.
Bist du sicher?
Ziemlich...
arp -a Zeigt aktuelle ARP-Einträge durch Abfrage der Protokoll-Daten an.
Arp-Cache löschen: arp -d
arp -d funktioniert nicht ohne einen zweiten Parameter.
So...
arp -d Inet-Adr.
oder so...
arp -d *
Aktuelle Einträge (arp -a) zu löschen macht wenig Sinn, da sich diese bei der nächsten Abfrage mit arp -a (ohne vorheriges Ping) wieder im Cache befinden.
Ein Ping auf die Broadcast-Adresse des Subnetzes
Das wäre natürlich sehr bequem, doch leider mit hoher Wahrscheinlichkeit nicht erfolgreich... ein Ping an jeden Host im Subnetz zu senden, ist sicherer.
Ziemlich...
arp -a Zeigt aktuelle ARP-Einträge durch Abfrage der Protokoll-Daten an.
"aktuelle" Einträge des lokalen Arp-Cache.
Das hat nix mit dem tatsächlichen Zustand im Netz zu tun.
Hab es auch mal kurz ausprobiert und schlage vor das auch selbst nochmal zu probieren:
Der arp-Befehl scheint demnach also tatsächlich lediglich den lokalen Cache auszulesen und würde demnach nicht dazu dienen können um zu überprüfen ob sich ein bestimmtes Gerät gerade im Netz befindet.
Aktuelle Einträge (arp -a) zu löschen macht wenig Sinn, da sich diese bei der nächsten Abfrage mit arp -a (ohne vorheriges Ping) wieder im Cache befinden.
Wie oben beschrieben werden alle Einträge aus dem lokalen Cache gelöscht.
Macht man das nicht hat man auch noch Einträge mit drin von Geräten, zu welchen seitens des Rechners bereits eine Verbindung bestand, die tatsächlich aber nicht mehr im Netz sind.
Also einmal den Cache bereinigen und durch einen Arp-Broadcast wieder mit dem aktuellen Zustand befüllen.
arp -d funktioniert nicht ohne einen zweiten Parameter.
[...]
arp -d *
- super Tipp!
ein Ping an jeden Host im Subnetz zu senden, ist sicherer.
Ja viele Betriebssysteme blocken Anfragen auf der Broadcast-Adresse.
Und so ne Schleife über alle IPs ist auch in AutoIt schnell gebastelt - nur halt unheimlich langsam.
Daher wüsste ich jetzt nicht wie man auf die Schnelle rausfindet ob ein Gerät mit einer bestimmten MAC-Adresse sich gerade im Netz befindet.
Ich habe hier zwei Scripts für euch...
ScanArpCache.au3 - ist von mir und erfordert erhöhte Rechte für das Löschen des Arp-Cache!
Examples:
ScanArpCache.exe <MAC-Address>|<HostName>|<IP-Address> [<Wait>]
ScanArpCache.exe <SubNet> [<Start>] [<End>] [<Wait>]
arpscan.au3 - erste Version ist von SoulA, hier aber die von mir geänderte Version von dexto und diese erfordert keine erhöhten Rechte!
Zusätzlich benötigt wird (ist aber alles im Archiv arpscan.zip enthalten):
winpcapau3.zip - Hiervon wird die winpcap.au3 von arpscan.au3 als include geladen.
npcap-0.9994.exe - Packet capture library for Windows - um (ARP-)Pakete mitlesen zu können, muss installiert werden, damit arpscan.au3 funktioniert.
Alle nötigen Links sind in arpscan.au3 enthalten.
PS: Habe winpcap.au3 entpackt und ein paar Zeilen geändert, das Archiv winpcapau3.zip ist aber original.
Examples:
arpscan.exe 192.168.1.1
arpscan.exe 192.168.1.1-192.168.1.10
Und so ne Schleife über alle IPs ist auch in AutoIt schnell gebastelt - nur halt unheimlich langsam.
In ScanArpCache.au3 habe ich das so gelöst:
; Sorgt dafür, dass die angepingten IPs inkl. MAC im ARP-Cache landen, wenn das Gerät erreichbar ist.
Func _PingSubNet($sSubNet, $iStart = 1, $iEnd = 254, $iWait = 0)
RunWait(@ComSpec & StringFormat(' /C FOR /L %%L IN (%i,1,%i) DO @ping >nul -4 -n 1 -w %i %s.%%L', $iStart, $iEnd, $iWait, $sSubNet), '', @SW_HIDE)
EndFunc ;==>_PingSubNet