[PHP] IP Ranges toelaten, de rest blocken

Pagina: 1
Acties:

  • SAiKO
  • Registratie: September 2000
  • Laatst online: 12-05 12:34

SAiKO

Grote Smurf

Topicstarter
Zo, lang zitten denken over dit probleempje. Ik wil een pagina maken voor een zeer beperkte groep. Zo komen geregistreerden(met een vast ip) op een speciale "geregistreerden" pagina, lanbezoekers(bepaalde ip range) op een speciale interne pagina. De rest van de bezoekers mag niet toegelaten worden.
Ik wilde dit dus met php en mysql ff fixen maar ik liep tegen allerlei moeilijkheden aan. Ik snap niet hoe ik het aan zou moeten pakken.

Eigenlijk zou mun script moeten kunnen kijken of het ip in de database staat (eitje) of dat het ip binnen een ip range valt (HELP!!!)..

  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 22:36
Volg een cursus PHP als je het dan nog niet snapt kun je langskomen. Dit is een scriptrequest en dat mag niet. Lees de FAQ eens door wil je?

  • Luxx
  • Registratie: Februari 2001
  • Laatst online: 21-06 21:45

Luxx

Hijs nu het zeil gezwind...

KAn je dat niet beter doen met .htacces? (daarop zelf ff googlen)

HYEHEHEHEEHHEEHee, hier had iets zinnigs kunnen staan, maar dat is niet.


  • SAiKO
  • Registratie: September 2000
  • Laatst online: 12-05 12:34

SAiKO

Grote Smurf

Topicstarter
Is dus geen script request. Ik moet gewoon een zetje in de goede richting hebben om de klus te kunnen klaren.

Ik heb zitten kijken naar ip2long en long2ip functies om zo te kijken of ie in de range valt maar ik weet niet of dat een goede methode is.

Ook heb ik me bedacht dat ik een .htaccessje zo zou kunnen configureren dat ie ongeveer doet wat ik wil..(niet helemaal volgens mij) maar dat zorgt ervoor dat het niet erg makkelijk te beheren valt.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Eskimootje: Volg een cursus PHP als je het dan nog niet snapt kun je langskomen. Dit is een scriptrequest en dat mag niet. Lees de FAQ eens door wil je?
Nou nou, dat kan ook allemaal best ietsje vriendelijker. Ik zie hier niet direct een scriptrequest bovendien, maar meer een uitermate slecht geformuleerde vraag.

SAiKO: je moet proberen je vraag iets concreter te maken: wat heb je al gedaan? Wat lukt er niet? Laat eens wat code zien van de punten waar je niet uit komt? Heb je al een database ontwerp?

We kunnen vrij lastig 'alles' uit gaan leggen: daarvoor zal je toch echt zelf het een en ander moeten raadplegen. Wat we hier wel kunnen: (1) helpen met concrete problemen of (2) het geven van advies als je beslissingen moet nemen. In de stickies kan je nog allerlei zaken lezen over het stellen van een goede vraag.
dit was een samenvatting van mbravenboer's post
Bedankt ;) . Zoals je weet ben ik ben altijd wat lang van stof ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

begin eerst eens met het opsommen van die moeilijkheden die je tegen kwam...

.edit: dit was een samenvatting van mbravenboer's post :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • DiedX
  • Registratie: December 2000
  • Laatst online: 21:17
Als het vaste IP's zijn, kan je dan niet een soort van request-methode laten lopen (dat jij ze moet auth'en) gecombineerd met een .htaccess file?

DiedX supports the Roland™, Sound Blaster™ and Ad Lib™ sound cards


  • SAiKO
  • Registratie: September 2000
  • Laatst online: 12-05 12:34

SAiKO

Grote Smurf

Topicstarter
Eskimootje schreef op 19 september 2002 @ 00:50:
Volg een cursus PHP als je het dan nog niet snapt kun je langskomen. Dit is een scriptrequest en dat mag niet. Lees de FAQ eens door wil je?
:Z vermoeiend sommige mensen. Moet je hiermee soms HK nog halen?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

hmmm, ik wil 't je wel uitleggen, maar 't wordt een lang verhaal, ben ik bang

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • SAiKO
  • Registratie: September 2000
  • Laatst online: 12-05 12:34

SAiKO

Grote Smurf

Topicstarter
Nou, ik hoef niet alles opgelost te hebben. Ik wil jullie vizie wel eens weten over Ip ranges, hoe zouden jullie dat aanpakken. Ik praat nog niet eens zo zeer over code..

  • SAiKO
  • Registratie: September 2000
  • Laatst online: 12-05 12:34

SAiKO

Grote Smurf

Topicstarter
drm schreef op 19 september 2002 @ 00:59:
hmmm, ik wil 't je wel uitleggen, maar 't wordt een lang verhaal, ben ik bang
ik hou van lange verhalen!! >:) Nee, Ik zou blij zijn als je me op weg kon helpen...

  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 22:36
Je neemt gewoon een aparte db met daarin de begin en eind range. Dan kijk je of hij daartussen in zit:
if($ip => $beginip && $ip <= $eindeip) en dat voor elke range, simpel.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

SAiKO

snap je dit?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// IP adres bestaat uit 4 bytes:
// 198.12.14.120

byte0 = 198
byte1 = 12
byte2 = 14
byte3 = 120

int32 = ( byte0 << 24 | byte1 << 16 | byte2 << 8 | byte3 );

// range is 198.12.10.x
allowedRange = ( 198 << 24 | 12 << 16 | 10 << 8 ); 

// wanneer byte3 achterwege gelaten moet worden:

if ( int32 >> 8 == allowedRange >> 8 ) { // schuif laatste byte "eraf", wordt dus genegeerd
   // ok
} else {
   // not ok
}

// is dus _niet_ ok.

// deze daarentegen:

if ( int32 >> 16 == allowedRange >> 16 ) {
   // wel!
}

// want eerste 2 bytes zijn ok!


die richting moet je ongeveer op denken

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • SAiKO
  • Registratie: September 2000
  • Laatst online: 12-05 12:34

SAiKO

Grote Smurf

Topicstarter
Dus ik moet als het ware het IP opsplitsen in vier stukken en vervolgens een loopje maken van 1 -> 255?

Ik vraag me af of het zo wel mogelijk is om alle ip's (of ranges) af te gaan in de database.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

hoe kom je bij een loopje van 1 tot 255? volgens mij snap je niet alles van mijn vorige post :)

kijk trouwens ook even naar de functies ip2long van PHP en INET_ATON van MySQL

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Uhm ... als de IP adressen / ranges bekend en statisch zijn, waarom zou je ze dan in een database opslaan? In dat geval kan met een check op een substring van je IP adres zelfs klaar zijn.

  • SAiKO
  • Registratie: September 2000
  • Laatst online: 12-05 12:34

SAiKO

Grote Smurf

Topicstarter
Dus als ik de range als een long opsla dan ben ik al een heel stuk. Stel dat 198.12.14.x de range is, dan zou de long hiervan dus 198*255^3 + 12*255^2 + 14*255 = 3322678784 zijn.
Stel ik wil dan de laatste bit eraf hebben, en de bezoeker heeft 198.12.14.85 dan moet ik die in een long omzetten en vervolgens 85 eraf trekken? Klopt toch wat ik zeg he?
En dat getal zou ik dan kunnen checken met die 3322678784 in de database. Als ik het goed begrijp zou ik dan ranges en vaste ip's gewoon als longs kunnen opslaan.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Bijna goed. Alleen het verschil tussen "aftrekken" en "bitshiften" is iets groter, dan je nu lijkt te denken...

Als je 8 bits naar rechts shift ( x >> 8 ) schuif je de laatste byte eraf. Als je dat in een vergelijking doet ( x >> 8 == y >> 8 ) vergelijk je dus enkel de 1e 3 bytes van een 32bits int, oftewel alleen de eerste 24 bits. Je zou dus in de database de ranges aan kunnen geven door in 1 veld aan te geven hoeveel er geshift moet worden. Moet het IP adres gelijk zijn? Dan shift je dus niets.

Nou is de kunst om van dit verhaal 1 query te maken :) (ja, dat kan ;))
offtopic:
misschien herken je de 24 wel uit deze notatie:
xxx.xxx.xxx.xxx/24
Die wordt ook wel 'ns gebruikt om masks aan te geven.


overigens is ^ vaak een XOR operator, dus verwarrend in deze context ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1