My favorites | Sign in
Logo
             
Search
for
Updated Nov 14, 2009 by molokoloco
Labels: Tooltips
PhpSniff  
Lecture d'IP dans un fichier de dump

Howto

Ce programme PHP détecte les changements de chaine TV sur le réseau local

Principes :

# 1 En ligne de commande, avec acces root (su), creer un fichier : sniffer.sh

cd /home/votrenomutilisateur/Bureau/
su
touch sniffer.sh
chmod 777 sniffer.sh
gedit sniffer.sh

sniffer.sh : Ce script execute tcpdump et ecrit les packets IGMP dans un fichier "packet" sur le bureau...

#!/bin/sh
sudo tcpdump -i eth0 ip proto 2 -t -N -q -l | tee /home/votrenomutilisateur/Bureau/packet

# 2 Executer ce script

sudo sniffer.sh

# 3 Créer un fichier PHP (cf. code ci-dessous)

touch snifftv.php
sudo gedit /opt/lampp/htdocs/snifftv.php

# 4 Commande linux pour le démarrage du serveur local (lampp par exemple)

sudo /opt/lampp/lampp start

# 5 Ouvrir le fichier PHP dans son navigateur

http://localhost/snifftv.php

# 6 Zapper sur la TV

snifftv.php

<?php 

// Liste des chaines (d'un operateur cable TV)

/*
	// Pour obtenir cette liste chez votre operateur...
	// Avec TCP dump il faut regarder les IP du réseau local
	su
	sudo tcpdump -i eth0 ip proto 2 -t -N -q -l
	// ...et zapper sur la TV de chaine en chaine pour voir ce qu'il ce passe
*/

$channels = array( 
    1 => '233.136.0.110', 
    2 => '233.136.0.111', 
    3 => '233.136.0.112', 
    4 => '233.136.0.113', 
    5 => '233.136.0.114', 
    6 => '233.136.0.115', 
    7 => '233.136.0.116', 
    8 => '233.136.0.126', 
    9 => '233.136.0.121', 
    10 => '233.136.0.119', 
    11 => '233.136.0.123', 
    12 => '233.136.0.124'
);


// Recherche les nouveaux IP dans le fichier log
$chaineEx = ''; 
function matchIp($line) { // Find channel in IGMP IP sniff, like 233.136.0.129 
    global $channels, $chaineEx; 
    if (empty($line)) return ''; 
    preg_match_all('/233\.136\.0\.[\d]{3}/i', $line, $result); 
    if ($result[0] && $result[0][0]) { 
        if (in_array($result[0][0], $channels)) { 
            $channel = array_search($result[0][0], $channels);
            if ($channel != $chaineEx) { 
                $fp = @fopen('http://www.monsite.net/?action=setChannel&channel='.$channel, 'r'); 
                @fpassthru($fp);
                echo '<br />'; 
                @fclose($fp);
                $chaineEx = $channel;
            } 
        } 
    } 
} 

// Ouvre le fichier log et reste ouvert pour une lecture continue
function getLiveStream($liveStream) {
    $handle = @popen('tail -f '.$liveStream.' 2>&1', 'r'); 
    if ($handle) { 
        while(!feof($handle)) { 
            $buffer = fgets($handle); 
            matchIp($buffer); 
            ob_flush(); 
            flush(); 
        } 
        pclose($handle); 
    } 
    die('<br /><___END___/>'); 
}

// Initialisation
getLiveStream('/home/votrenomutilisateur/Bureau/packet'); 

?>

Sign in to add a comment
Hosted by Google Code