Zdravím,
snažím se pomocí PHP funkce unpack() dekódovat pakety uložené v binárním pcap filu, který jsem dostal z WireSharku. Můj problém je, že si nejsem jistý, jaký datový typ bych měl pro jednotlivá pole paketů použít. Řešil někdo podbný problém, nebo má s tím někdo zkušenosti?
Mám 2 soubory, jeden je binární a jeden je textový(s hexadecimálními čísly), obě obsahují záznam stejných dat.
Pro dekódovaní jsem si udělal jednoduchou třídu(my.php):
<?
class parser
{
private $f; //odkaz na soubor
private $u32="V"; //rozbaleni 32bit unsigned long formatu(z bin formatu LSB)
private $u16="v"; //rozbaleni 16bit unsigned long formatu(z bin formatu LSB)
private $header; //hlavicka paketu
private $packet; //část paketu
function openFile($file) //metoda pro otevreni souboru
{
$this->f = fopen($file, "r"); //otevreni souboru a ulozeni odkazu do f
$r = $this->readHeader(); //zavolani metody readHeader()
$this->closeFile();
return $r;
}
function closeFile() //metoda pro zavreni souboru
{
fclose($this->f);
}
function readHeader()
{
$buffer = fread($this->f, 2); //nacteni prvnich 2 bytu ze souboru
$packet=unpack("vprvni",$buffer); //konverze nactenych dat do pole
return $this->packet = $packet['prvni'];
}
public function echoPacket() //vypiš část paketu
{
echo hextodec($this->packet);
}
}
?>
A následujícím kódem ji volám a vkládám do ní data:
<?
require("my.php");
$file="ieee802.15.4_capture_16bit_addr.pcap";
if (!isset($file) || !file_exists($file))
die("Missing file\n");
$p = new parser();
$r = $p->openFile($file);
$p->echoPacket();
?>
Mé zdrojové soubory jsou zde: