Scanare ip:port cu fsockopen() sau altceva

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Cezar
Mesaje:7

Scanare ip:port cu fsockopen() sau altceva

Salutare tuturor! Revin dupa o lunga absenta pe acest forum cu urmatoarea rugaminte:

Am facut o pagina in php pentru a testa un numar de 23 de modemuri, daca sunt online sau nu. Verificand portul 80 la ip-ul(static) fiecarui modem, conf. scriptului de mai jos, totul este ok.
Pe fiecare modem am "port forward" catre portul 7070 unde se afla instalat un dvr(sistem de supraveghere video) cu toate setarile (ip, mask, getway) facute ok. Accesat in browser ip:port acesta functioneaza ok.
Am incercat pe principiul scriptului de mai jos sa testez si portul 7070 (in loc de 80) pentru a vedea cand acest echipament este functional si cand nu. Orice incercare imi afiseaza ca portul este inchis. Nu-mi dau seama daca gresesc undeva sau nu aceasta este metoda.

De exemplu pe acesta pagina ( www.yougetsignal.com/tools/open-ports/ ) verificarea este corecta. Daca dvr-ul functioneaza corect, la verificarea ip:port raspunde ca portul este deschis, daca opresc dvr-ul sau il declupez din cablu raspunsul este port inchis.
Din pacate nu stiu cum testeaza ei porturile. Va rog daca stie cineva cum port rezolva acesta problema va multumesc mult.

Cod: Selectaţi tot

<?php 
/* suprima afisarea in pagina a erorilor */
error_reporting("E_ALL"); 

$remotename[1] = "Modem 1";
$remotehost[1] = "89.122.xxx.xxx"; 
$remoteport[1] = "80"; 
...
...
...
$remotename[23] = "Modem 2";
$remotehost[23] = "89.122.xxx.xxx"; 
$remoteport[23] = "80"; 

$c   = count($remotename);
$c1 = count($remotehost); 
$c2 = count($remoteport); 
if($c != $c2){ 
    die("Atentie! Nu ai remoteport si remotehost pentru toate server-ele."); 
} 
?> 

<html> 
<head> 
<title>Verificare status IP</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
</head> 

<body bgcolor="#FFFFFF" text="#000000"> 
<table width="100" border="1" cellspacing="0" cellpadding="0" bordercolor="#000000"> 
  <tr> 
    <td> 
      <table width="400" border="0" cellspacing="0" cellpadding="0"> 
        <tr bgcolor="#00CCFF"> 
          <td><b><font color="#FFFFFF" face="Verdana, Arial, Helvetica, sans-serif" size="2">Nr.</font></b></td> 
          <td><b><font color="#FFFFFF" face="Verdana, Arial, Helvetica, sans-serif" size="2">Punct</font></b></td> 
          <td><b><font color="#FFFFFF" face="Verdana, Arial, Helvetica, sans-serif" size="2">IP:port</font></b></td> 
          <td><b><font color="#FFFFFF" face="Verdana, Arial, Helvetica, sans-serif" size="2">Stare</font></b></td> 
        </tr> 

<?php 
for ($i = 1; $i <= $c; $i++) { 
$fp = fsockopen("$remotehost[$i]", $remoteport[$i], $errno, $errstr, 1); 

if (!$fp) { 
?> 
       <tr bgcolor="#FFFFFF"> 
          <td><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="1"><?php echo $i; ?></font></td> 
          <td><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="1"><?php echo $remotename[$i]; ?></font></td> 
          <td><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="1"><?php echo $remotehost[$i].":".$remoteport[$i]; ?></font></td> 
          <td><font color="#ff0000" face="Verdana, Arial, Helvetica, sans-serif" size="1">DOWN</font></td> 
        </tr> 

<?php 
    } else { 
?> 

       <tr bgcolor="#FFFFFF"> 
          <td><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="1"><?php echo $i; ?></font></td> 
          <td><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="1"><?php echo $remotename[$i]; ?></font></td> 
          <td><font color="#000000" face="Verdana, Arial, Helvetica, sans-serif" size="1"><?php echo $remotehost[$i].":".$remoteport[$i]; ?></font></td> 
          <td><font color="#00ff00" face="Verdana, Arial, Helvetica, sans-serif" size="1">UP</font></td> 
        </tr> 

<?php 
fclose ($fp); 
} 
} 
?> 

      </table> 
    </td> 
  </tr> 
</table> 
</body> 
</html>

MarPlo Mesaje:4343
Salut
Incearca cu functia stream_socket_client().
Inlocuieste in scriptul tau, linia de cod:

Cod: Selectaţi tot

$fp = fsockopen($remotehost[$i], $remoteport[$i], $errno, $errstr, 1);
Cu aceasta:

Cod: Selectaţi tot

$fp = stream_socket_client('tcp://'.$remotehost[$i].':'. $remoteport[$i], $errno, $errstr, 3);
 
Poate merge, personal nu stiu altfel si nici sa testez nu am cum.

Cezar Mesaje:7
Salut! Prompt ca intotdeauna :)
Multumesc pentru raspuns, dar nu functioneaza. Imi afiseaza DOWN, cu toate ca accesul ip:port din browser este ok.
Daca iti dau(PM) doua ip-uri reale ai timp sa ma ajuti?

Multumesc oricum inca o data!

MarPlo Mesaje:4343
Nu ma pricep la asa ceva, adica testare ip/port si in general ce e legat de retele /modemuri, experienta 0. Pana la acest subiect nici nu stiam ce face functia fsockopen().
Chiar daca asi testa scriptul pe ip corect, nu am idee ce trebuie facut sau verificat.
Incearca pe forumuri mai mari, cum ar fi: phpromania.net sau forum.softpedia.com, poate e cineva cu experienta in asa ceva.

Cezar Mesaje:7
Multumesc pentru onestitate Marius. Raspunsul tau dovedeste cat esti de profesionist in ceea ce faci. Cand voi reusi (trebuie) sa rezolv aceasta problema voi posta rezolvarea pe acest topic. Pana atunci, toate cele bune.