Не судите строго нуба, но попытался допилить до более-менее user-friendly варианта. Добавил возможность просмотра DNS-имен хостов и фильтр по содержимому. Лично я седлал так, эти 2 файла положил в папку /opt/share/www/session и обращаюсь как http://my.router/session. Учтите, что определение имен хостов будет занимать какое-то время, поскольку используемая функция gethostbyaddr() ломится в инет за каждым IP-адресом. При большом количестве активных сессий, или "проблемных" безымянных IP-адресах, время генерации может занимать до 2х минут.
index.htm:
PHP Code:
<html>
<head>
<title>Active Session</title>
</head>
<body>
<form action="session.php" method=get>
<table>
<tr>
<td>Show user-like hostname</td>
<td>
<input type=checkbox name="showdns">
</td>
</tr>
<tr>
<td>Filter</td>
<td><input type="text" name="namefilter"></td>
</tr>
</table>
<input type=submit name="submit" value="show"> <input type=reset value=Reset>
</form>
</body>
</html>
session.php (здесь не могу элегантно победить просмотр с пустым фильтром. Поэтому, чтобы просмотреть все сессии, надо в поле фильтра поставить пробел)
PHP Code:
<?php
$showdns=$_GET["showdns"];
$namefilter=$_GET["namefilter"];
exec("cat /proc/net/ip_conntrack",$data);
print "<br><b><center><font size=\"4\" color=\"#ff0000\">Действующие соединения<br></font></center></b>";
print "<font size=\"2\" color=\"#0000ff\">==>Новое соединение(NEW)<br></font>";
print "<font size=\"2\" color=\"#000000\">==>Ожидание ответа(UNREPLIED)<br></font>";
print "<font size=\"2\" color=\"#00aa00\">==>Установившиеся соединения(ESTABLISHED)<br></font>";
print "<font size=\"2\" color=\"#ffd700\">==>Закрывающиеся соединения(TIME_WAIT)<br></font>";
print "<font size=\"2\" color=\"#ff0000\">==>Не идентифицированные соединения(INVALID)<br></font>";
print "<br><font size=\"2\">";
print "<br>NameFilter= $namefilter<br>";
print "<br>ShowDNS= $showdns<br>";
$k=0;
for ($i=0; $i< count($data);$i++)
{
$dataout = substr ($data[$i],0,-13);
if (strstr($dataout, 'ESTABLISHED')){print "<font color=\"#00aa00\">";}
if (strstr($dataout, 'TIME_WAIT')){print "<font color=\"#ffd700\">";}
if (strstr($dataout, 'UNREPLIED')){print "<font color=\"#000000\">";}
if (strstr($dataout, 'NEW')){print "<font color=\"#0000ff\">";}
if (strstr($dataout, 'INVALID')){print "<font color=\"#ff0000\">";}
$dataout = str_replace("[UNREPLIED]","",$dataout);
$dataout = str_replace("UNREPLIED ","",$dataout);
$dataout = str_replace("ESTABLISHED ","",$dataout);
$dataout = str_replace("TIME_WAIT ","",$dataout);
$dataout = str_replace("NEW ","",$dataout);
$dataout = str_replace("INVALID ","",$dataout);
if ( $showdns == on )
{
$dataout = preg_replace_callback (
'|\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}|',
create_function (
'$string',
'return gethostbyaddr(array_shift($string));'
),
$dataout);
}
if (strstr($dataout, $namefilter)){
if (!strstr($dataout, 'src=127.0.0.1 dst=127.0.0.1'))
{
print "$k ";
print "$dataout<br>";
$k++;
}
}
}
print "</font>";
?>
З.Ы. с учетом нулевых знаний в php и стремящихся к нулю знаний линуха