Previous Contents

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();
?>

Previous Contents