wak on lan

Anfängerfragen zum Programmieren mit PureBasic.
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

wak on lan

Beitrag von frankmannb »

Hallo an alle Forumsmitglieder,

ich plane mir eine kleines Programm zu schreiben welches nach Aufruf meinen Home-Server aufweckt. Ich weiss, es gibt im Netz schon Diverse wake on lan tools die aber alle ein Konsolenfenster anfordern und in Windows sichtbar machen. Mein Ziel ist es ohne cmd den Befehl abzusetzen weiss aber nicht wo ich da ansetzen kann. Über die Suchfunktion habe ich leider nichts brauchbares gefunden. Hat jemand von euch eine Idee?

Besten Dank und Grüße frankmannb
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: wak on lan

Beitrag von Josh »

schon mal die suche mit wake on lan probiert? zumindest im englischen forum hab ich auf die schnelle was gefunden. wie brauchbar das ist, ist ne andere frage.

am besten verwendest du immer die bessere forensuche
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: wak on lan

Beitrag von NicTheQuick »

Du kannst auch von PB aus einfach die cmd-Befehle aufrufen und die Ausgabe des Programms ins Nichts umleiten. Dann sieht man auch nichts.
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

Re: wak on lan

Beitrag von frankmannb »

@Josh

vielen Dank, tatsächlich findet die erweiterte Suche mehr als die einfache. Habe dank dir ein kleines Script gefunden welches ich entsprechend für mich umprogrammiert habe. Hier für alle die villeicht mal auf das gleiche Problem stossen.

Code: Alles auswählen

InitNetwork()

; Hier Mac-Adresse und IP-Broadcastadresse angeben
MacAdress$ = "00-15-17-31-BC-B9"
BroadCast$ = "192.168.178.255"


Structure mac
  mac1.b[6]                                               ; MAC Adress is 6 Bytes long
EndStructure

Structure magic
  magic1.b[102]                                           ; Magic Packet 6x$FF 16xMAC = 102 Bytes
EndStructure


Procedure.s WOL_Storemac(macadress$,*mac_adress.mac)
  Protected pointer1.b=0
  Protected pointer2.b=0
  Protected value.b=0
  Protected tmac.l=0
  Protected wert.l=0
  Protected a$=""
 
  For i=1 To Len(macadress$)
    a$=Mid(macadress$,i,1)
    value=0
    If a$>="0" And a$=<"9"
      wert=Asc(a$)-48
      value=1
    EndIf
    If a$>="a" And a$=<"f"
      wert=Asc(a$)-87
      value=1
    EndIf
    If a$>="A" And a$=<"F"
      wert=Asc(a$)-55
      value=1
    EndIf
    If value = 1
      If pointer1=0
        tmac=tmac+wert*16
      Else
        tmac=tmac+wert
      EndIf
      pointer1+1
      If pointer1>1
        *mac_adress\mac1[pointer2]=tmac
        pointer1=0
        pointer2+1
        tmac=0
      EndIf
    EndIf
  Next
EndProcedure

Procedure.l WOL_SendMagicPacket(macadress$,client_ip.s="255.255.255.255")
  Protected mac_adress.mac
  Protected Success.l=0
  Protected client_bip.l
  Protected client_port.l
  Protected client_bport.w
  Protected client_socket.l
  Protected socket_keepalive.b
  Protected server_mode.l
  Protected magic_packet.magic
 
  WOL_Storemac(macadress$,@mac_adress)
 
  For j=0 To 16
    debugmac$=""
    For i=0 To 5
      If j=0
        magic_packet.magic\magic1[i+j*6] = 255
      Else
        magic_packet.magic\magic1[i+j*6] = mac_adress.mac\mac1[i]
      EndIf
      debugmac$+RSet(Hex(magic_packet.magic\magic1[i+j*6]),3,"00 ")
    Next
    Debug RSet(Hex(j*6),2,"0")+":"+debugmac$
  Next
 
  client_bip = inet_addr_(client_ip)
  client_port = 0
  client_bport = htons_(client_port) ; convert to long
  client_socket = SOCKET_(#AF_INET, #SOCK_DGRAM, #IPPROTO_UDP) ; create the socket
  If client_socket
    socket_keepalive = 1
    If setsockopt_(client_socket, #SOL_SOCKET, #SO_BROADCAST, @socket_keepalive, 1) = 0
      client_sockaddr.SOCKADDR_IN
      client_sockaddr\sin_family = #AF_INET
      client_sockaddr\sin_port = client_bport
      client_sockaddr\sin_addr = client_bip
      server_mode = 0
      If ioctlsocket_(client_socket,#FIONBIO,@server_mode) = 0
        send.l = sendto_(client_socket, @magic_packet, SizeOf(magic_packet), 0, @client_sockaddr, 16)
        If send=SizeOf(magic_packet) And WSAGetLastError_()=0
          Debug "Magic packet send"
          Success=1
        EndIf
      EndIf
    EndIf
   
    closesocket_(client_socket)
  EndIf
 
  ProcedureReturn Success
EndProcedure

WOL_SendMagicPacket(MacAdress$,BroadCast$)
Codetags ergänzt (Code-Button oben)
-Andesdaf
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Re: wak on lan

Beitrag von a14xerus »

testen kann ich das grad leider nicht, aber mal so allgemein:
Bitte die

Code: Alles auswählen

Code-tags
benutzen :)

//edit für josh: die einrückungen sind nur sichtbar wenn man die code.tags beuntzt... ohen tags werdne leerezeichen einfach ignoriert (is so eine html-sache ;) )
Zuletzt geändert von a14xerus am 21.03.2010 23:39, insgesamt 1-mal geändert.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: wak on lan

Beitrag von Josh »

a14xerus hat geschrieben:testen kann ich das grad leider nicht, aber mal so allgemein:
Bitte die

Code: Alles auswählen

Code-tags
benutzen :)
und :roll: einrückungen
Antworten