Kodama's home / tips.

Wake On Lan(WOL) with ping comand

A patch for ping command. This patch enable the ping command to send Magic Packet. See also Wake On Lan(WOL) tool/class for Ruby.

Check with "tcpdump -i lo -x -s 128". ping -c2 -s 110 -p ffffffffffff112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566112233445566 localhost


long-fill.patch
K.Kodama 1999-11-27

*** ping.c.orig Mon Nov 29 20:51:32 1999
--- ping.c	Mon Nov 29 21:14:20 1999
***************
*** 1155,1161 ****
  fill(void *bp1, char *patp)
  {
  	register int ii, jj, kk;
! 	int pat[16];
  	char *cp, *bp = (char *)bp1;
  
  	for (cp = patp; *cp; cp++)
--- 1155,1161 ----
  fill(void *bp1, char *patp)
  {
  	register int ii, jj, kk;
! 	int pat[128];
  	char *cp, *bp = (char *)bp1;
  
  	for (cp = patp; *cp; cp++)
***************
*** 1165,1174 ****
  			exit(2);
  		}
  	ii = sscanf(patp,
! 	    "%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x",
  	    &pat[0], &pat[1], &pat[2], &pat[3], &pat[4], &pat[5], &pat[6],
  	    &pat[7], &pat[8], &pat[9], &pat[10], &pat[11], &pat[12],
! 	    &pat[13], &pat[14], &pat[15]);
  
  	if (ii > 0)
  		for (kk = 0; kk <= MAXPACKET - (8 + ii); kk += ii)
--- 1165,1195 ----
  			exit(2);
  		}
  	ii = sscanf(patp,
! 	    "%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x%2x",
  	    &pat[0], &pat[1], &pat[2], &pat[3], &pat[4], &pat[5], &pat[6],
  	    &pat[7], &pat[8], &pat[9], &pat[10], &pat[11], &pat[12],
! 	    &pat[13], &pat[14], &pat[15],
! 	    &pat[16], &pat[17], &pat[18], &pat[19], &pat[20], &pat[21], &pat[22],
! 	    &pat[23], &pat[24], &pat[25], &pat[26], &pat[27], &pat[28],
! 	    &pat[29], &pat[30], &pat[31],
! 	    &pat[32], &pat[33], &pat[34], &pat[35], &pat[36], &pat[37], &pat[38],
! 	    &pat[39], &pat[40], &pat[41], &pat[42], &pat[43], &pat[44],
! 	    &pat[45], &pat[46], &pat[47],
! 	    &pat[48], &pat[49], &pat[50], &pat[51], &pat[52], &pat[53], &pat[54],
! 	    &pat[55], &pat[56], &pat[57], &pat[58], &pat[59], &pat[60],
! 	    &pat[61], &pat[62], &pat[63],
! 	    &pat[64], &pat[65], &pat[66], &pat[67], &pat[68], &pat[69], &pat[70],
! 	    &pat[71], &pat[72], &pat[73], &pat[74], &pat[75], &pat[76],
! 	    &pat[77], &pat[78], &pat[79],
! 	    &pat[80], &pat[81], &pat[82], &pat[83], &pat[84], &pat[85], &pat[86],
! 	    &pat[87], &pat[88], &pat[89], &pat[90], &pat[91], &pat[92],
! 	    &pat[93], &pat[94], &pat[95],
! 	    &pat[96], &pat[97], &pat[98], &pat[99], &pat[100], &pat[101], &pat[102],
! 	    &pat[103], &pat[104], &pat[105], &pat[106], &pat[107], &pat[108],
! 	    &pat[109], &pat[110], &pat[111],
! 	    &pat[112], &pat[113], &pat[114], &pat[115], &pat[116], &pat[117], &pat[118],
! 	    &pat[119], &pat[120], &pat[121], &pat[122], &pat[123], &pat[124],
! 	    &pat[125], &pat[126], &pat[127]);
  
  	if (ii > 0)
  		for (kk = 0; kk <= MAXPACKET - (8 + ii); kk += ii)

wakeup script using ping


#! /bin/bash
# wake on LAN.  K.Kodama 1999.11.29
# mac-address file format: ip-address name hw-address
macfile="~/mac-address"

function wake-help(){
	echo "wake on LAN"
	echo "$0 name"
	echo "  or"
	echo "$0 -a"
	echo "  to wake up all"
}

function wake-ping(){
gawk 'BEGIN{ ping="~/ping-long"; broadcast="192.168.1.255" }
{
	m=$3;gsub(/:/,"",m);magic="ffffffffffff"m m m m m m m m m m m m m m m m
	system(ping" -c1 -s 110 -p "magic" "broadcast" >/dev/null 2>/dev/null &")}'
}'
}

if [ "$1" = "-h" -o "$1" = "" ];then
	wake-help
elif [ "$1" = "-a" ];then
	wake-ping < $macfile
elif grep -qs $1 $macfile ;then
	grep $1 $macfile | wake-ping
fi

Kodama's home / tips.