DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > Hat wer Lust WakeOnLAN zu portieren ? | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2006-03-02, 15:42 h Malle Posts: 12 User |
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 */ [ - Answer - Quote - Direct link - ] |
2006-03-02, 16:10 h Solar Posts: 3680 User |
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: Alles UNIX-Includes... [ - Answer - Quote - Direct link - ] |
2006-03-02, 16:17 h thomas Posts: 7718 User |
@Solar:Zitat: 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: 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/ [ - Answer - Quote - Direct link - ] |
2006-03-02, 16:29 h Malle Posts: 12 User |
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. [ - Answer - Quote - Direct link - ] |
2006-03-02, 17:09 h Solar Posts: 3680 User |
OK, sorry. Ich dachte, Du wolltest Deinen Amiga aufwecken. [ - Answer - Quote - Direct link - ] |
2006-03-02, 19:25 h ylf Posts: 4112 User |
Das Aufwecken sollte auch mit einem einfachen Ping möglich sein. bye, ylf [ - Answer - Quote - Direct link - ] |
2006-03-02, 20:40 h Flinx Posts: 1073 User |
Zitat: Nein. Was willst Du denn anpingen? Wenn der PC ausgeschaltet ist, hat er keine IP-Adresse, deshalb wird Broadcast mit der MAC-Adresse gebraucht. [ - Answer - Quote - Direct link - ] |
2006-03-02, 21:53 h FischX Posts: 436 User |
Wieso schickst du das "Einschaltsignal" nicht mit netcat? [ - Answer - Quote - Direct link - ] |
2006-03-02, 22:38 h ylf Posts: 4112 User |
Zitat: 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. ] [ - Answer - Quote - Direct link - ] |
2006-03-04, 12:21 h Malle Posts: 12 User |
@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 [ - Answer - Quote - Direct link - ] |
2006-03-04, 23:04 h FischX Posts: 436 User |
@Malle: aber netcat funktioniert schon? [ - Answer - Quote - Direct link - ] |
2006-04-14, 14:48 h jaokim Posts: 2 User |
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.) [ - Answer - Quote - Direct link - ] |
2006-04-14, 14:58 h _PAB_ Posts: 3016 User |
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. [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Hat wer Lust WakeOnLAN zu portieren ? | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |