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;
Recent Comments