[php] IP filtering

Pagina: 1
Acties:

  • reskobon
  • Registratie: November 2001
  • Laatst online: 15-09 21:07
Hoi
ik wil iets maken waarmee ik kan kijken of zijn ip in een range valt dus zoiets als 192.168.[23-236].[1-254]
Weet iemand hoe ik dit doe?

Leeg


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

ik :)

Doet iets met Cloud (MS/IBM)


  • reskobon
  • Registratie: November 2001
  • Laatst online: 15-09 21:07
Ja en hoe?

Leeg


Verwijderd

Lijkt me vrij eenvoudig, ff de string uit elkaar halen met explode ofzoiets, en dan de getallen vergelijken met =< en >= enzo..

  • Dryw.Filtiarn
  • Registratie: September 2001
  • Laatst online: 18-03 12:10
Ik denk dat je ook iets kunt doen met een ereg()

=( Protected by witchcraft )=


  • _cyclops_
  • Registratie: Mei 2000
  • Laatst online: 07-03-2025
Hij maakt volgens mij de ereg al half in z'n vraag :)


maareuh
code:
1
2
3
4
5
if (ereg(192\.168\.[23-236]\.[1-254],$REMOTE_ADDR)) {
  echo "Allowed?!";
} else {
  echo "Donder op?!";
}

denk ik, zoiets?

  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
Nee niet met ereg(), want dan kom je in de knoop te zitten met waardes die je niet zomaar op kunt geven. Beter splitten dus. Zoiets:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
// Range: 192.168.[23-236].[1-254]

$ip_array = split("\.",$ip_adres);

$if ($ip_array[0] == "192" &amp;amp;&amp;amp;
     $ip_array[1] == "168" &amp;amp;&amp;amp;
     intval($ip_array[2]) >= 23 &amp;amp;&amp;amp;
     intval($ip_array[2]) <= 236 &amp;amp;&amp;amp;
     intval($ip_array[3]) >= 1 &amp;amp;&amp;amp;
     intval($ip_array[3]) <= 254) {
  // IP adres valt binnen de range
} else {
  // IP adres valt niet binnen de range
}
?>

edit:

Verneukte opmaak



En ik zie nu dat het met ereg dus wel kan... Weer wat bijgeleerd.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
OF je zet het IP adres om naar een (long) getal. Als je van de 'limieten' ook het nummer berekent heb je een snelle en effectieve methode. Het omzetten van ip-adres -> ip 'nummer' zal je even moeten opzoeken. (Is op GoT ook weleens voorbij gekomen)

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op zondag 20 januari 2002 21:36 schreef Limhes het volgende:
En ik zie nu dat het met ereg dus wel kan... Weer wat bijgeleerd.
Ik heb het stukje van _cyclops_ niet getest. Maar het lijkt me dat dit niet gaat werken. Een reguliere expressie checkt per karakter of het voldoet aan de expressie. Het kan niet vergelijken tussen getallen voor zover ik weet.

  • _cyclops_
  • Registratie: Mei 2000
  • Laatst online: 07-03-2025
'k denk dat als je de ereg kunt maken (En veilig kunt houden) dat je die dan moet kiezen omdat 'k denk dat die sneller zijn :)

maar kijk wel uit, je wil niet omdat je ereg niet kent of niet weet of hij goed werkt dat je access op de page kan krijgen terwijl je dat niet wil zegmaar... :)

Verwijderd

functies long2ip en ip2long zijn hiervoor.
In jouw geval heb je alleen ip2long nodig.

  • reskobon
  • Registratie: November 2001
  • Laatst online: 15-09 21:07
dat gaat lekker zo ik ben al wat aan het proberen
dank je

Leeg


Verwijderd

mij hebben ze op GoT geleerd met preg() te werken ipv ereg() omdat het sneller is. Dat staat ook zo op de site van PHP.

de expression wordt dan:
preg_match("!192\.168\.[23-236]\.[1-254]!",$REMOTE_ADDR)

ipv ! kan je ook iets anders als delimiter gebuiken, bvb / maar dan wordt het imho zo onoverzichtelijk met die \. Veel gebruikt zijn ook _ en #.

  • reskobon
  • Registratie: November 2001
  • Laatst online: 15-09 21:07
Ik heb nu iets gemaakt maar ik heb thuis een netwerk met een router. Met $remote_addr checkt hij niet het externe ip maar het interne, hoe kan ik nou zorgen dat ie mijn externe pakt??

Leeg


Verwijderd

je wilde toch het IP van iemand anders checken?
Op je eigen PC kun je volgens mij niet zo maar checken welk IP nummer gebruikt wordt buiten de NAT router.
Of bedoel je wat anders?

  • reskobon
  • Registratie: November 2001
  • Laatst online: 15-09 21:07
Ik zal het even uitleggen:

IK ben dus een van de gelukkige abonnees van Zeelandnet met een datalimiet en wil met dit kunnen checken of iemand van mijn regio is. Als iemand op die site komt moet ik dus zijn externe ip hebben maar als diegene een netwerk heeft dan pakt hij zijn interne. Hoe krijg ik dit dan voor mekaar?

Leeg


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

Ah, het proxy probleem :)

check de manual voor REMOTE_ADDR en HTTP_X_FORWARDING_FOR!

Klaar voor een nieuwe uitdaging.


  • Kjev
  • Registratie: Juni 2001
  • Laatst online: 02-01-2024
Op zondag 20 januari 2002 21:36 schreef Limhes het volgende:
PHP:
1
2
3
<?
...&amp;amp;....&amp;amp;....&amp;amp;..
?>

edit:

Verneukte opmaak
Hee uhm, Topix bug #30498230948! Als je een paar keer edit of quote krijg je van '&' naar '& a m p ;', wat op zijn beurt weer '& a m p ; a m p ;' wordt, enz. Had ik nog niet eerder opgemerkt, maar verrassend :+.

Edit: spaties om uit te leggen, want anders worden die dingen uitgefilterd.
Op maandag 21 januari 2002 10:11 schreef chem het volgende:
Ah, het proxy probleem :)
* Kjev spreidt opnieuw een stukje zelfwerkzaamheid tentoon :).
PHP:
1
2
3
4
5
6
7
8
9
<?
if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"] != "")
{    $proxy = $HTTP_SERVER_VARS["REMOTE_ADDR"];
     $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
} else {
     $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
}
$host = @gethostbyaddr($ip);
?>
Pagina: 1