Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z podstawieniem zmiennej do skryptu.
Forum PHP.pl > Forum > Przedszkole
artvip
Witam,

mam taki sobie skrypcik:

  1. <?php
  2. $ipaddress = '192.168.0.1';
  3.  
  4. $nbtstat = "nbtstat -A ".$ipaddress;
  5.  
  6. exec($nbtstat, $result);
  7.  
  8. echo "<td>";
  9.  
  10.  
  11. print_r($result[14]);
  12. print_r($result[15]);
  13. echo "<br>";
  14.  
  15. foreach ($result as $row) {
  16. if (strpos($row,"<03>"))
  17. $username = strtok($row," ");
  18. }
  19.  
  20. echo $username;
  21. ?>


Wykonuje zapytanie nbtstat -A "adres IP". Chciałbym wykorzystać ten skrypt tak aby pytał o różne adresy IP (np. podane w array, z bazy mysql lub inne sensowne rozwiązanie..) zwracając wynik a już najlepiej jak mógłbym użyć parametru od - do (np. 192.168.0.1 - 192.168.0.255).

Wydaje mi się, że może jakaś pętla mi tutaj pomoże.. ?

Nie wiem jak się za to zabrać a kombinowałem już na różne sposoby i niestety bez efektu sad.gif Ktoś pomoże ?

Dzięki
JoShiMa
Pokaż co spłodziłeś to Ci powiemy gdzie jest źle.
artvip
Już działa smile.gif

Proszę - może komuś się przyda skrypt.

Pokazuje MACa + user w domenie. Prosiłbym jednak o ewentualną pomoc przy zrobieniu zakresu w kodzie a nie tak jak ja to zrobiłem - dane z mysql (od - do np. 192.168.0.1 - 192.168.0.255).

Kod:
  1. <?php
  2.  
  3. $connection = @mysql_connect("xxx", "xxx", "xxx")
  4.  
  5. or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
  6. $db = @mysql_select_db("xxx")
  7. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  8.  
  9. $query = "
  10. select
  11. *
  12. from
  13. ip";
  14.  
  15. $results = mysql_query($query) or die(mysql_error());
  16.  
  17. while ($row = mysql_fetch_assoc($results)) {
  18.  
  19. foreach ($row as $value) {
  20.  
  21. echo $value;
  22.  
  23.  
  24.  
  25.  
  26. $nbtstat = "nbtstat -A ".$value;
  27.  
  28. exec($nbtstat, $result);
  29.  
  30. echo "<td>";
  31.  
  32.  
  33. print_r($result[14]);
  34. print_r($result[15]);
  35. echo "<br>";
  36.  
  37. foreach ($result as $row) {
  38. if (strpos($row,"<03>"))
  39. $username = strtok($row," ");
  40. }
  41.  
  42. echo $username;
  43. }
  44.  
  45.  
  46. }
  47. ?>



dzięki
marcio
Jesli cie dobrze zrozumialem w bazie chcesz miec zapisane:
Cytat
192.0.0.1 -> 192.*.*.*

I ma ci skanowac wszystko az do 192.255.255.255
Wiec napisalem na szybko sobie taka funkcje:
  1. <?php
  2.  
  3. function ScanFromTo($from = 1, $to = 255, array $ips = array()) {
  4.  
  5. $ipRange = explode('.', $ips[1]);
  6.  
  7. foreach($ipRange as $number) {
  8.  
  9. if($number == '*') {
  10.  
  11. for($i = $from; $i <= $to; $i++) {
  12.  
  13. $ipToFrom[] = str_replace('*', $i, $ips[1]);
  14.  
  15. }
  16.  
  17. return $ipToFrom;
  18.  
  19. }
  20.  
  21. }
  22.  
  23. }
  24.  
  25. print_r(ScanFromTo(1, 255, array('192.0.0.1', '192.0.*.*')));
  26.  
  27.  
  28. ?>

Zamienia ci znak * na zakres jaki chcesz, tylko jak narazie zakres idzie w parze, jak bede mial chwile czasu dokoncze jak nie to 80% juz masz.
artvip
Dzięki za pomoc. Takie rozwiązanie właśnie mnie interesowało smile.gif

Teraz muszę pomyśleć jak to sklecić w całość żeby array potraktowany został jako zmienna i wykonał:

  1. $nbtstat = "nbtstat -A ".$value;


dla wszystkich wartości z zakresu:

  1. print_r(ScanFromTo(1, 255, array('192.0.0.1', '192.0.*.*')));


Jak ktoś ma ochotę pomóc to będę wdzięczny... a jak nie to kilka dni główkowania i zapewne coś się wymyśli winksmiley.jpg)

Dzięki
marcio
  1. <?php
  2.  
  3. $ips = ScanFromTo(1, 255, array('192.0.0.1', '192.0.*.*'));
  4.  
  5. foreach($ips as $ip) {
  6.  
  7. $nbtstat = "nbtstat -A ".$value;
  8. exec($nbstat);
  9. //reszta kodu w petli ;]
  10.  
  11. }
  12.  
  13. ?>

Tylko spojrz dobrze jakie ip generuje moj kod.
Podajac zakres: 192.0.*.*
Generuje ci zakres w parze:
192.0.1.1
192.0.2.2
192.0.3.3
A powinien:
192.0.1.1
192.0.1.2
192.0.1.3
ipt..itd..
artvip
Tak tak smile.gif Sprawdziłem wcześniej. Bardzo lekko ingerując w twój kod zrobiłem tak:

  1. print_r(ScanFromTo(1, 255, array('192.0.1.1', '192.0.1.*')));


i mam wtedy:
192.0.1.1
192.0.1.2
192.0.1.3
itd.

czyli to o co mi chodziło..

pozdr.
marcio
Racja bo robisz lokalny zakres sieci :]
Co jak zrobie zakres zewnetrznych ip...?Bedzie dzialalo w parze co za tym idzie wszystkim ip nie sprawdzisz snitch.gif ale do twoich wymagan starczy.
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.