Bonjour,
je reviens vers vous concernant l'envoi d'un paquet UDP sur
255.255.255.255, ca ne marche pas chez moi, je suis en v3.3.14.1
avec SmartSniff sur mon PC je ne vois aucun paquet sortir. j'ai fait quelques recherches et j'ai trouver ceci:
https://www.autoitscript.com/forum/topi ... esnt-work/
et cela nous mene a ce rapport de Bug:
https://www.autoitscript.com/trac/autoit/ticket/938
et visiblement cela a été corrigé depuis la V3.3.1.1
Mais chez moi cela ne marche pas, et ce n'est pas un problème avec mon PC ou ma carte réseau car avec
WakeMeOnLan j'arrive a envoyer un paquet WOL sur 255.255.255.255, que je vois bien sortir de mon PC avec smartsniff, et qui démarre bien le PC ciblé.
voici mon code:
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=icone.ico
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Res_Fileversion=1.0.0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$aArray = _IPDetails()
Global $LIVEBOX = $aArray[3]
Global $MASK = $aArray[4]
Global $IPBroadcast = _BroadcastIPCalc($LIVEBOX, $MASK)
Global $sDevice_list = ""
Global $sMenu = ""
Global $sDefaut_device = ""
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Wake On Lan", 306, 88, 365, 267)
$Combo1 = GUICtrlCreateCombo("", 8, 16, 289, 25, $CBS_DROPDOWNLIST)
$Button1 = GUICtrlCreateButton("Réveiller !", 224, 48, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
Device_list()
GUICtrlSetData($Combo1, $sMenu, $sDefaut_device)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
$sDevice = GUICtrlRead($Combo1)
$aMAC = StringSplit($sDevice, "/")
$MACAddress = StringReplace($aMAC[2], " ", "") ; on enelève les espaces
$MACAddress = StringReplace($MACAddress, ":", "") ; on enelève les :
UDPStartup()
$connexion = UDPOpen($IPBroadcast, 7)
$res = UDPSend($connexion, GenerateMagicPacket($MACAddress))
;MsgBox(0, "", "Paquet envoyé")
UDPCloseSocket($connexion)
UDPShutdown()
EndSwitch
WEnd
; Conversion Hexa vers Char
Func HexToChar($strHex)
Return Chr(Dec($strHex))
EndFunc ;==>HexToChar
; Fonction pour générer le "Paquet magique"
Func GenerateMagicPacket($strMACAddress)
$MagicPacket = ""
$MACData = ""
For $p = 1 To 11 Step 2
$MACData = $MACData & HexToChar(StringMid($strMACAddress, $p, 2))
Next
For $p = 1 To 6
$MagicPacket = HexToChar("ff") & $MagicPacket
Next
For $p = 1 To 16
$MagicPacket = $MagicPacket & $MACData
Next
Return $MagicPacket
EndFunc ;==>GenerateMagicPacket
Func Device_list()
If LB_type() = "lbv3fr" Then ; Livebox 3
$PARAMS = '{"parameters":{"expression":".Active==false","traverse":"down","flags":""}}'
;$PARAMS = '{"parameters":{}}'
$oHTTP.Open("POST", "http://" & $LIVEBOX & "/sysbus/Devices:get", False)
$oHTTP.Send($PARAMS)
$sDevice_list = $oHTTP.ResponseText
$aDevices = StringRegExp($sDevice_list, '(?>"Key":"([^"]*)")(?>.*?Name":"([^"]*)")(?>.*?"Active":([^,]*))(?>.*?Layer2Interface":"([^"]*)")', 3)
ElseIf LB_type() = "lbv2fr" Then ; Livebox 2
$PARAMS = '{"parameters":{}}'
$oHTTP.Open("POST", "http://" & $LIVEBOX & "/sysbus/Hosts:getDevices", False)
$oHTTP.Send($PARAMS)
$sDevice_list = $oHTTP.ResponseText
$aDevices = StringRegExp($sDevice_list, '(?>"physAddress":"([^"]*)")(?>.*?hostName":"([^"]*)")(?>.*?"active":([^,]*))(?>.*?layer2Interface":"([^"]*)")', 3)
EndIf
If IsArray($aDevices) Then
For $i = 0 To UBound($aDevices) - 1 Step 4
If $aDevices[$i + 2] = "false" And $aDevices[$i + 3] = "eth0" Then
;If $aDevices[$i + 3] = "eth0" Then
If $sDefaut_device = "" Then
$sDefaut_device = $aDevices[$i + 1] & " / " & $aDevices[$i]
EndIf
$sMenu &= $aDevices[$i + 1] & " / " & $aDevices[$i] & "|"
EndIf
Next
EndIf
EndFunc ;==>Device_list
Func LB_type()
$oHTTP.Open("GET", "http://" & $LIVEBOX, False)
$oHTTP.Send()
$return = $oHTTP.ResponseText
$aModel = StringRegExp($return, "BUILD_PROJECT: '(.*?)',", 3)
If IsArray($aModel) Then
$sModel = $aModel[0]
Else
MsgBox(48, "ERREUR", "Model de Livebox inconnu")
Exit
EndIf
Return $sModel
EndFunc ;==>LB_type
Func _IPDetails()
Local $oWMIService = ObjGet('winmgmts:{impersonationLevel = impersonate}!\\' & '.' & '\root\cimv2')
Local $oColItems = $oWMIService.ExecQuery('Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True', 'WQL', 0x30), $aReturn[5] = [0]
If IsObj($oColItems) Then
For $oObjectItem In $oColItems
;If $oObjectItem.IPAddress(0) == @IPAddress1 Then
If $oObjectItem.DefaultIPGateway(0) <> '' Then
$aReturn[0] = 5
$aReturn[1] = $oObjectItem.IPAddress(0)
$aReturn[2] = $oObjectItem.MACAddress
$aReturn[3] = $oObjectItem.DefaultIPGateway(0)
$aReturn[4] = $oObjectItem.IPSubnet[0]
EndIf
Next
EndIf
Return SetError($aReturn[0] = 0, 0, $aReturn)
EndFunc ;==>_IPDetails
Func _BroadcastIPCalc($sIP, $sMask)
If NOT _IPv4_IsValide($sIP) OR NOT _IPv4_IsValide($sMask) Then Return SetError(1, 0, 0)
Local $aIP = StringSplit($sIP, "."), $aMask = StringSplit($sMask, ".")
Local $aCalc[5][2], $sBroadcastAddr
For $i = 1 To $aIP[0]
$aCalc[$i][0] = BitAND($aIP[$i], $aMask[$i])
$aCalc[$i][1] = BitNOT($aMask[$i] - 256)
$sBroadcastAddr &= ($i = 1 ? "" : ".") & BitOR($aCalc[$i][0], $aCalc[$i][1])
Next
Return $sBroadcastAddr
EndFunc
Func _IPv4_IsValide($sIP)
Return StringRegExp($sIP, "^(?:(?:(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?1))$")
EndFunc
Le but de celui-ci est de récupérer dans un menu déroulant la liste des équipements innactifs de ma LiveBox. et donc de les redémarrer en envoyant un paquet magique.
Donc jusque là je
calculais l'ip de broadcast du sous réseau, jusqu'à ce que j'apprenne que "je me faisait des nœuds au cerveau" et qu'un simple envoi du paquet magique sur
255.255.255.255 fonctionnait.
J'ai vérifié avec WakeMeOnLan et c'est vrai, mais dans mon script si je remplace à la ligne 48:
par:
et bien cela ne fonctionne pas, aucune erreur n'est renvoyée et aucun paquet ne sort de l'application.