« June 2008 | Main | August 2008 »

July 04, 2008

wake on lan (p5-Net-RawIP)

IPアドレスを持っていなくてもmagicpacketを投げるものを適当に書いてみた。
実機で試せていないけど、たぶん上手くいく!…かな?
srcportは勝手にでっちあげ。
raw packetを扱うので普通はroot権限が必要。
srcipはバッティングしない様に要注意。
というか、電源が落ちていれば255.255.255.255でも届くのかも?

(追記)224.0.0.1にしちゃえば解決…害があるかな?

#!/usr/bin/perl
use strict;
use Net::RawIP;

my $srcip = '192.168.0.1';
my $dstip = '192.168.0.255';
my $srcport = 9;
my $dstport = 9;
my $device = 'vr0';

if ( @ARGV != 1 ){ die "Usage: wol.pl dest_mac_addr\n"; }

my $dstmac = $ARGV[0];
if( $dstmac !~ /^([a-fA-F0-9]{12}|([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2})$/ ){
        die "Illegal MAC Address Format: $dstmac\n";
}
$dstmac =~ s/://g;

my $data = pack('H12','FFFFFFFFFFFF');
for ( my $i = 0; $i < 16; $i++) { $data .= pack('H12',$dstmac); }

my $pkt = new Net::RawIP({
                ip => {
                        saddr => $srcip,
                        daddr => $dstip,
                },
                udp => {
                        source => $srcport,
                        dest => $dstport,
                        data => $data,
                },
        });

$pkt->ethnew($device);
$pkt->ethset(dest => 'ff:ff:ff:ff:ff:ff');
$pkt->send;

| | Comments (0)

« June 2008 | Main | August 2008 »