Jump to content

psadac

Members
  • Posts

    2
  • Joined

  • Last visited

Profile Information

  • Location
    France

psadac's Achievements

Seeker

Seeker (1/7)

0

Reputation

  1. i needed this kind of functionality, but rewritten without temporary file, using wmi, regexp and bitwise operations : #Region AutoIt3Wrapper directives section #AutoIt3Wrapper_Prompt=y #AutoIt3Wrapper_Run_Debug_Mode=n #AutoIt3Wrapper_UseUpx=y #AutoIt3Wrapper_Allow_Decompile=n #AutoIt3Wrapper_UseAnsi=y #AutoIt3Wrapper_Res_Comment=send wake on lan packet to a mac address #AutoIt3Wrapper_Res_Description=wake on lan packet generator #AutoIt3Wrapper_Res_Fileversion=1.0.0.30 #AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y #AutoIt3Wrapper_Res_LegalCopyright=CopyLeft 2007 - psadac #AutoIt3Wrapper_Res_Field=Licence|GNU GPL V2 (http://www.gnu.org/copyleft/gpl.html) #EndRegion #NoTrayIcon #include <String.au3> Opt("MustDeclareVars", 1) Opt("RunErrorsFatal", 0) Const $wbemFlagReturnImmediately = 0x10 Const $wbemFlagForwardOnly = 0x20 ; Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address Func ip2long($ip_str) Local $ip_arr = StringRegExp($ip_str, "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})", 1) If @error Then SetError(1) ; incorrect address Return 0 EndIf Return BitOR( _ BitShift($ip_arr[0], -24), _ BitShift($ip_arr[1], -16), _ BitShift($ip_arr[2], -8), _ $ip_arr[3]) EndFunc ;==>ip2long ; Converts an (IPv4) Internet network address into a string in Internet standard dotted format Func long2ip($ip) Return BitAND(BitShift($ip, 24), 255) & "." & _ BitAND(BitShift($ip, 16), 255) & "." & _ BitAND(BitShift($ip, 8), 255) & "." & _ BitAND($ip, 255) EndFunc ;==>long2ip ; sends a wake-on-lan packet on the broadcast address Func wol($macAddr, $broadcastAddr) UDPStartup() Local $conn = UDPOpen($broadcastAddr, 7) Local $packet = _HexToString("FFFFFFFFFFFF" & _StringRepeat(StringUpper($macAddr), 16)) UDPSend($conn, $packet) If @error Then SetError(@error) Return False EndIf UDPCloseSocket($conn) UDPShutdown() Return True EndFunc ;==>wol If $cmdline[0] <> 1 Then MsgBox(48, "Error", "usage" & @TAB & ": " & @ScriptName & " mac_address" & @CRLF & _ "example" & @TAB & ": " & @ScriptName & " 005056C00001") Exit EndIf Local $macAddr = $cmdline[1] If StringRegExp($macAddr, "[[:xdigit:]]{12}", 0) = 0 Then MsgBox(48, "Error", "the mac address must be 12 hex digits.") Exit EndIf ; send wake on lan packet on each ip enabled local interface Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2") Local $colItems = $objWMIService.ExecQuery ("SELECT IPAddress, IPSubnet FROM Win32_NetworkAdapterConfiguration " & _ "WHERE IPEnabled<>0", "WQL", BitOR($wbemFlagReturnImmediately, $wbemFlagForwardOnly)) If IsObj($colItems) Then For $objItems In $colItems With $objItems Local $ip = ip2long(.IPAddress (0)) If $ip <> 0 Then Local $subnet = ip2long(.IPSubnet (0)) Local $broadcast_str = long2ip(BitOR($ip, BitNOT($subnet))) If wol($macAddr, $broadcast_str) Then MsgBox(64, "Info", "Wake on lan packet sent to MAC address '" & $macAddr & _ "' using broadcast address '" & $broadcast_str & "'.") Else MsgBox(48, "Error", "Failed to send Wake on lan packet") EndIf EndIf EndWith Next EndIf
  2. I've just needed these functions for little script, but i think it would be better to use bit manipulation functions : ; Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address Func ip2long($ip_str) Local $ip = StringSplit($ip_str, '.') Return BitOR(BitShift($ip[1], -24), BitShift($ip[2], -16), BitShift($ip[3], -8), $ip[4]) EndFunc ;==>ip2long ; Converts an (IPv4) Internet network address into a string in Internet standard dotted format Func long2ip($ip) Return BitAND(BitShift($ip, 24), 255) & "." & _ BitAND(BitShift($ip, 16), 255) & "." & _ BitAND(BitShift($ip, 8), 255) & "." & _ BitAND($ip, 255) EndFunc ;==>long2ip
×
×
  • Create New...