login  Naam:   Wachtwoord: 
Registreer je!
 Forum

IP adressen bannen met rangen en wildcards

Offline CelestialCelebi - 31/03/2005 15:56
Avatar van CelestialCelebiPHP gevorderde 'k ben een IPban-systeempje aan het bouwen..

Nu heb ik ooit aangeleerd (van Vincent als ik me niet vergis) dat je wildcards het beste zo kunt gebruiken:

  1. <?php "SELECT COUNT(1) AS banned FROM tabelnaam WHERE '" . $_SERVER['REMOTE_ADDR'] . "' LIKE ipadres" ?>


ipadres kan dan bijvoorbeeld de waarde "62.198.200.%" hebben (% voor wildcard).

Dit werkt heel fijn. Maar wat nu als ik er ook rangen in wil hebben? Hoe doe ik dat dan (bijvoorbeeld 62.198.100-200.0 of met een wildcard 62.198.100-200.%)?

Verder is mij ook verteld dat ik IP adressen het beste op kan slaan met de functie INET_ATON() (die zet het IP adres dan om en maakt er een nummer van, scheelt heel veel ruimte), maar hoe pas ik dan wildcards toe? Rangen zou kunnen met BETWEEN, maar dan kan ik er maar 1 rang in opslaan en het kan wel eens zijn dat er meerdere in moeten...

Iemand een duwtje in de goede richting of zelf ooit dit probleem gehad?

4 antwoorden

Gesponsorde links
Offline Thomas - 31/03/2005 16:08 (laatste wijziging 31/03/2005 16:09)
Avatar van Thomas Moderator Nou... Op mysql.com staat het volgende:

As of MySQL 4.1.2, INET_ATON() also understands short-form IP addresses:

  1. mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');
  2. -> 2130706433, 2130706433


Hier kun je, in combinatie met BETWEEN mooi gebruik van maken voor je IP-ranges lijkt mij ?

In PHP kun je, op grond van het formaat van je IP(-range) je query opbouwen zodat je meteen het goede adres (de goede adressen-reeks) te pakken hebt.
Offline CelestialCelebi - 31/03/2005 16:29
Avatar van CelestialCelebi PHP gevorderde Hmm ja, maar met BETWEEN kan ik toch maar 2 IP adressen vergelijken?

Van 45.30.40.30 tot 45.30.40.255 bijvoorbeeld. Maar niet 45.30.40.* tot 45.30.50.* of iets dergelijks..

Offline Thomas - 01/04/2005 12:25 (laatste wijziging 01/04/2005 12:42)
Avatar van Thomas Moderator Dat kan dus wel als je de IP's omzet naar een getal, met de functie INET_ATON().

SELECT ip
FROM whatever
WHERE INET_ATON(ip) BETWEEN INET_ATON('45.30.40') AND INET_ATON('45.30.50')

Dat zou alle IP's tussen 45.30.40.* en 45.30.50.* moeten opleveren ?

EDIT:
Je bedoelt dus alle IP's van de vorm
45.30.40.* of
45.30.41.* of
45.30.42.* of
...
45.30.50.*

right ?
Offline CelestialCelebi - 02/04/2005 12:58
Avatar van CelestialCelebi PHP gevorderde Hmm ja, dat gaat inderdaad.

Maar wat ik dus wou is ook een wildcard als deze 20.*.30.40 tot 20.*.30.255 ofzo

Maar ik bedenk me net dat er niemand is met zo'n rang..

'k kom er wel uit denk ik. Hartelijk dan voor de hulp! 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.208s