Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HW] Poweron On Lan Demand
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

Goto page 1, 2  Next  
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian)
View previous topic :: View next topic  
Author Message
koma
Advocate
Advocate


Joined: 06 Jun 2003
Posts: 2702
Location: Italy

PostPosted: Mon Dec 06, 2004 6:50 pm    Post subject: [HW] Poweron On Lan Demand Reply with quote

Ciao a tutti. ho letto in vari bios che esiste questa opzione di poweron on lan. Qualcuno sa come si attiva? Che tipo di icmp bisogna inviare o cos'altro bisogna inventarsi?
_________________
http://www.youtube.com/watch?v=_yoJI-Tl94g GLORY GLORY HYPNOTOAD
Back to top
View user's profile Send private message
gutter
Bodhisattva
Bodhisattva


Joined: 13 Mar 2004
Posts: 7162
Location: Aarau, Aargau, Switzerland

PostPosted: Mon Dec 06, 2004 6:55 pm    Post subject: Re: [HW] Poweron On Lan Demand Reply with quote

koma wrote:
Ciao a tutti. ho letto in vari bios che esiste questa opzione di poweron on lan. Qualcuno sa come si attiva? Che tipo di icmp bisogna inviare o cos'altro bisogna inventarsi?


E' una voce del Bios delle moderne mainboard. Non ti so dire altro dal momento che non l'ho mai usata.
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
n3mo
l33t
l33t


Joined: 28 Mar 2004
Posts: 657
Location: In a Cruel World

PostPosted: Mon Dec 06, 2004 6:56 pm    Post subject: Reply with quote

ping
_________________
Google, really.
Back to top
View user's profile Send private message
koma
Advocate
Advocate


Joined: 06 Jun 2003
Posts: 2702
Location: Italy

PostPosted: Mon Dec 06, 2004 7:11 pm    Post subject: Reply with quote

in pratica la scheda mantiene l'ip?
_________________
http://www.youtube.com/watch?v=_yoJI-Tl94g GLORY GLORY HYPNOTOAD
Back to top
View user's profile Send private message
Josuke
Veteran
Veteran


Joined: 07 May 2003
Posts: 1175
Location: Italy - Bolzano

PostPosted: Mon Dec 06, 2004 7:45 pm    Post subject: Reply with quote

n3mo wrote:
ping


mai usato..però mi sembrava di aver letto che il semplice ping non funzionava..bisognava spedirne uno particolare...ma potrei sbagliarmi
_________________
fletto i muscoli...e sono nel vuoto
Back to top
View user's profile Send private message
koma
Advocate
Advocate


Joined: 06 Jun 2003
Posts: 2702
Location: Italy

PostPosted: Mon Dec 06, 2004 7:49 pm    Post subject: Reply with quote

è quello che ho letto anche io tipo che dovevo pingare sì ma il mac address se nn sbaglio ma potrei star dicendo un'emerita cagata
_________________
http://www.youtube.com/watch?v=_yoJI-Tl94g GLORY GLORY HYPNOTOAD
Back to top
View user's profile Send private message
tocas
Apprentice
Apprentice


Joined: 01 Jan 2004
Posts: 280
Location: 43°50'-10°27'

PostPosted: Mon Dec 06, 2004 8:28 pm    Post subject: Re: [HW] Poweron On Lan Demand Reply with quote

koma wrote:
Ciao a tutti. ho letto in vari bios che esiste questa opzione di poweron on lan. Qualcuno sa come si attiva? Che tipo di icmp bisogna inviare o cos'altro bisogna inventarsi?


Questo è il "pacchetto magico" .

---
Back to top
View user's profile Send private message
oRDeX
Veteran
Veteran


Joined: 19 Oct 2003
Posts: 1325
Location: Italy

PostPosted: Mon Dec 06, 2004 8:36 pm    Post subject: Reply with quote

ti dico solo che il mio pc si accendeva solo perchè era attaccato allo switch...
Back to top
View user's profile Send private message
koma
Advocate
Advocate


Joined: 06 Jun 2003
Posts: 2702
Location: Italy

PostPosted: Mon Dec 06, 2004 9:05 pm    Post subject: Reply with quote

il mio pc però è un pentium (4) tra parentesi.. come posso generare un pacchetto di quel tipo?
_________________
http://www.youtube.com/watch?v=_yoJI-Tl94g GLORY GLORY HYPNOTOAD
Back to top
View user's profile Send private message
Delta9
n00b
n00b


Joined: 07 Mar 2004
Posts: 35

PostPosted: Mon Dec 06, 2004 9:10 pm    Post subject: Reply with quote

prova net-misc/wakeonan. A me va
Back to top
View user's profile Send private message
FonderiaDigitale
Veteran
Veteran


Joined: 06 Nov 2003
Posts: 1710
Location: Rome, Italy

PostPosted: Tue Dec 07, 2004 11:19 am    Post subject: Reply with quote

non e' un ping normale. si tratta di un pacchetto particolare, chiamato magick packet forgiato in parte con il mac address della scheda di rete destinazione, e i campi restanti riempiti in FF.
qui sotto allego semplicissimo programmillo in c per svegliare un determinato mac address.
Code:
/* ether-wake.c: Send a magic packet to wake up sleeping machines. */

static char version_msg[] =
"ether-wake.c: v1.09 11/12/2003 Donald Becker, http://www.scyld.com/";
static char brief_usage_msg[] =
"usage: ether-wake [-i <ifname>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
"   Use '-u' to see the complete set of options.\n";
static char usage_msg[] =
"usage: ether-wake [-i <ifname>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
"\n"
"   This program generates and transmits a Wake-On-LAN (WOL)\n"
"   \"Magic Packet\", used for restarting machines that have been\n"
"   soft-powered-down (ACPI D3-warm state).\n"
"   It currently generates the standard AMD Magic Packet format, with\n"
"   an optional password appended.\n"
"\n"
"   The single required parameter is the Ethernet MAC (station) address\n"
"   of the machine to wake or a host ID with known NSS 'ethers' entry.\n"
"   The MAC address may be found with the 'arp' program while the target\n"
"   machine is awake.\n"
"\n"
"   Options:\n"
"      -b   Send wake-up packet to the broadcast address.\n"
"      -D   Increase the debug level.\n"
"      -i ifname   Use interface IFNAME instead of the default 'eth0'.\n"
"      -p <pw>      Append the four or six byte password PW to the packet.\n"
"               A password is only required for a few adapter types.\n"
"               The password may be specified in ethernet hex format\n"
"               or dotted decimal (Internet address)\n"
"      -p 00:22:44:66:88:aa\n"
"      -p 192.168.1.1\n";

/*
   This program generates and transmits a Wake-On-LAN (WOL) "Magic Packet",
   used for restarting machines that have been soft-powered-down
   (ACPI D3-warm state).  It currently generates the standard AMD Magic Packet
   format, with an optional password appended.

   This software may be used and distributed according to the terms
   of the GNU Public License, incorporated herein by reference.
   Contact the author for use under other terms.

   This source file was originally part of the network tricks package, and
   is now distributed to support the Scyld Beowulf system.
   Copyright 1999-2003 Donald Becker and Scyld Computing Corporation.

   The author may be reached as becker@scyld, or C/O
    Scyld Computing Corporation
    914 Bay Ridge Road, Suite 220
    Annapolis MD 21403

  Notes:
  On some systems dropping root capability allows the process to be
  dumped, traced or debugged.
  If someone traces this program, they get control of a raw socket.
  Linux handles this safely, but beware when porting this program.

  An alternative to needing 'root' is using a UDP broadcast socket, however
  doing so only works with adapters configured for unicast+broadcast Rx
  filter.  That configuration consumes more power.
*/

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>

#if 0                     /* Only exists on some versions. */
#include <ioctls.h>
#endif

#include <sys/socket.h>

#include <sys/types.h>
#include <sys/ioctl.h>
#include <linux/if.h>

#include <features.h>
#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
#include <netpacket/packet.h>
#include <net/ethernet.h>
#else
#include <asm/types.h>
#include <linux/if_packet.h>
#include <linux/if_ether.h>
#endif
#include <netdb.h>
#include <netinet/ether.h>

/* Grrr, no consistency between include versions.
   Enable this if setsockopt() isn't declared with your library. */
#if 0
extern int setsockopt __P ((int __fd, int __level, int __optname,
                     __ptr_t __optval, int __optlen));
#else            /* New, correct head files.  */
#include <sys/socket.h>
#endif

u_char outpack[1000];
int outpack_sz = 0;
int debug = 0;
u_char wol_passwd[6];
int wol_passwd_sz = 0;

static int opt_no_src_addr = 0, opt_broadcast = 0;

static int get_dest_addr(const char *arg, struct ether_addr *eaddr);
static int get_fill(unsigned char *pkt, struct ether_addr *eaddr);
static int get_wol_pw(const char *optarg);

int main(int argc, char *argv[])
{
   char *ifname = "eth0";
   int one = 1;            /* True, for socket options. */
   int s;                  /* Raw socket */
   int errflag = 0, verbose = 0, do_version = 0;
   int perm_failure = 0;
   int i, c, pktsize;
#if defined(PF_PACKET)
   struct sockaddr_ll whereto;
#else
   struct sockaddr whereto;   /* who to wake up */
#endif
   struct ether_addr eaddr;

   while ((c = getopt(argc, argv, "bDi:p:uvV")) != -1)
      switch (c) {
      case 'b': opt_broadcast++;   break;
      case 'D': debug++;         break;
      case 'i': ifname = optarg;   break;
      case 'p': get_wol_pw(optarg); break;
      case 'u': printf(usage_msg); return 0;
      case 'v': verbose++;      break;
      case 'V': do_version++;      break;
      case '?':
         errflag++;
      }
   if (verbose || do_version)
      printf("%s\n", version_msg);
   if (errflag) {
      fprintf(stderr, brief_usage_msg);
      return 3;
   }

   if (optind == argc) {
      fprintf(stderr, "Specify the Ethernet address as 00:11:22:33:44:55.\n");
      return 3;
   }

   /* Note: PF_INET, SOCK_DGRAM, IPPROTO_UDP would allow SIOCGIFHWADDR to
      work as non-root, but we need SOCK_PACKET to specify the Ethernet
      destination address. */
#if defined(PF_PACKET)
   s = socket(PF_PACKET, SOCK_RAW, 0);
#else
   s = socket(AF_INET, SOCK_PACKET, SOCK_PACKET);
#endif
   if (s < 0) {
      if (errno == EPERM)
         fprintf(stderr, "ether-wake: This program must be run as root.\n");
      else
         perror("ether-wake: socket");
      perm_failure++;
   }
   /* Don't revert if debugging allows a normal user to get the raw socket. */
   setuid(getuid());

   /* We look up the station address before reporting failure so that
      errors may be reported even when run as a normal user.
   */
   if (get_dest_addr(argv[optind], &eaddr) != 0)
      return 3;
   if (perm_failure && ! debug)
      return 2;

   pktsize = get_fill(outpack, &eaddr);

   /* Fill in the source address, if possible.
      The code to retrieve the local station address is Linux specific. */
   if (! opt_no_src_addr) {
      struct ifreq if_hwaddr;
      unsigned char *hwaddr = if_hwaddr.ifr_hwaddr.sa_data;

      strcpy(if_hwaddr.ifr_name, ifname);
      if (ioctl(s, SIOCGIFHWADDR, &if_hwaddr) < 0) {
         fprintf(stderr, "SIOCGIFHWADDR on %s failed: %s\n", ifname,
               strerror(errno));
         /* Magic packets still work if our source address is bogus, but
            we fail just to be anal. */
         return 1;
      }
      memcpy(outpack+6, if_hwaddr.ifr_hwaddr.sa_data, 6);

      if (verbose) {
         printf("The hardware address (SIOCGIFHWADDR) of %s is type %d  "
               "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x.\n", ifname,
               if_hwaddr.ifr_hwaddr.sa_family, hwaddr[0], hwaddr[1],
               hwaddr[2], hwaddr[3], hwaddr[4], hwaddr[5]);
      }
   }

   if (wol_passwd_sz > 0) {
      memcpy(outpack+pktsize, wol_passwd, wol_passwd_sz);
      pktsize += wol_passwd_sz;
   }

   if (verbose > 1) {
      printf("The final packet is: ");
      for (i = 0; i < pktsize; i++)
         printf(" %2.2x", outpack[i]);
      printf(".\n");
   }

   /* This is necessary for broadcasts to work */
   if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&one, sizeof(one)) < 0)
      perror("setsockopt: SO_BROADCAST");

#if defined(PF_PACKET)
   {
      struct ifreq ifr;
      strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
      if (ioctl(s, SIOCGIFINDEX, &ifr) == -1) {
         fprintf(stderr, "SIOCGIFINDEX on %s failed: %s\n", ifname,
               strerror(errno));
         return 1;
      }
      memset(&whereto, 0, sizeof(whereto));
      whereto.sll_family = AF_PACKET;
      whereto.sll_ifindex = ifr.ifr_ifindex;
      /* The manual page incorrectly claims the address must be filled.
         We do so because the code may change to match the docs. */
      whereto.sll_halen = ETH_ALEN;
      memcpy(whereto.sll_addr, outpack, ETH_ALEN);

   }
#else
   whereto.sa_family = 0;
   strcpy(whereto.sa_data, ifname);
#endif

   if ((i = sendto(s, outpack, pktsize, 0, (struct sockaddr *)&whereto,
               sizeof(whereto))) < 0)
      perror("sendto");
   else if (debug)
      printf("Sendto worked ! %d.\n", i);

#ifdef USE_SEND
   if (bind(s, (struct sockaddr *)&whereto, sizeof(whereto)) < 0)
      perror("bind");
   else if (send(s, outpack, 100, 0) < 0)
      perror("send");
#endif
#ifdef USE_SENDMSG
   {
      struct msghdr msghdr = { 0,};
      struct iovec iovector[1];
      msghdr.msg_name = &whereto;
      msghdr.msg_namelen = sizeof(whereto);
      msghdr.msg_iov = iovector;
      msghdr.msg_iovlen = 1;
      iovector[0].iov_base = outpack;
      iovector[0].iov_len = pktsize;
      if ((i = sendmsg(s, &msghdr, 0)) < 0)
         perror("sendmsg");
      else if (debug)
         printf("sendmsg worked, %d (%d).\n", i, errno);
   }
#endif

   return 0;
}

/* Convert the host ID string to a MAC address.
   The string may be a
   Host name
    IP address string
   MAC address string
*/

static int get_dest_addr(const char *hostid, struct ether_addr *eaddr)
{
   struct ether_addr *eap;

   eap = ether_aton(hostid);
   if (eap) {
      *eaddr = *eap;
      if (debug)
         fprintf(stderr, "The target station address is %s.\n",
               ether_ntoa(eaddr));
   } else if (ether_hostton(hostid, eaddr) == 0) {
      if (debug)
         fprintf(stderr, "Station address for hostname %s is %s.\n",
               hostid, ether_ntoa(eaddr));
   } else {
      (void)fprintf(stderr,
                 "ether-wake: The Magic Packet host address must be "
                 "specified as\n"
                 "  - a station address, 00:11:22:33:44:55, or\n"
                 "  - a hostname with a known 'ethers' entry.\n");
      return -1;
   }
   return 0;
}


static int get_fill(unsigned char *pkt, struct ether_addr *eaddr)
{
   int offset, i;
   unsigned char *station_addr = eaddr->ether_addr_octet;

   if (opt_broadcast)
      memset(pkt+0, 0xff, 6);
   else
      memcpy(pkt, station_addr, 6);
   memcpy(pkt+6, station_addr, 6);
   pkt[12] = 0x08;            /* Or 0x0806 for ARP, 0x8035 for RARP */
   pkt[13] = 0x42;
   offset = 14;

   memset(pkt+offset, 0xff, 6);
   offset += 6;

   for (i = 0; i < 16; i++) {
      memcpy(pkt+offset, station_addr, 6);
      offset += 6;
   }
   if (debug) {
      fprintf(stderr, "Packet is ");
      for (i = 0; i < offset; i++)
         fprintf(stderr, " %2.2x", pkt[i]);
      fprintf(stderr, ".\n");
   }
   return offset;
}

static int get_wol_pw(const char *optarg)
{
   int passwd[6];
   int byte_cnt;
   int i;

   byte_cnt = sscanf(optarg, "%2x:%2x:%2x:%2x:%2x:%2x",
                 &passwd[0], &passwd[1], &passwd[2],
                 &passwd[3], &passwd[4], &passwd[5]);
   if (byte_cnt < 4)
      byte_cnt = sscanf(optarg, "%d.%d.%d.%d",
                    &passwd[0], &passwd[1], &passwd[2], &passwd[3]);
   if (byte_cnt < 4) {
      fprintf(stderr, "Unable to read the Wake-On-LAN password.\n");
      return 0;
   }
   printf(" The Magic packet password is %2.2x %2.2x %2.2x %2.2x (%d).\n",
         passwd[0], passwd[1], passwd[2], passwd[3], byte_cnt);
   for (i = 0; i < byte_cnt; i++)
      wol_passwd[i] = passwd[i];
   return wol_passwd_sz = byte_cnt;
}

#if 0
{
   to = (struct sockaddr_in *)&whereto;
   to->sin_family = AF_INET;
   if (inet_aton(target, &to->sin_addr)) {
      hostname = target;
   }
   memset (&sa, 0, sizeof sa);
   sa.sa_family = AF_INET;
   strncpy (sa.sa_data, interface, sizeof sa.sa_data);
   sendto (sock, buf, bufix + len, 0, &sa, sizeof sa);
   strncpy (sa.sa_data, interface, sizeof sa.sa_data);
#if 1
   sendto (sock, buf, bufix + len, 0, &sa, sizeof sa);
#else
   bind (sock, &sa, sizeof sa);
   connect();
   send (sock, buf, bufix + len, 0);
#endif
}
#endif


/*
 * Local variables:
 *  compile-command: "gcc -O -Wall -o ether-wake ether-wake.c"
 *  c-indent-level: 4
 *  c-basic-offset: 4
 *  c-indent-level: 4
 *  tab-width: 4
 * End:
 */

_________________
Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica :)
Back to top
View user's profile Send private message
koma
Advocate
Advocate


Joined: 06 Jun 2003
Posts: 2702
Location: Italy

PostPosted: Tue Dec 07, 2004 5:34 pm    Post subject: Reply with quote

li ho provati entrambi ma ha funzionato solo 2 volte poi ha smesso il mac address nn + cambiato sono sicuro e nel bios la voce nn è cambiata.
(oltretutto non sono sicuro che le due volte che ha funzionato abbia funzionato a macchinatotalmente spenta ma in fase di spegnimento)
Tra parentesi ora sono a casa di un amico e nn posso accendere il pc ho provato sia lo script che il programma suggeritomi.

A questo punto mi viene un dubbio non è che si accende in lan solo se è in standby o cmq se nn è totalmente spento?
_________________
http://www.youtube.com/watch?v=_yoJI-Tl94g GLORY GLORY HYPNOTOAD
Back to top
View user's profile Send private message
oRDeX
Veteran
Veteran


Joined: 19 Oct 2003
Posts: 1325
Location: Italy

PostPosted: Tue Dec 07, 2004 5:39 pm    Post subject: Reply with quote

a me funziona a pc spento...ma sei sicuro che sia attivo il wake on lan nel bios??
Cmq il MAC address non cambia mai!
Back to top
View user's profile Send private message
koma
Advocate
Advocate


Joined: 06 Jun 2003
Posts: 2702
Location: Italy

PostPosted: Tue Dec 07, 2004 11:47 pm    Post subject: Reply with quote

ne sono certo ho ricontrollato ora per scrupolo
cmq io spengo con halt forse devo spegnere con qlc altro parametro?

eppure il leddino sul frontale rimane acceso a bassissima luminosità segno che cmq la MB è accesa. Forse la scheda di rete va cablata con qualche roba strana?
_________________
http://www.youtube.com/watch?v=_yoJI-Tl94g GLORY GLORY HYPNOTOAD
Back to top
View user's profile Send private message
koma
Advocate
Advocate


Joined: 06 Jun 2003
Posts: 2702
Location: Italy

PostPosted: Wed Dec 08, 2004 12:00 am    Post subject: Reply with quote

Code:
01:00:15.703675 00:05:5d:2c:90:35 > 00:00:e8:4e:35:f5, ethertype Unknown (0x0842), length 116:
        0x0000:  ffff ffff ffff 0000 e84e 35f5 0000 e84e  .........N5....N
        0x0010:  35f5 0000 e84e 35f5 0000 e84e 35f5 0000  5....N5....N5...
        0x0020:  e84e 35f5 0000 e84e 35f5 0000 e84e 35f5  .N5....N5....N5.
        0x0030:  0000 e84e 35f5 0000 e84e 35f5 0000 e84e  ...N5....N5....N
        0x0040:  35f5 0000 e84e 35f5 0000 e84e 35f5 0000  5....N5....N5...
        0x0050:  e84e                                     .N
Oltretutto il ping con lo script passatmi funziona quello col programma no
_________________
http://www.youtube.com/watch?v=_yoJI-Tl94g GLORY GLORY HYPNOTOAD
Back to top
View user's profile Send private message
mambro
l33t
l33t


Joined: 22 Mar 2004
Posts: 752
Location: Mira (VE) - Italy

PostPosted: Wed Dec 08, 2004 9:07 am    Post subject: Reply with quote

Cmq mi pare si debba collegare la scheda di rete in qualche modo alla scheda madre, solo che nn ho idea di come si faccia :?
_________________
"The design of a worldwide, fully transparent distributed file system for simultaneous use by millions of mobile and frequently disconnected users is left as an excercise for the reader".
Andrew S. Tanenbaum, Distributed Operating Systems.
Back to top
View user's profile Send private message
jklmnop
n00b
n00b


Joined: 18 Jun 2003
Posts: 42

PostPosted: Wed Dec 08, 2004 9:15 am    Post subject: Reply with quote

maybe this will help some.
Code:

#!/usr/bin/perl -w
#
# $Id: wakeonlan,v 1.4 2000/08/01 03:38:59 jpo Exp $
#
#########################################################################       

use strict;
use Socket;
use Getopt::Std;
use vars qw($VERSION $opt_v $opt_h $opt_i $opt_p $opt_f);
$VERSION = '0.40';

my $DEFAULT_IP      = '255.255.255.255';
my $DEFAULT_PORT    = getservbyname('discard', 'udp');

#
# Process the command line
#

getopts("hvp:i:f:");

if ($opt_h) { usage(); exit(0); }
if ($opt_v) { print "wakeonlan version $VERSION\n"; exit(0); }
if (!$opt_f and !@ARGV) { usage(); exit(0); }
if ($opt_i) { $DEFAULT_IP = $opt_i; }      # override default
if ($opt_p) { $DEFAULT_PORT = $opt_p; }      # override default

if ($opt_f) { process_file($opt_f); }

# The rest of the command line are a list of hardware addresses

foreach (@ARGV) {
   wake($_, $opt_i, $opt_p);
}

#
# wake
#
# The 'magic packet' consists of 6 times 0xFF followed by 16 times
# the hardware address of the NIC. This sequence can be encapsulated
# in any kind of packet, in this case UDP to the discard port (9).
#                                                                               

sub wake
{
   my $hwaddr  = shift;
   my $ipaddr  = shift || $DEFAULT_IP;
   my $port    = shift || $DEFAULT_PORT;

   my ($raddr, $them, $proto);
   my ($hwaddr_re, $pkt);
   
   # Validate hardware address (ethernet address)

   $hwaddr_re = join(':', ('[0-9A-Fa-f]{1,2}') x 6);
   if ($hwaddr !~ m/^$hwaddr_re$/) {
      warn "Invalid hardware address: $hwaddr\n";
      return undef;
   }

   # Generate magic sequence

   foreach (split /:/, $hwaddr) {
      $pkt .= chr(hex($_));
   }
   $pkt = chr(0xFF) x 6 . $pkt x 16;

   # Alocate socket and send packet

   $raddr = gethostbyname($ipaddr);
   $them = pack_sockaddr_in($port, $raddr);
   $proto = getprotobyname('udp');

   socket(S, AF_INET, SOCK_DGRAM, $proto) or die "socket : $!";
   setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt : $!";

   print "Sending magic packet to $ipaddr:$port with $hwaddr\n";

   send(S, $pkt, 0, $them) or die "send : $!";
   close S;
}

#
# process_file
#

sub process_file {
   my $filename = shift;
   my ($hwaddr, $ipaddr, $port);

   open (F, "<$filename") or die "open : $!";
   while(<F>) {
      next if /^\s*#/;      # ignore comments
      next if /^\s*$/;      # ignore empty lines

      chomp;
      ($hwaddr, $ipaddr, $port) = split;

      wake($hwaddr, $ipaddr, $port);
   }
   close F;
}


#
# Usage
#

sub usage {
print <<__USAGE__;
Usage
    wakeonlan [-h] [-v] [-i IP_address] [-p port] [-f file] [[hardware_address] ...]

Options
    -h
        this information
    -v
        dislpays the script version
    -i ip_address
        set the destination IP address
        default: 255.255.255.255 (the limited broadcast address)
    -p port
        set the destination port
        default: 9 (discard port)
    -f file
        uses file as a source of hardware addresses

See also
    wakelan(1)   

__USAGE__
}


__END__

# Script documentation

=head1 NAME

wakeonlan - Perl script to wake up computers

=head1 SYNOPSIS

wakeonlan [-h] [-v] [-i IP_address] [-p port] [-f file] [[hardware_address] ...]

=head1 DESCRIPTION

This script sends 'magic packets' to wake-on-lan enabled ethernet adapters and motherboards, in order to switch on the called PC. Be sure to connect the NIC with the motherboard if neccesary, and enable the WOL function in the BIOS.

The 'magic packet' consists of 6 times 0xFF followed by 16 times the hardware address of the NIC. This sequence can be encapsulated in any kind of packet. This script uses UDP packets.

=head1 OPTIONS

=over

=item -h

Displays the help information.

=item -v

Dislpays the script version.
   
=item -i ip_address

Destination IP address. Unless you have static ARP tables you should
use some kind of broadcast address (the broadcast address of the network where the computer resides or the limited broadcast address). Default: 255.255.255.255 (the limited broadcast address).

=item -p port

Destination port. Default: 9 (discard port).

=item -f file

File with hardware addresses of wakeable computers. For an example check
the file lab001.wol in the examples subdirectory.

=back

=head1 EXAMPLES

Using the limited broadcast address (255.255.255.255):

    $ wakeonlan 01:02:03:04:05:06
    $ wakeonlan 01:02:03:04:05:06 01:02:03:04:05:07

Using a subnet broadcast address:

    $ wakeonlan -i 192.168.1.255 01:02:03:04:05:06

Using another destination port:

    $ wakeonlan -i 192.168.1.255 -p 1234 01:02:03:04:05:06

Using a file as a source of hardware addresses and IP addresses:

    $ wakeonlan -f examples/lab001.wol
    $ wakeonlan -f examples/lab001.wol 01:02:03:04:05:06

=head1 AUTHOR

José Pedro Oliveira <jpo@di.uminho.pt> maintaining and expanding original work done by Ico Doornekamp <ico@edd.dhs.org>.

=head1 COPYRIGHT

Copyright (c) 2000 José Pedro Oliveira.

This is free software.  You may modify it and distribute it under Perl's Artistic Licence.  Modified versions must be clearly indicated.                                                   

=head1 SEE ALSO

For more information regarding this script and Wakeonlan technology just check the following address http://gsd.di.uminho.pt/jpo/software/wakeonlan/.

=cut
Back to top
View user's profile Send private message
koma
Advocate
Advocate


Joined: 06 Jun 2003
Posts: 2702
Location: Italy

PostPosted: Wed Dec 08, 2004 12:36 pm    Post subject: Reply with quote

jklmnop wrote:
maybe this will help some.
Code:

#!/usr/bin/perl -w
#
# $Id: wakeonlan,v 1.4 2000/08/01 03:38:59 jpo Exp $
#
#########################################################################       
-CUT-
Thz but i've already used this script (net-misc/wakeonlan)
mambro wrote:
Cmq mi pare si debba collegare la scheda di rete in qualche modo alla scheda madre, solo che nn ho idea di come si faccia Confused

E' quello che penso anche io... per caso a quelli a cui funziona il wakeonlan hanno la scheda di rete integrata nella mainboard?
_________________
http://www.youtube.com/watch?v=_yoJI-Tl94g GLORY GLORY HYPNOTOAD
Back to top
View user's profile Send private message
=DvD=
Veteran
Veteran


Joined: 25 Mar 2004
Posts: 1353

PostPosted: Wed Dec 08, 2004 1:07 pm    Post subject: Reply with quote

Quote:
When a PC capable of receiving the specific frame goes to sleep, it will enable the Magic Packet mode in the LAN controller, and when the LAN controller receives a Magic Packet frame, it will alert the system to wake up.


Se il pc è spento e la scheda di rete pure come fa a leggere il ping e giudicare se è un pacchetto magico (nome orrendo) o no?
Deve essere in sleep!
(ora cosa si intenda con sleep non lo so!
Back to top
View user's profile Send private message
mambro
l33t
l33t


Joined: 22 Mar 2004
Posts: 752
Location: Mira (VE) - Italy

PostPosted: Wed Dec 08, 2004 1:24 pm    Post subject: Reply with quote

=DvD= wrote:
Quote:
When a PC capable of receiving the specific frame goes to sleep, it will enable the Magic Packet mode in the LAN controller, and when the LAN controller receives a Magic Packet frame, it will alert the system to wake up.


Se il pc è spento e la scheda di rete pure come fa a leggere il ping e giudicare se è un pacchetto magico (nome orrendo) o no?
Deve essere in sleep!
(ora cosa si intenda con sleep non lo so!


Bè alcune schede madri permettono al pc di autoaccendersi a una determinata ora.. anceh li devono essere in stadby?

Non ho mai provato ma credo che la batteria interna della scheda madre in qualche modo dia un minimo di elettricità per far eseguire al bios comandi come appunto quello dell'autoaccensione.. penso (e spero :D ) che si possa fare la stessa cosa cn la scheda di rete
_________________
"The design of a worldwide, fully transparent distributed file system for simultaneous use by millions of mobile and frequently disconnected users is left as an excercise for the reader".
Andrew S. Tanenbaum, Distributed Operating Systems.
Back to top
View user's profile Send private message
Scipiux
n00b
n00b


Joined: 15 Oct 2004
Posts: 9

PostPosted: Wed Dec 08, 2004 1:39 pm    Post subject: Reply with quote

mambro wrote:
Non ho mai provato ma credo che la batteria interna della scheda madre in qualche modo dia un minimo di elettricità per far eseguire al bios comandi come appunto quello dell'autoaccensione.. penso (e spero :D ) che si possa fare la stessa cosa cn la scheda di rete


Non è la batteria, ma l'alimentatore stesso.
Le schede madri ATX in realta sono sempre alimentate, altrimenti come pensi possano accendersi con un semplice pulsante (e non un interruttore), o tramite tastiera.

Per le schede di rete integrate c'è una voce nel bios (o un jumper sulla cheda) che permette di attivare il wake on lan (mantenendo alimentata la scheda di rete anche a PC spento).

Per le schede di rete PCI, solitamente è presente un cavetto che va collegato su un connettore apposito sulla scheda madre, oltre alla solita voce nel bios (o jumper).
Back to top
View user's profile Send private message
=DvD=
Veteran
Veteran


Joined: 25 Mar 2004
Posts: 1353

PostPosted: Wed Dec 08, 2004 1:53 pm    Post subject: Reply with quote

Scipiux wrote:
Per le schede di rete PCI, solitamente è presente un cavetto che va collegato su un connettore apposito sulla scheda madre, oltre alla solita voce nel bios (o jumper).


Questo mi convince già di più =D
Back to top
View user's profile Send private message
koma
Advocate
Advocate


Joined: 06 Jun 2003
Posts: 2702
Location: Italy

PostPosted: Wed Dec 08, 2004 3:20 pm    Post subject: Reply with quote

devo trovare sto cavetto allora :)
_________________
http://www.youtube.com/watch?v=_yoJI-Tl94g GLORY GLORY HYPNOTOAD
Back to top
View user's profile Send private message
oRDeX
Veteran
Veteran


Joined: 19 Oct 2003
Posts: 1325
Location: Italy

PostPosted: Wed Dec 08, 2004 4:33 pm    Post subject: Reply with quote

sai che io non ricordo se c'era il cavetto.....che funziona è sicuro però..
Back to top
View user's profile Send private message
ProT-0-TypE
Veteran
Veteran


Joined: 20 Dec 2003
Posts: 1624
Location: Cagliari

PostPosted: Wed Dec 08, 2004 4:53 pm    Post subject: Reply with quote

confermo che ci vuole il cavetto. (che danno sempre incluso nella confezione della scheda di rete)
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum