Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] zakres ip, Jak sprawdzić czy IP użytkownika mieści się w określonym zakresie IP?
rimk
post 28.10.2007, 17:50:33
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 2.07.2007

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


No, właśnie.
Jak sprawdzić czy IP użytkownika mieści się w określonym zakresie numerów IP?
Jak zrobić to najszybciej?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
dr_bonzo
post 28.10.2007, 18:07:18
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


A jak definiujesz zakres numerow IP?

123.*.12.34

czy

123.32.23.0/24 lub 123.32.23.0/255.255.255.0 ?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
rimk
post 28.10.2007, 18:35:41
Post #3





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 2.07.2007

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


123.32.23.0-255.255.255.0
Go to the top of the page
+Quote Post
Darti
post 28.10.2007, 21:52:59
Post #4





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


  1. <?php
  2. $d = range(1,254);
  3. $numer = explode('.',$ip);
  4. if(array_search($numer[3],$d)===false){
  5. echo "Masz niedobry IP";
  6. }
  7. ?>


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
rimk
post 28.10.2007, 23:27:13
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 2.07.2007

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


Do: Darti
Odpowiedź nie temat. Chcę sprawdzać, czy podane IP mieści się w podanym w formacie 123.32.23.0-255.255.255.0 zakresie IP.
Go to the top of the page
+Quote Post
SongoQ
post 29.10.2007, 09:48:25
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Zamieniasz na longa jest funkcja w php do tego, szukaj a jesli masz w postaci longa to chyba prosto uzyc ">"


--------------------
Go to the top of the page
+Quote Post
maziorek
post 3.11.2007, 21:48:33
Post #7





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 26.10.2007

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


nie łatwiej wywalić wszystkie kropki i sprawdzać wielkość wyciągniętą z nr ip:

  1. <?php
  2.  
  3. function is_ip_range_vaild($zakres_od, $zakres_do) {
  4. $ip = $_SERVER['REMOTE_ADDR'];
  5. $ip_bez_kropek = str_replace('.', '', $ip);
  6. $zakres_od_bez_kropek = str_replace('.', '', $zakres_od);
  7. $zakres_do_bez_kropek = str_replace('.', '', $zakres_do);
  8. if($ip_bez_kropek >= $zakres_od_bez_kropek && $ip_bez_kropek <= $zakres_do_bez_kropek)
  9. { return true; } else { return false; }
  10. }
  11.  
  12. if(!is_ip_range_vaild('123.32.23.0', '255.255.255.0')) {
  13. echo "Masz niedobry IP";
  14. } else {
  15. // wykonujesz dalej...
  16. }
  17.  
  18. ?>


? nie sprawdzałem (pisane "na ciepło") ale powinno działać winksmiley.jpg
Go to the top of the page
+Quote Post
dr_bonzo
post 3.11.2007, 22:03:26
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


tja

mam ip

14.21.31.41

a sprawdzam czy ip sa miedzy
14.1.1.1-14.30.1.1

i co?
14213141 - jednak jest poza rzpedzialem

(14111; 143011)


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
maziorek
post 4.11.2007, 10:46:43
Post #9





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 26.10.2007

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


no sorry, moja wina winksmiley.jpg nie rozpatrzyłem tego przypadku. w ramach rekompensaty macie dobry kod smile.gif

  1. <?php
  2.  
  3. function is_ip_range_vaild($zakres_od, $zakres_do) {
  4. $ip = $_SERVER['REMOTE_ADDR'];
  5. $long = ip2long($ip);
  6.  
  7. if($long >= ip2long($zakres_od) && $long <= ip2long($zakres_do))
  8. { return true; } else { return false; }
  9.  
  10. }
  11. if(!is_ip_range_vaild('127.0.0.0', '127.0.0.2')) {
  12. echo "Masz niedobre IP!";
  13. } else {
  14. echo "Masz dobre IP!";
  15. }
  16.  
  17. ?>
Go to the top of the page
+Quote Post
camillos
post 23.11.2007, 12:25:28
Post #10





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 26.06.2007

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


Jeśli chcesz to zrobić bardziej elegancko i do wykorzystania np z mysql to polecam przekształcić numer ip na konkretną liczbę, a robi się to tak:
  1. <?php
  2. $r=explode('.',$ip);
  3. $ipnum = 16777216*$r[0] + 65536*$r[1] + 256*$r[2] + $r[3];
  4. ?>

jeśli masz inetnum, to rozbijasz oba numery początkowy i końcowy, przeliczasz na cyfry i masz już prościznę, aby sprawdzić czy twój (przeliczony) nr ip jest mniejszy od końcowego i większy od poczatkowego.
Oczywiście, gdy będziesz np konstruował tabelę w mysql to polecam typ kolumn INT (UNSIGNED) - ten atrybut ważny, bo wiele numerów nie zmieściłoby się w zwykłym INT signed.
w druga stronę cyfrę na ip zamienia poniższa funkcja
  1. <?php
  2. FUNCTION renum_ipnum($ipnum1)
  3. {
  4. $ip0= (integer) ($ipnum1/16777216);
  5. $ip1= (integer) (($ipnum1-($ip0*16777216))/65536);
  6. $ip2= (integer) (($ipnum1-(($ip0*16777216)+($ip1*65536)))/256);
  7. $ip3= $ipnum1 -(($ip0*16777216)+($ip1*65536)+($ip2*256));
  8. $ip= "$ip0.$ip1.$ip2.$ip3";
  9. return $ip;
  10. }
  11. ?>


Ten post edytował camillos 23.11.2007, 12:29:31
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 Wersja Lo-Fi Aktualny czas: 25.07.2025 - 00:09