Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: nmap i ping
Forum PHP.pl > Forum > PHP
piwib
Witam. Wykorzystałem skrypt zrobiony przez BzikOS'a który jest rewelacyjny. Sprawdza on czy dany użytkownik sieci lan jest dostępny czy nie. I wszystko chodzi lecz mam problem z firewallem. Gdy użytkownik posiada firewalla skrytp pokazuje go jako offline.

  1. <?php
  2. // *********************
  3. // Konfiguracja
  4. //
  5.  
  6. /* OS na ktorym bedzie uruchamiany skrypt
  7. windows - dziala _tylko_ metoda ping
  8. unix - dziala zarowno ping jak i nmap (jezeli jest w systemie) */
  9. $config['os'] = 'unix';
  10.  
  11. /* Metoda sprawdzania hostow
  12. ping
  13. nmap - wymaga nmapa w systemie*/
  14. $config['scanMethod'] = 'nmap';
  15.  
  16. /* IPki do sprawdzenia */
  17. $ipsArray['192.168.0.1'] = "Host1";
  18. $ipsArray['192.168.0.2'] = "Host2";
  19.  
  20. /* Tablica ipkow majacych dostep do strony (jezeli pusta - wszyscy maja dostep) */
  21. //$allowArray[] = "127.0.0.1";
  22.  
  23.  
  24.  
  25. // *********************
  26. // Sprawdzenie uprawnien
  27. // dostepu do strony
  28.  
  29. if( is_array( $allowArray ) )
  30. {
  31. if( in_array( $_SERVER['REMOTE_ADDR'], $allowArray ) == False)
  32. {
  33. print("Brak dostępu!");
  34. exit();
  35. }
  36. }
  37.  
  38.  
  39.  
  40. // *********************
  41. // Szablon
  42.  
  43. $tblBegin = '<table border="0" cellpadding="0" cellspacing="2" summary="">
  44. <tr>
  45. <td colspan="3" class="title">Status komputerów w sieci lokalnej</td>
  46. </tr>
  47. <tr>
  48. <td colspan="3" class="separator"></td>
  49. </tr>
  50. <tr>
  51. <td class="cell2">Status</td>
  52. <td class="cell2">Host/ksywa/imię</td>
  53. <td class="cell2">Adres IP</td>
  54. </tr>';
  55.  
  56. $tblRow = '<tr>
  57. <td class="cell" style="text-align: center"><img src="comp{STATUS}.gif"></td>
  58. <td class="cell">{HOST}</td>
  59. <td class="cell">{IP}</td>
  60. </tr>';
  61.  
  62. $tblEnd = '<tr height="55" valign="center">
  63. <td class="cell3" colspan="3">W sumie: &nbsp;&nbsp;&nbsp; <img src="compon.gif" align="absmiddle"> {SUMAON}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="compoff.gif" align="absmiddle"> {SUMAOFF} </td>
  64. </tr>
  65. </table>';
  66.  
  67.  
  68.  
  69. // *********************
  70. // Sprawdzenie komputerow
  71.  
  72. $time_start = getmicrotime();
  73.  
  74. $compOn = $compOff = 0;
  75. foreach( $ipsArray as $ip => $host )
  76. {
  77. $compStatus = scan( $ip );
  78.  
  79. ($compStatus == "on") ? $compOn++ : $compOff++;
  80.  
  81. $row = $tblRow;
  82. $row = str_replace( '{STATUS}', $compStatus, $row );
  83. $row = str_replace( '{HOST}', $host, $row );
  84. $row = str_replace( '{IP}', $ip, $row );
  85.  
  86. $rows .= $row;
  87. }
  88.  
  89. $end = str_replace( '{SUMAON}', $compOn, $tblEnd );
  90. $end = str_replace( '{SUMAOFF}', $compOff, $end );
  91.  
  92. $page = $tblBegin . $rows . $end;
  93.  
  94. $time_end = getmicrotime();
  95. $stoper = $time_end - $time_start;
  96.  
  97.  
  98.  
  99. function scan( &$ip )
  100. {
  101. global $config;
  102.  
  103. if( $config['scanMethod'] == 'nmap' )
  104. {
  105. $cmd = shell_exec( "nmap -sP -max_rtt_timeout 10 $ip" );
  106. Return ( strpos( $cmd, '1 host up' ) === False ) ? 'off' : 'on';
  107. }
  108.  
  109. elseif( $config['scanMethod'] == 'ping' )
  110. {
  111. if( $config['os'] == 'windows' )
  112. {
  113. $cmd = shell_exec( "ping -n 1 -w 10 $ip" );
  114. Return ( strpos( $cmd, '(100%' ) === False ) ? 'on' : 'off';
  115. }
  116. else
  117. {
  118. $cmd = shell_exec( "ping -c 1 -w 1 $ip" );
  119. $pingResult = explode( ",", $cmd );
  120.  
  121. Return ( strpos( $pingResult[1], '1' ) === False ) ? 'off' : 'on';
  122. }
  123. }
  124.  
  125. else
  126. {
  127. Return "off";
  128. }
  129. }
  130.  
  131.  
  132. function getmicrotime()
  133. {
  134. list( $usec, $sec ) = explode( " ", microtime() );
  135. return( (float)$usec + (float)$sec );
  136. }
  137. ?>
  138.  
  139. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  140. <head>
  141. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />
  142. <style type="text/css">
  143. body {
  144. margin: 15px;
  145. font: 11px Verdana;
  146. color: #515151;
  147. }
  148.  
  149. table {
  150. text-align: center;
  151. border: 1px solid gray;
  152. }
  153.  
  154. a, a:link, a:visited {
  155. text-decoration: none;
  156. color: #515151;
  157. }
  158.  
  159. a:hover {
  160. text-decoration: underline;
  161. color: black;
  162. }
  163.  
  164. td, tr {
  165. font: 11px Verdana;
  166. color: #515151;
  167. }
  168.  
  169. .title {
  170. padding: 5px;
  171. background-color: #e5e5e5;
  172. color: black;
  173. text-align: center;
  174. font-weight: bold;
  175. }
  176.  
  177. .cell {
  178. padding: 5px;
  179. background-color: #F5F5F5;
  180. text-align: left;
  181. }
  182.  
  183. .cell2 {
  184. padding: 5px;
  185. background-color: #F5F5F5;
  186. font-weight: bold;
  187. text-align: center;
  188. }
  189.  
  190. .cell3 {
  191. padding: 5px;
  192. background-color: #F5F5F5;
  193. font-weight: bold;
  194. text-align: right;
  195. }
  196.  
  197. .separator {
  198. height: 2px;
  199. background-color: #D2D2D2;
  200. }
  201.  
  202. .stopka {
  203. font: 9px Verdana;
  204. color: #a5a5a5;
  205. }
  206. </style>
  207. <title>Status komputerów w sieci lokalnej</title>
  208. </head>
  209. <body>
  210.  
  211. <?
  212. print( $page );
  213. print( '<p class="stopka">' );
  214. print( 'scan method: <b>' . $config['scanMethod'] . '</b><br>' );
  215. printf( 'generated in <b>%0.2f sec.</b><br>', $stoper );
  216. print( 'code by <b>BzikOS</b></p>' );
  217. ?>
  218.  
  219. </body>
  220. </html>


Do tego już podano rozwiązanie na ten problem ale według mnie nie działa:

" Ok. Tym, którzy cierpią na kłopoty związane z użyciem przez userów firewalla, polecam poniższą modyfikację jednej z funkcji:
  1. <?php
  2.  
  3. function scan( &$ip )
  4. {
  5. global $config;
  6.  
  7. if( $config['scanMethod'] == 'nmap' )
  8. {
  9.  
  10. $cmd = shell_exec( "nmap -sP -max_rtt_timeout 20 $ip" );
  11. Return ( strpos( $cmd, '1 host up' ) === False ) ? 'off' : 'on';
  12.  
  13. }
  14.  
  15.  
  16. elseif( $config['scanMethod'] == 'arping' )
  17. {
  18.  
  19. $cmd = strtolower ( shell_exec ( "sudo /sbin/arping -c 1 -w 1 $ip" ) );
  20.  
  21. if ( ereg ( 'received 1 response', $cmd ) )
  22. {
  23.  
  24. Return "on";
  25.  
  26. }
  27. else
  28. {
  29.  
  30. Return "off";
  31.  
  32. }
  33.  
  34. }
  35.  
  36. elseif( $config['scanMethod'] == 'arplog' )
  37. {
  38.  
  39. $cmd = trim ( shell_exec ( "cat /proc/net/arp|grep $ip" ) );
  40.  
  41. if ( !empty( $cmd ) )
  42. {
  43.  
  44. Return "on";
  45.  
  46. }
  47. else
  48. {
  49.  
  50. Return "off";
  51.  
  52. }
  53.  
  54. }
  55. else
  56. {
  57. Return "off";
  58. }
  59.  
  60. }
  61.  
  62. ?>



Nie zapomnijcie zmodyfikować zmiennej $config['scanMethod']. Dwie nowe metody to arplog oraz arping. Miłej zabawy! A! W przypadku arpinga zastosowałem dostęp do owego dla użytkownika nobody (pracuje na nim apache) poprzez sudo. Odpowiednia konfiguracja pliku sudo (/etc/sudoers) wyglada tak:

nobody ALL=NOPASSWD:/sbin/arping "


Używam metody ping bo urachamiam to na windzie. Może ktoś pomoże rozwiązac mój problem...

Pozdrawiam
dr_bonzo
Nie zaglebialem sie w szczegoly skryptu, ale firewalle stosuje sie miedzy innymi po to zebys nie mogl sprawdzic czy komp jest online, czy ma udostepniane jakies uslugi bez prob laczenia sie z nimi (te proby zostana odnotowane w logach).
piwib
Wiem wiem ze to nie te forum... ale ma sie pooblem z firewallem nie mozna kompa pingowac używa się narzędzia arping... ale te nadzędzie prawdopodobnie jest tylko dla unixów? Czy się myle? jest jakiś windowsowski odpowiednik? Znalazłem coś o nazwie arp ale to narzędzie jest raczej do modernizacji tabel translacji adresów IP do adresów fizycznych... Ehm może ktoś coś wie więcej...?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.