amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Hat wer Lust WakeOnLAN zu portieren ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

02.03.2006, 15:42 Uhr

Malle
Posts: 12
Nutzer
Hallo ehrenwerte Amiga Programmierer !

Hat jemand Lust diesen Wake on LAN source auf den Amiga zu portieren ?
Damit kann ich meinen PC übers Netzwerk starten und brauch nicht jedesmal hinzulaufen..
Herunterfahren tue ich ihn dann über RDesktop.

Ich würde es ja selber machen, aber ich hab keine Ahnung von C... :-(

/*
* $Id: wake-on-lan.c,v 1.1 2000/11/28 07:11:35 ab Exp $
*
* Copyright(C) 2000 Eugene M. Kim. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Author's name may not be used endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* usage: wake-on-lan interface MAC-address
*
* wake-on-lan crafts and sends a Wake-on-LAN packet to the specified MAC
* address over the given interface.
*/

#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <net/bpf.h>
#include <net/ethernet.h>
#include <net/if.h>

#include <err.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sysexits.h>
#include <unistd.h>

#include "pathnames.h"

#ifndef SYNC_LEN
#define SYNC_LEN 12
#endif

#ifndef DESTADDR_COUNT
#define DESTADDR_COUNT 16
#endif

int main (int argc, char **argv, char **envp);
int get_bpf (void);
void bind_if_to_bpf (char const *ifname, int bpf);
void get_ether (char const *text, struct ether_addr *addr);
void send_wakeup (int bpf, struct ether_addr const *addr);
void usage (char const *fmt, ...);

int
main
(int argc, char **argv, char **envp)
{
int bpf;
struct ether_addr macaddr;
if (argc != 3)
usage(NULL);

bpf = get_bpf();
bind_if_to_bpf(argv[1], bpf);
get_ether(argv[2], &macaddr);
send_wakeup(bpf, &macaddr);

exit(EX_OK);
}

int
get_bpf
(void)
{
int i, fd;
char *path;
i = 0;
for (;; i++) {
asprintf(&path, BPF_PATH_FORMAT, i);
if (path == NULL)
errx(EX_SOFTWARE, "can't allocate pathname for bpf");
fd = open(path, O_RDWR);
if (fd != -1) {
free(path);
return fd;
}
switch (errno) {
case EBUSY:
continue;
case ENOENT:
errx(EX_OSERR, "no free bpf device");
}
err(EX_OSERR, "open(%s)", path);
}
}

void
bind_if_to_bpf
(char const *ifname, int bpf)
{
struct ifreq ifr;
u_int dlt;

if (strlen(ifname) >= sizeof(ifr.ifr_name))
errx(EX_USAGE, "interface name length too long");
strcpy(ifr.ifr_name, ifname);
if (ioctl(bpf, BIOCSETIF, &ifr) == -1)
err(EX_OSERR, "ioctl(bpf, BIOCSETIF)");
if (ioctl(bpf, BIOCGDLT, &dlt) == -1)
err(EX_OSERR, "ioctl(bpf, BIOCGDLT)");
if (dlt != DLT_EN10MB)
errx(EX_USAGE, "%s is not an Ethernet interface", ifname);
}

void
get_ether
(char const *text, struct ether_addr *addr)
{
struct ether_addr *paddr;
paddr = ether_aton(text);
if (paddr != NULL) {
*addr = *paddr;
return;
}
if (ether_hostton(text, addr))
usage("can't parse %s as an Ethernet MAC address", text);
}

void
send_wakeup
(int bpf, struct ether_addr const *addr)
{
struct {
struct ether_header hdr;
u_char data[SYNC_LEN + ETHER_ADDR_LEN * DESTADDR_COUNT];
} pkt;
u_char *p;
int i;
ssize_t r;

memset(pkt.hdr.ether_dhost, 0xff, sizeof(pkt.hdr.ether_dhost));
pkt.hdr.ether_type = htons(0);
memset(pkt.data, 0xff, SYNC_LEN);
for (p = pkt.data + SYNC_LEN, i = 0; i < DESTADDR_COUNT; p +=
ETHER_ADDR_LEN, i++)
bcopy(addr->octet, p, ETHER_ADDR_LEN);
r = write(bpf, &pkt, sizeof(pkt));
if (r == -1)
err(EX_OSERR, "write(bpf)");
if (r != sizeof(pkt))
errx(EX_OSERR, "write(bpf) returned short count %d", (int)r);
}

void
usage
(char const *fmt, ...)
{
if (fmt != NULL) {
va_list va;
va_start(va, fmt);
vwarnx(fmt, va);
va_end(va);
}
fprintf(stderr, "usage: wake-on-lan interface MAC-addressn");
exit(EX_USAGE);
}


/* ENDE */

[ - Antworten - Zitieren - Direktlink - ]

02.03.2006, 16:10 Uhr

Solar
Posts: 3680
Nutzer
Vergiß es.

Für Wake-on-LAN braucht es Support für Standby-Mode, sowie entsprechende Netzwerkkarten.

Und selbst dann ist der von Dir gepostete Source nur die Spitze des Eisbergs:

Zitat:
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <net/bpf.h>
#include <net/ethernet.h>
#include <net/if.h>

#include <err.h>
#include <fcntl.h>
#include <sysexits.h>
#include <unistd.h>


Alles UNIX-Includes...

[ - Antworten - Zitieren - Direktlink - ]

02.03.2006, 16:17 Uhr

thomas
Posts: 7717
Nutzer
@Solar:

Zitat:
Für Wake-on-LAN braucht es Support für Standby-Mode, sowie entsprechende Netzwerkkarten.

Er möchte nicht Wake-On-LAN auf dem Amiga realisieren, sondern er möchte vom (laufenden) Amiga aus seinen PC aufwecken, der bereits Wake-On-LAN unterstützt.


Zitat:
Alles UNIX-Includes...

Zumindest der erste Block ist außer ethernet.h beim bsdsocket-SDK dabei (Miami, AmiTCP)

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

02.03.2006, 16:29 Uhr

Malle
Posts: 12
Nutzer
Richtig, Thomas.

Natürlich unterstützt mein Server WOL. Ich nutze es ja auch bereits von den anderen PCs aus.
WOL sendet einfach nur die MAC Adresse 6-20 mal als Broadcast aus und
die entsprechende LAN Karte mit dieser MAC Addresse reagiert darauf und der Computer startet.

Der Rechner, der das WOL Paket sendet braucht selber kein WOL können.
Daher spielt die Netzkarte absolut keine Rolle. Kann also auch ne 10mbit ISA Karte sein.

Ich habe, falls gewünscht/benötigt noch mehr Infos zu WOL und auch binaries für PC/Windows.


[ - Antworten - Zitieren - Direktlink - ]

02.03.2006, 17:09 Uhr

Solar
Posts: 3680
Nutzer
OK, sorry. Ich dachte, Du wolltest Deinen Amiga aufwecken.

[ - Antworten - Zitieren - Direktlink - ]

02.03.2006, 19:25 Uhr

ylf
Posts: 4112
Nutzer
Das Aufwecken sollte auch mit einem einfachen Ping möglich sein.

bye, ylf

[ - Antworten - Zitieren - Direktlink - ]

02.03.2006, 20:40 Uhr

Flinx
Posts: 1073
Nutzer
Zitat:
Original von ylf:
Das Aufwecken sollte auch mit einem einfachen Ping möglich sein.


Nein. Was willst Du denn anpingen? Wenn der PC ausgeschaltet ist, hat er keine IP-Adresse, deshalb wird Broadcast mit der MAC-Adresse gebraucht.

[ - Antworten - Zitieren - Direktlink - ]

02.03.2006, 21:53 Uhr

FischX
Posts: 436
Nutzer
Wieso schickst du das "Einschaltsignal" nicht mit netcat?

[ - Antworten - Zitieren - Direktlink - ]

02.03.2006, 22:38 Uhr

ylf
Posts: 4112
Nutzer
Zitat:
Original von Flinx:
Zitat:
Original von ylf:
Das Aufwecken sollte auch mit einem einfachen Ping möglich sein.


Nein. Was willst Du denn anpingen? Wenn der PC ausgeschaltet ist, hat er keine IP-Adresse, deshalb wird Broadcast mit der MAC-Adresse gebraucht.


Naja, ich habe einen Router, der die Mac-Adresse aller meiner Rechner kennt. Vielleicht ist dies der Grund, warum ein simpler Ping trozdem in die richtige Richtung geht.

bye, ylf

[ Dieser Beitrag wurde von ylf am 02.03.2006 um 22:52 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

04.03.2006, 12:21 Uhr

Malle
Posts: 12
Nutzer
@FischX:

Sag mir mal wie ich das machen soll...
Wie kann ich 6xFF und dann 16xMAC Adresse an 255.255.255.255 über port 40000 senden mit netcat ???

Er bricht immer ab mit :
too many output retries : Permission denied




[ - Antworten - Zitieren - Direktlink - ]

04.03.2006, 23:04 Uhr

FischX
Posts: 436
Nutzer
@Malle:
aber netcat funktioniert schon?

[ - Antworten - Zitieren - Direktlink - ]

14.04.2006, 14:48 Uhr

jaokim
Posts: 2
Nutzer
Auf Aminet gibt es HPWake. Mit source. Ich denke es ist die gleiche source da oben.

Es funktioniert super mit OS4! Ich benutze es um meinen PC aufzuwachen.

Es wäre super mit einer Program so dass der PC RDesktop automatisch starten könnte als er gebootet hat.


(Und, entschuldigung für die menge von Fehler die in dieses meines erstes Post muss sein. Ich registrierte mich hier weil ich mein Deustch benutzen, und hoffentlich verbessern, möchte. Ich komme aus Schweden.)

[ - Antworten - Zitieren - Direktlink - ]

14.04.2006, 14:58 Uhr

_PAB_
Posts: 3016
Nutzer
Erstmal: postet doch bitte Programmcode entweder als Link oder innerhalb eines [code]-Tags.

Dann müßte dieses Broadcast-Paket auch mit Ping verschickbar sein.
Aber HPWake ist sicher genauso gut, wenn nicht besser.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Hat wer Lust WakeOnLAN zu portieren ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.