- Offizieller Beitrag
Heyho,
Ich habe mal ne kleine Frage: Ich versuche via Multicast datagrams sowohl die IP Adresse als auch die MAC Adresse von einem betsimmten PC (Um genau zu sein einer Medienbox) im Netzwerk zu bekommen. Es gibt ein Programm, welches dies erfolgreich für diese Box tut. Ich habe nun via Wireshark geguckt wie das Programm dies macht. Er sendet über dem UDP Protokoll zwei Strings an die IP 225.1.1.1 über den Port 5555.
Im Anhang mal das, was Wireshark mir rausgespuckt hat. Ich habe es nun geschafft, in AutoIt das nachzu bilden, bzw. es kommt exakt das gleiche bei WireShark an, wenn ich mein Script laufen lasse, allerdings kommt in meinem Script nie eine eingehende Nachricht an (UDPRecv).
Hier mal das Script:
Spoiler anzeigen
;Das sind die beiden Strings die gesendet werden.
$b01 = Binary("0x5365617263685f47726f75703a300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
$b02 = Binary("0x506f705f5365727665723a3139322e3136382e302e32000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
;Hier werden sie nochma in die Console ausgegeben
ConsoleWrite(BinaryToString($b01))
ConsoleWrite(@CRLF)
ConsoleWrite(BinaryToString($b02))
ConsoleWrite(@CRLF)
UDPStartup()
OnAutoItExitRegister("cleanup")
;Hier Verbindet er sich zu 225.1.1.1 auf dem Port 5555 (gibt kein Error zurück)
$hUPDopen = UDPOpen("225.1.1.1", 5555)
If @error Then Exit MsgBox(16, "", "")
;Hier bindet er ein socket auf meine lokale ip adresse. in meinem Fall ist das 192.168.0.2 (siehe in der Console, dort ist die IP)
;Ich bin mir nicht sicher ob ich das überhaupt brauche...
$hUPDbind = UDPBind(@IPAddress1, 32769)
If @error Then Exit MsgBox(16, "", "")
;Nun sendet er die beiden Strings
ConsoleWrite("Send: " & UDPSend($hUPDopen, $b01) & "/" & BinaryLen($b01) & @CRLF)
Sleep(100)
ConsoleWrite("Send: " & UDPSend($hUPDopen, $b02) & "/" & BinaryLen($b02) & @CRLF)
While 1
;Hier fragt er nach receives ab..
$data = UDPRecv($hUPDopen, 50)
If @error Then ConsoleWrite("Err: " & @error & @CRLF)
$data &= UDPRecv($hUPDbind, 50)
If @error Then ConsoleWrite("Err2: " & @error & @CRLF)
;..kommt aber leider nie was an
If $data <> "" Then MsgBox(0, "", $data)
Sleep(200)
WEnd
Func cleanup()
UDPCloseSocket($hUPDopen)
UDPCloseSocket($hUPDbind)
UDPShutdown()
EndFunc ;==>Cleanup
Es sieht relativ ähnlich aus, wie IBM das für ihre Boxen tut:
http://publib.boulder.ibm.com/infocenter/ise…x1multicast.htm
Leider werde ich aus dem Code nicht richtig schlau...
Wäre super wenn mir jemand helfen kann.
Gruß,
Spider