-mysz0n-
14.11.2012, 12:07:17
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
14.11.2012, 12:17:59
Wysyłać ping "execem" i sprawdzać odpowiedzi czy żyje czy nie.
mysz0n
14.11.2012, 12:26:08
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
14.11.2012, 12:28:08
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
14.11.2012, 12:53:58
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
14.11.2012, 13:14:38
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.
SELECT adres_ip FROM tabela WHERE stan=0
mysz0n
14.11.2012, 14:08:17
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
14.11.2012, 14:24:39
$ipList = array('192.168.12.1', '192.168.12.122',...);
for($i=0; $i<=256; $i++) {
$array[] = $ip.'.'.$i;
}
}
mysz0n
14.11.2012, 14:51:11
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.