B Squelettes des programmes pour le chat Ethernet
On vous donne le squelette pour l'émetteur et le récepteur.
B.1 Fichier pour l'émetteur
#!/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];
...
?>
B.2 Fichier pour le récepteur
#!/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();
?>