Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wyszukanie wolnego IP, Jak optymalnie przeszukać tablice IPków
--mysz0n--
post
Post #1





Goście







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 ?
Go to the top of the page
+Quote Post
motyl-pl
post
Post #2





Grupa: Zarejestrowani
Postów: 294
Pomógł: 31
Dołączył: 2.04.2010

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


Wysyłać ping "execem" i sprawdzać odpowiedzi czy żyje czy nie.


--------------------
Go to the top of the page
+Quote Post
mysz0n
post
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

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


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
Go to the top of the page
+Quote Post
motyl-pl
post
Post #4





Grupa: Zarejestrowani
Postów: 294
Pomógł: 31
Dołączył: 2.04.2010

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


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.


--------------------
Go to the top of the page
+Quote Post
mysz0n
post
Post #5





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

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


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?
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #6





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


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



--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
mysz0n
post
Post #7





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

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


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:)
Go to the top of the page
+Quote Post
CuteOne
post
Post #8





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  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);


Ten post edytował CuteOne 14.11.2012, 14:24:57
Go to the top of the page
+Quote Post
mysz0n
post
Post #9





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

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


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 ?
Go to the top of the page
+Quote Post

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 Aktualny czas: 20.08.2025 - 05:10