Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyszukanie wolnego IP
Forum PHP.pl > Forum > Przedszkole
-mysz0n-
Witam mam pytanie,
Zakładając że moge pobrać za pomocą jakiegoś API liste adresów IP z zakresu 192.168.1.0/24 czyli adresy od 192.168.1.1 do 192.168.1.254
chciałbym wyszukać wszystkie wolne nie użyte IPki. jak to zrobić najszybciej i najoptymalniej ?
motyl-pl
Wysyłać ping "execem" i sprawdzać odpowiedzi czy żyje czy nie.
mysz0n
nie o to chodzi.
Przypisuje klientom adresy IP, mam mozliwość importu tych IPków do bazy lub do tablicy. Nie obchodzi mnie czy IP odpowada czy nie.
Chodzi o to, że czasem dany klient jest przeniesiony lub wykasowany z urządzenia. w tym momencie w adresacji robi sie luka, przy ponad 1200 adresach szukanie i scrollowanie to mega upierdliwa sprawa. chcialbym wiec mieć sktypr który wyrzuci mi info ze z zakresu adresów 192.168.1.0 - 192.168.1.254 adresy:
192.168.1.7, 192.168.1.9, 192.168.1.123, 192.168.1.155 są wolne i przez wolne mam na mysli - nie ma ich w tabeli/tablicy
motyl-pl
To wrzucasz całość do bazy.

Robisz tabele:
IP | Urządzenie

Wrzucas ip z urzadzęniem, i potem Countem odpytujesz bądź jakimkolwiek innym warunkiem.
mysz0n
ok i wyjdzie mi ze w klasie 192.168.1.0 mam 200 użytych adresów.
ale ja chciałbym poznać DOKŁADNE IPki nie użyte, żeby móc je przypisać do nowego klienta. mam tylko 4k adresów zewnętrznych i musze je zacząć szanować więc jak kasuje jakiegoś klienta to chce przy najbliższej okazji jego ip użyć.

myslałem może nad czyms w stylu pętli od 0 do 254 i sprawdzać czy zmienna z pętli będzie się znajdować w końcówce adresu - jak tak to olej jak nie to wypluj.
co myślisz?
b4rt3kk
Zrób sobie tabelkę w bazie:

Kod
id | adres_ip | stan
1 | 192.168.1.1 | 1
2 | 192.168.1.2 | 1
3 | 192.168.1.3 | 0
itd...


Zawiera ona wszystkie adresy. Tworzysz zapytanie, które zwróci Ci listę adresów, gdzie stan = 0, czyli, że jest wolny.

  1. SELECT adres_ip FROM tabela WHERE stan=0

mysz0n
ale w takim wypadku musiałbym w pierwszej kolejnosci wpisać do bazy wszystkie możliwe adresacje.
czasem ip to 192.168.0.x czasem 175.123.3.x itd
chciałem cos mega uniwersalnego - jak wyczuje adres 175.123.3.x - to przelatuje wszystkie od 0 do 254 i pokazuje:
hej ten ten ten jest wolny - nie chce togo nawet nigdzie zapisywac. wystarczyłoby pokazanie na daną chwile jakie mam wolne, kombinuje z pętlami i explodami.
jesli dany adres jest o jeden wiekszy jak poprzedni - ok, jesli nie - wypisz wszystkei pomiedzy nimi jako wolne.
ale petla wyszla mi bardzo duza:)
CuteOne
  1. $ipList = array('192.168.12.1', '192.168.12.122',...);
  2.  
  3. $exp = explode( '.', $ipList[0] );
  4. unset($exp[count($exp)-1]);
  5.  
  6. $ip = implode('.', $exp);
  7.  
  8. $array = array();
  9. for($i=0; $i<=256; $i++) {
  10.  
  11. if(!in_array($ip.'.'.$i, $ipList)) {
  12.  
  13. $array[] = $ip.'.'.$i;
  14. }
  15. }
  16.  
  17. print_r($array);
mysz0n
o dzięki CuteOne w taki sposob dostaje liste adresów od 1 do 254.
teraz w jednej tablicy mam te adresy a w 2.tablicy mam poszukane adresy i funkcja array_diff(); mógłbym sobie wyrzucic różnice.
dobrze kombinuje?
w jaki sposób mogę poskładać to co wypluło mi w 1. tablice (końcówki IPków od 0 do 255) w cały adres zeby fukcją array_diff ładnie to ogarnac ?
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.