Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> [skrypt] Status komputerów w sieci LAN
BzikOS
post 12.12.2003, 18:35:34
Post #1





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


Tak jak obiecałem, umieszczam malutki skrypcik do sprawdzania, które komputery w sieci lokalnej są włączone (wymaga on statycznie przypisanych adresów IP do każdego kompa, można go oczywiście przerobić aby skanował całą klasę w poszukiwaniu kompów, ale robiłem go na własne potrzeby i zależało mi na czasie skanowania snitch.gif)

  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'] = &#092;"Host1\";
  18. $ipsArray['192.168.0.2'] = &#092;"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(&#092;"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 == &#092;"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( &#092;"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( &#092;"ping -n 1 -w 10 $ip\" );
  114. Return ( strpos( $cmd, '(100%' ) === False ) ? 'on' : 'off';
  115. }
  116. else
  117. {
  118. $cmd = shell_exec( &#092;"ping -c 1 -w 1 $ip\" );
  119. $pingResult = explode( &#092;",\", $cmd );
  120.  
  121. Return ( strpos( $pingResult[1], '1' ) === False ) ? 'off' : 'on';
  122. }
  123. }
  124.  
  125. else
  126. {
  127. Return &#092;"off\";
  128. }
  129. }
  130.  
  131.  
  132. function getmicrotime()
  133. { 
  134. list( $usec, $sec ) = explode( &#092;" \", 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>


Ikonki (compon.gif i compoff.gif) można zrobić samemu, a bardzo leniwi mogą sobie pobrać te, które ja użyłem.

Skrypcik można używać i zmieniać do woli, jedyne o co proszę to o link do skryptu w przypadku użycia go smile.gif


<b>[update]</b> Uwaga, skrypt przystosowany jest do sprawdzania komputerów w sieci lokalnej! Jeżeli ktoś chce sprawdzać zewnętrzne hosty, musi zwiększyć czas oczekiwania na odpowiedź (-w 10 - w przypadku pinga windowsowego; -max_rtt_timeout 10 - w przypadku nmapa), co niestety wydłuży czas sprawdzania hostów.
Czas ten podany jest w milisekundach, myślę, że w przypadku zewnetrznych hostów trzeba by ustawić go na co najmniej 200 ms.
Go to the top of the page
+Quote Post
BzikOS
post 14.12.2003, 23:54:34
Post #2





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


Podmienione fragmenty kodu z dodaną kolumną na nr GG.

  1. <?php
  2. $ipsArray['192.168.0.1'] = Array( &#092;"Host1\", \"nr GG 1\" );
  3. $ipsArray['192.168.0.2'] = Array( &#092;"Host2\", \"nr GG 2\" ); 
  4.  
  5. // (...)
  6.  
  7. $tblBegin = '<table border=\"0\" cellpadding=\"0\" cellspacing=\"2\" summary=\"\">
  8. <tr>
  9. <td colspan=\"4\" class=\"title\">Status komputerów w sieci lokalnej</td>
  10. </tr>
  11. <tr>
  12. <td colspan=\"4\" class=\"separator\"></td>
  13. </tr>
  14. <tr>
  15. <td class=\"cell2\">Status</td>
  16. <td class=\"cell2\">Host/ksywa/imię</td>
  17. <td class=\"cell2\">Adres IP</td>
  18. <td class=\"cell2\">Numer GG</td>
  19. </tr>';
  20.  
  21. $tblRow = '<tr>
  22. <td class=\"cell\" style=\"text-align: center\"><img src=\"comp{STATUS}.gif\"></td>
  23. <td class=\"cell\">{HOST}</td>
  24. <td class=\"cell\">{IP}</td>
  25. <td class=\"cell\">{NRGG}</td>
  26. </tr>';
  27.  
  28. $tblEnd = '<tr height=\"55\" valign=\"center\">
  29. <td class=\"cell3\" colspan=\"4\">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>
  30. </tr>
  31. </table>';
  32.  
  33. // (...)
  34.  
  35. foreach( $ipsArray as $ip => $host )
  36. {
  37. $compStatus = scan( $ip );
  38.  
  39. ($compStatus == &#092;"on\") ? $compOn++ : $compOff++;
  40.  
  41. $row = $tblRow;
  42. $row = str_replace( '{STATUS}', $compStatus, $row );
  43. $row = str_replace( '{HOST}', $host[0], $row );
  44. $row = str_replace( '{IP}', $ip, $row );
  45. $row = str_replace( '{NRGG}', $host[1], $row );
  46.  
  47. $rows .= $row;
  48. }
  49. ?>
Go to the top of the page
+Quote Post
Junior
post 15.12.2003, 16:42:11
Post #3





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 11.10.2003
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


dzisiaj to sprawdze smile.gif


--------------------
ؤئغفشت ةشىعشمش ﻻثيئهثسئ صهثمنه
(..) miłość i nienawiść to dzieci
Go to the top of the page
+Quote Post
killemall
post 15.12.2003, 16:58:49
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 6.11.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Działa jak należy smile.gif Thx.
Go to the top of the page
+Quote Post
lucek
post 16.12.2003, 20:42:39
Post #5





Grupa: Zarejestrowani
Postów: 67
Pomógł: 0
Dołączył: 5.04.2003

Ostrzeżenie: (0%)
-----


A moze jeszcze moglbym prosic przyklad - jak IP i inne dane (gg,email itp) pobierac z bazy danych.
A nazwy hostow pobierac z pobranego z bazy IP
Z gory dzieki
Go to the top of the page
+Quote Post
Bakus
post 17.12.2003, 01:12:18
Post #6


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


Tworzysz sobie tabelę, umieszczasz w niej wszystkie dane a póżniej:
mysql_query" title="Zobacz w manualu PHP" target="_manual i pętelka while" title="Zobacz w manualu PHP" target="_manual.

  1. <?php
  2. mysql_connect(&#092;"serwer.mysql.pl\", \"nazwa_uzytkownika\", \"HasłoUżytKowNiKa\");
  3. mysql_select_db(&#092;"nazwa_bazy_danych\");
  4. $q = mysql_query(&#092;"SELECT * FROM kompurety\");
  5. while($w = mysql_fetch_array($q))
  6. {
  7.  $ipsArray[$w[&#092;"NumerIP\"]] = Array(gethostbyaddr($w[\"NumerIP\"]), $w[\"nrGG\"]);
  8. }
  9. ?>

Tabela w MySQLu:
Kod
+-----+---------------+---------+
|  ID |    NumerIP    |   nrGG  |
+-----+---------------+---------+
|   1 |   192.168.0.1 | 1247858 |
.     .               .         .
.     .               .         .
.     .               .         .
| 255 | 192.168.0.255 | 2562562 |
+-----+---------------+---------+


Kod bazy i uaktualnienia skryptu pisany na poczekaniu, może być mało wydajny przy dużej ilości compów, ale działa...


--------------------
Powrót do przeszłości :)
Go to the top of the page
+Quote Post
BzikOS
post 17.12.2003, 08:37:54
Post #7





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


Bakus: dzięki smile.gif
Go to the top of the page
+Quote Post
lucek
post 17.12.2003, 13:10:26
Post #8





Grupa: Zarejestrowani
Postów: 67
Pomógł: 0
Dołączył: 5.04.2003

Ostrzeżenie: (0%)
-----


Dzieki.

Tylko nie bardzo wiem w ktorym miejscu to wrzucic - i ktora czesc kodu usunac.
Go to the top of the page
+Quote Post
BzikOS
post 17.12.2003, 13:31:58
Post #9





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


Po prostu stare zmienne zastępujesz nowymi ($ipsArray, $tblBegin, $tblRow, $tblEnd) i jeszcze całą pętlę foreach zastępujesz nową.. that's all
Go to the top of the page
+Quote Post
Bakus
post 17.12.2003, 16:56:30
Post #10


Administrator serwera


Grupa: Przyjaciele php.pl
Postów: 909
Pomógł: 0
Dołączył: 12.08.2003
Skąd: /var/www/wroclaw.php

Ostrzeżenie: (0%)
-----


Ja zastosowałem [manual:fc0867e26e]while[/manual:fc0867e26e], bo do tego [manual:fc0867e26e]foreach[/manual:fc0867e26e] się nie za bardzo nadaje...

Było by to podwójne przepisywanie tablicy...


--------------------
Powrót do przeszłości :)
Go to the top of the page
+Quote Post
BzikOS
post 17.12.2003, 18:09:24
Post #11





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


Argh sorki.. pomyliły mi się posty, mój poprzedni post dotyczył wprowadzenia zmian tych z drugiego mojego postu, a nie Bakusia. Aby wprowadzić zmiany Bakusia, zastąp tylko tablice $ipsArray zaproponowanym przez niego kodem smile.gif
Go to the top of the page
+Quote Post
Mnichasso
post 18.12.2003, 12:32:48
Post #12





Grupa: Zarejestrowani
Postów: 97
Pomógł: 13
Dołączył: 26.06.2003
Skąd: Piekary Śląskie

Ostrzeżenie: (0%)
-----


Ja mam pytanie dlaczego u mnie na kompie wyskakuje błąd:
Cytat
Notice: Undefined variable: allowArray in c:apachehtdocsskrypcik.php on line 30

Notice: Undefined variable: rows in c:apachehtdocsskrypcik.php on line 91


linia 30 to:
[php:1:7cad617ecb]if( is_array( $allowArray ) ) [/php:1:7cad617ecb]

a linia 91 to:
[php:1:7cad617ecb] $rows .= $row; [/php:1:7cad617ecb]


--------------------
This is only game
Go to the top of the page
+Quote Post
BzikOS
post 18.12.2003, 12:38:29
Post #13





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


To nie błąd tylko notatka winksmiley.jpg A dlatego u Ciebie wyskakuje, ponieważ masz włączone pokazywanie notatek winksmiley.jpg Zrób tak:

Zamiast:
  1. <?php
  2. if( is_array( $allowArray ) )
  3. ?>


to:
  1. <?php
  2. if( isset( $allowArray ) )
  3. ?>


A przed foreachem zrób tak:
  1. <?php
  2. $rows = '';
  3. foreach( $ipsArray as $ip => $host )
  4. ?>


I powinno być ok smile.gif
Go to the top of the page
+Quote Post
BzikOS
post 18.12.2003, 15:24:21
Post #14





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


Posty nie związane bezpośrednio z tematem zostały wydzielone tu.
Go to the top of the page
+Quote Post
BzikOS
post 30.12.2003, 01:20:47
Post #15





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


Uwaga. Dodałem do skryptu możliwość wyświetlania przydzielonych przez program shaperd widełek downloadu i uploadu dla każdego zdefiniowanego hostu.
Jeżeli ktoś uważa, że mu się przyda, niech pisze (oczywiście najpierw trzeba mieć postawionego i uruchomionego shaperd'a winksmiley.jpg).
Go to the top of the page
+Quote Post
gsk
post 22.02.2004, 14:25:49
Post #16





Grupa: Zarejestrowani
Postów: 129
Pomógł: 4
Dołączył: 21.02.2004
Skąd: z domu

Ostrzeżenie: (0%)
-----


a jak zrobic tak ze jak klikne na obrazek komputera jak komp jest online to mi sie otwiera przekladowo file://xxx/, a jak komp jest offline to nie ma nic (nie ma zadnego linku)...chodzi mi o ten skrypt ktory BzikOs napisal jak to w nim dodac...bo ja sie troche zamotalem... :wink:
Pozdrawiam


--------------------
pomoglem wcisnij przycisk "pomogl" - dzieki...
Go to the top of the page
+Quote Post
BzikOS
post 22.02.2004, 15:32:29
Post #17





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


Cytat
a jak zrobic tak ze jak klikne na obrazek komputera jak komp jest online to mi sie otwiera przekladowo file://xxx/, a jak komp jest offline to nie ma nic (nie ma zadnego linku)...

Czy ten link jest dla każdego hostu taki sam, czy są różne dla różnych hostów?
Go to the top of the page
+Quote Post
gsk
post 22.02.2004, 19:14:48
Post #18





Grupa: Zarejestrowani
Postów: 129
Pomógł: 4
Dołączył: 21.02.2004
Skąd: z domu

Ostrzeżenie: (0%)
-----


sa rozne...jak np. host jest xxx to file://xxx/ jak ppp to file://ppp/ i tak analogicznie...
____
BzikOS napisz jak to bedzie jak mozesz, bylbym ci wdzieczny...Pozdro...


--------------------
pomoglem wcisnij przycisk "pomogl" - dzieki...
Go to the top of the page
+Quote Post
BzikOS
post 24.02.2004, 09:13:27
Post #19





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

Ostrzeżenie: (0%)
-----


Ok, a więc zamień:

  1. <?php
  2. $ipsArray['192.168.0.1'] = &#092;"Host1\";
  3. $ipsArray['192.168.0.90'] = &#092;"Host2\";
  4. //na
  5. $ipsArray['192.168.0.1'] = Array( 'Host1', 'http://link.com' );
  6. $ipsArray['192.168.0.90'] = Array( 'Host2' );
  7. ?>


  1. <?php
  2. $tblRow = '<tr>
  3. <td class=\"cell\" style=\"text-align: center\"><img
  4.  src=\"comp{STATUS}.gif\"></td>
  5. <td class=\"cell\">{HOST}</td>
  6. <td class=\"cell\">{IP}</td>
  7. </tr>';
  8. // na
  9. $tblRow = '<tr>
  10. <td class=\"cell\" style=\"text-align: center\">{STATUS}</td>
  11. <td class=\"cell\">{HOST}</td>
  12. <td class=\"cell\">{IP}</td>
  13. </tr>';
  14. ?>


  1. <?php
  2. // za linią
  3. ($compStatus == &#092;"on\") ? $compOn++ : $compOff++;
  4. //dopisz
  5. $compStatus = isset( $host[1] ) ? '<a href=\"'.$host[1].'\"><img src=\"comp'.$compStatus.'.gif\" border=\"0\"></a>' : '<img src=\"comp'.$compStatus.'.gif\">';
  6. ?>


That's all.
Go to the top of the page
+Quote Post
wassago
post 24.02.2004, 12:13:20
Post #20





Grupa: Przyjaciele php.pl
Postów: 701
Pomógł: 0
Dołączył: 26.06.2002
Skąd: Londyn

Ostrzeżenie: (0%)
-----


fajna sprawa z tym shaperd'edem.


--------------------
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 21.06.2025 - 17:37