Следене на конекциите - под Windows

r0073xbg

Registered
Преди няколко години бях писал код за следене на конекциите под Windows, тъй като повечето приложения от това естество са писани за unix-based OS-s.
Кодът си е писан отдавна, бозав е и нямам намерението да го коригирам, но важното е, че върши някаква работа, а именно - да дава информация, колко връзки са осъществени към определени от вас портове, дали надхвърлят някакъв определен лимит + списък с ip адресите, които са се закачили в този момент към host-a.

PHP:
<?php
error_reporting(0);
header("Content-type:text/html; charset=Windows-1251");
set_time_limit(0);

$ip = "192.168.0.100"; # задава се ip на хоста. Ако сте за рутер, давате вътрешното ip
$apacheport = "80"; # мисля, че това е ясно - порт, през който комуникира апаче (или каквото се ползва, там)
$mysqlport = "3306"; # порт за mysql
$listen = "80=>Apache:1,3306=>MySQL:10";

// каква е идеята тук: порт=>Име на приложението:максимален брой връзки, които да се възприемат за нормални


$apcon = shell_exec("netstat -ano | find /c \"$ip:$apacheport\"");
$apcons = shell_exec("netstat -ano | find /i \"$ip:$apacheport\"");

$sqlcon = shell_exec("netstat -ano | find /c \"$ip:$mysqlport\"");
$sqlcons = shell_exec("netstat -ano | find /i \"$ip:$mysqlport\"");

$ano = shell_exec("netstat -ano");
$stat = shell_exec("netstat -e");
$result =  "
<table border=0 cellspacing=0 cellpadding=10 align=left>
<tr><td align=left><code><b>Apache: $apcon конекции</b></code><p><pre>$apcons</pre></td></tr>
<tr><td align=left><code><b>MySQL: $sqlcon конекции</b></code><p><pre>$sqlcons</pre></td></tr>
<tr><td align=left><pre>
";
$result = "$result<b>---------------------<br>";

function listen($port,$name,$max){
    global $ip,$result;
    $visitors = array();

$cons = shell_exec("netstat -ano | find /i \"$ip:$port\"");



    $explode = explode("TCP ",$cons);
foreach($explode as $test){
    $test = explode("$ip:$port",$test);
    $test = trim("$test[1]");
    $test = explode(" ",$test);
    $visitor = explode(":",$test['0']);
    $visitor = $visitor['0'];
array_unshift($visitors,$visitor);
}

$explode = explode("UDP ",$apcons);
foreach($explode as $test){
    $test = explode("$ip:$port",$test);
    $test = trim($test['1']);
    $test = explode(" ",$test);
    $visitor = explode(":",$test['0']);
    $visitor = $visitor['0'];
array_unshift($visitors,$visitor);
}
$stat = array_count_values($visitors);
foreach($stat as $visitor=>$connections){
    if(!empty($visitor)){

    $result = "$result<b>";
if($connections > $max) $result = "$result<font color=red>Приложение: $name<br>IP: $visitor<br>Брой връзки: $connections</font>";
else $result = "$result<font color=green>Приложение: $name<br>IP: $visitor<br>Брой връзки: $connections</font>";
$result = "$result</b><br>---------------------<br>";
}
}

}
$result = "$result</b>";

$listen = explode(",", $listen);
foreach($listen as $info){
$exp = explode("=>", $info);
$port = $exp['0'];
$name = $exp['1'];
$name = explode(":",$name);
$danger = $name['1'];
$name = $name['0'];
listen("$port","$name","$danger");

}


$result = "$result</pre></td></tr>
<tr><td align=left><pre><b>$ano</b></pre></td></tr>
<tr><td align=left><pre><b>$stat</b></pre></td></tr>
</table>";
echo $result;
?>

Ако някой има по-конкретен въпрос и/или идеи, може да сподели :)
 

Горе