On vous donne le squelette pour l’émetteur et le récepteur.
#!/usr/bin/php <? define('IFCONFIG','/sbin/ifconfig'); define('HW_KEYWORD','HWaddr'); define('IFNAME','eth0'); define('ETHER','super ether -s'); define('TYPE','11 11'); function getMacAddress($if){ $cmd=IFCONFIG." $if"; $df=popen($cmd,'r'); while(!feof($df)){ $buffer=fgets($df); $address=ereg_replace('.*'.HW_KEYWORD.'[ :]*([0-9A-Fa-f:]*).*','\\1',$buffer); if($address) return $address; } fclose($df); return $address; } function dec2hexa($tab){ $tab_hex=array(); foreach($tab as $dec) $tab_hex[]=sprintf("%02x",$dec); return implode(' ',$tab_hex); } function mac2hexa($mac){ $tab_str=explode(':',$mac); $tab_dec=array(); foreach($tab_str as $str){ list($dec)=sscanf($str,"%x"); $tab_dec[]=$dec; } return dec2hexa($tab_dec); } function sendPacket($from,$to,$type,$mess){ $packet = ... $df=popen(ETHER,'w'); fputs($df,"$packet\n"); fclose($df); } if($argc!=3){ echo "Usage: ".basename($argv[0])." <target MAC> <message>\n"; exit(-1); } $from=getMacAddress(IFNAME); $to=$argv[1]; $mess=$argv[2]; ... ?>
#!/usr/bin/php <? define('ETHER','super ether'); define('ETHER_KEYWORD','Packet'); function displayPacket($bytes){ ... } function readPackets(){ $state='headers'; $bytes=""; $df=popen(ETHER,'r'); while(!feof($df)){ $buffer=fgets($df); if(eregi(ETHER_KEYWORD,$buffer)){ if($state=='packet'){ $tab=explode(' ',trim($bytes)); displayPacket($tab); $bytes=""; continue; } else $state='packet'; } if($bytes) $bytes .= " "; $bytes .= trim($buffer); } fclose($df); } readPackets(); ?>