Masove overenie statusu adries

Programovacie jazyky, rady, poradňa...
Numline1
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 858
Registrovaný: 04 dec 2006, 18:04

Masove overenie statusu adries

Príspevok od používateľa Numline1 »

Zdravim, obraciam sa na vas so ziadostou o pomoc. Moj problem je nasledujuci:

Mam rozsah adries, na domacej sieti. Rozsah je 192.168.5.1 az 192.168.5.255. Potreboval by som pomocou PHP co najrychlejsie overit status vsetkych IPciek, ktore tam su a nasledne ich zobrazit za sebou ako offline, alebo online. Samotne vypisanie nieje problem, jeden lahky cyklus, problem je, ze neviem ako co najrychlejsie "tuknut" vsetky IPcky a zistit ich stav. system(); a pingovanie po jednej je neuveritelne pomale a neprakticke, fsockopen(); pinguje len jednotlive tcp alebo udp porty. Aby sme sa chapali, ako ma vysledok vyzerat, tu je priklad :
192.168.5.1 je online
192.168.5.2 je offline
192.168.5.3 je online
192.168.5.4 je offline
192.168.5.5 je online
Este raz opakujem, staci mi navrhnut samotne riesenie pingovania, zvysok si dopisem sam.

Dakujem za akukolvek pomoc.

S pozdravom

Numline1
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

ak to máš overovať iba na lokálnej sieti, môžeme predpokladať, že:
1) odpoveď bude trvať kratšie ako 1ms, a teda pri neúspešnom pingovaní netreba tak dlho čakať. Stačí nám jedna milisekunda ( -w 1 )
2) netreba posielať štandartne 3 pingy, bude stačiť 1 lebo návratovosť by nemala byť nižšia ako 100% ( -n 1 )
3) netreba posielať 32 bytový ping, stačí menší, napríklad iba jeden byte ( -l 1 )

Všetky tieto tri predpoklady ti umožnia samotný proces pingovania radikálne skráiť, no zvýši sa nepresnosť a riziko že niektorú adresu označí ako offline aj ak je online. Preto sa s tým pohraj a skús nájsť medzi tým kompromis ktorý ti vyhovuje. Pingovanie by potom vypadalo asi takto:

Kód: Vybrať všetko

system("ping 192.168.5.1 -n 1 -l 1 -w 1");
prípadne sa skús pohrať s vláknami, nech ti pinguje viac adries súčasne: http://blog.motane.lu/2009/01/02/multithreading-in-php/
Napísať odpoveď