hi there thanx for the help, i completly forgot bout the post, yea i solved it as well but i read one byte at a time till the end of the packet.
the finished script is at:
http://clans.morat.net/the/fsocktest.php?ip=194.202.78.113&port=27015
it reads from any HL server running any mod it doesnt quite work thu not sure hot to convert the time bytes into a time (i gave up 🙁 )
heres the code (sorry no comments any questions just post or email me):
(it needs to vars passed to it $ip $port)
<?PHP
$name[0] = "IP";
$name[1] = "Server Name";
$name[2] = "Map";
$name[3] = "Mod";
$name[4] = "Mod Name";
$name[5] = "Players";
$name[6] = "Max Players";
$name[7] = "Protocol";
$name[8] = "Type of server";
$name[9] = "Server OS";
$name[10] = "Locked";
$name[11] = "Mod URL";
$fp = fsockopen("udp://$ip", $port, &$errno, &$errstr);
if (!$fp)
{
echo "ERROR: $errno - $errstr<br>\n";
}
else
{
fwrite($fp,"ÿÿÿÿdetails\x00");
$got = 0;
$max = 0;
$done =0;
$do = true;
while($do)
{
$max++;
$str = fread($fp, 1);
$buffer .= $str;
if($str == "\x00")
{
$done++;
}
if($done == 11)
{
$do = false;
}
}
fclose($fp);
}
$place = 5;
while($got <5)
{
while(($buffer[$place] != "\x00") and ($place < $max) )
{
$details[$got] .= $buffer[$place];
$place++;
}
$got++;
$place++;
}
if($got == 5)
{
$tmp = $buffer[$place];
$details[$got] = ord($tmp); //clients
$got++;
$place++;
$tmp = $buffer[$place];
$details[$got] = ord($tmp); //max clients
$got++;
$place++;
$tmp = $buffer[$place];
$details[$got] = ord($tmp); //protocol
$got++;
$place++;
if( $buffer[$place] == "l" )
{
$details[$got] = "Listen Server";
}
else if( $buffer[$place] == "d" )
{
$details[$got] = "Dedicated Server";
}
$got++;
$place++;
if( $buffer[$place] == "l" )
{
$details[$got] = "Linux";
}
else if( $buffer[$place] == "w" )
{
$details[$got] = "Win32";
}
$got++;
$place++;
if( ord($buffer[$place]) == 1 )
{
$details[$got] = "Yes";
}
else
{
$details[$got] = "No";
}
$got++;
$place++;
$place++;
while(($buffer[$place] != "\x00") and ($place < $max) )
{
$details[$got] .= $buffer[$place];
$place++;
}
} //end if
$fp = fsockopen("udp://$ip", $port, &$errno, &$errstr);
// get player info below
if (!$fp)
{
echo "ERROR: $errno - $errstr<br>\n";
}
else
{
fwrite($fp,"ÿÿÿÿplayers\x00");
$str = fread($fp, 6);
$top = ord($str[5]);
for($usr = 0; $usr <= ($top-1); $usr++)
{
$do = true;
$str = fread($fp, 1);
$pindex[$usr] = ord($str);
while($do)
{
$str = fread($fp,1);
if($str == "\x00")
{
$do = false;
}
else
{
$pname[$usr] .= $str;
}
}
$tot = 0;
$str = fread($fp, 1);
$tot += ord($str);
$str = fread($fp, 1);
$tot += ord($str) * 256;
$str = fread($fp, 1);
$tot += ord($str) * 65536;
$str = fread($fp, 1);
$tot += ord($str) * 16777216;
if($tot >= 16777216)
{ // ie is negative
$tot -= (4294967296);
}
$pfrag[$usr] = $tot;
$tot = 0;
$str = fread($fp, 1);
$tot += ord($str);
$str = fread($fp, 1);
$tot += ord($str) * 256;
$str = fread($fp, 1);
$tot += ord($str) * 65536;
$str = fread($fp, 1);
$tot += ord($str) * 16777216;
$ptime[$usr] = $tot;
}
fclose($fp);
Print("
<head>
<link rel=\"stylesheet\" type=\"text/css\" href=\"ukcsa.css\">
<title>Server Stats</title>
</head>
<body>
<table border=\"0\" width=\"100%\">
<tr>
<td width=\"100%\" colspan=\"2\">
<h4 align=\"center\">$details[1]</h4>
</td>
</tr>
<tr>
<td width=\"50%\"></td>
<td width=\"50%\"></td>
</tr>
");
if($details[11] == "yes")
{
print("
<tr>
<td width=\"100%\" colspan=\"2\">
<p align=\"center\"><font color=\"#FF0000\">Warning this server is passworded!</font></td>
</tr>
");
}
else
{
print("
<tr>
<td width=\"100%\" colspan=\"2\">
<p align=\"center\"></td>
</tr>
");
}
print("
<tr>
<td width=\"50%\"><b>IP:</b> $details[0]</td>
<td width=\"50%\"><b>Players</b>: $details[5]/$details[6]</td>
</tr>
<tr>
<td width=\"50%\"><b>Map:</b> $details[2]</td>
<td width=\"50%\"><b>Host: </b>$details[9] $details[8]</td>
</tr>
<tr>
<td width=\"100%\" colspan=\"2\"></td>
</tr>
<tr>
<td width=\"100%\" colspan=\"2\">The server is running $details[4] you can
download this from <a href=http://$details[11]>$details[11]</a></td>
</tr>
<tr>
<td width=\"50%\"></td>
<td width=\"50%\"></td>
</tr>
<tr>
<td width=\"50%\"><b>Scores:</b></td>
<td width=\"50%\"></td>
</tr>
<tr>
<td width=\"50%\" align=\"center\">
<table border=\"0\" width=\"100%\">
<tr>
<td width=\"80%\">Name;</td>
<td width=\"20%\">Frags;</td>
</tr>
</table>
</td>
<td width=\"50%\" align=\"center\"></td>
</tr>
");
for($c = 0;$c <= ($top-1); $c++)
{
print("
<tr>
<td width=\"50%\" align=\"center\">
<table border=\"0\" width=\"100%\">
<tr>
<td width=\"80%\">$pname[$c]</td>
<td width=\"20%\">$pfrag[$c]</td>
</tr>
</table>
</td>
<td width=\"50%\" align=\"center\"></td>
</tr>
");
}
print("
</table>
</body>
");
}
?>