Kom ihåg mig?
Home Menu

Menu


Söka i IP-ranges...

Ämnesverktyg Visningsalternativ
Oläst 2006-02-01, 15:28 #1
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
Undrar om det finns något sätt som folk använder för att söka igenom ip-ranges i en databas. Jag har alltså start- och stop-IP lagrat men det är ju inte så kul att försöka pussla ihop en select-sats för detta.

Jag såg någonstans att det användes någon form av summa för att representera IP'et så att man lättare kan söka i databasen. Någon som vet hur denna omräkning sker från IP till "vanligt" tal?
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-02-01, 15:41 #2
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
Hmm, kan man göra såhär:

exempelvis IP = 2.6.190.56

så blir det unika talet
2 * 256 * 256 * 256 = 33554432
6 * 256 * 256 = 393216
190 * 256 = 48640
56 * 1 = 56

Summa: 33554432 + 393216 + 48640 + 56 = 33996344 ?????
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-02-01, 16:05 #3
PeterM PeterM är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 56
PeterM PeterM är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 56
I MySQL går sådant i alla fall att fixa enkelt.

SELECT * FROM t1 WHERE '10.0.0.25' BETWEEN ip_begin AND ip_end;

Om det verkligen fungerar för alla intervall är jag däremot osäker på. Om det inte gör det så kan du istället göra precis som spåret du är inne på och använda heltalsrepresentation av en ip-adress. I MySQL finns funktionen INET_ATON() för att omvandla en IP-adress på n1.n2.n3.n4-format till ett heltal. Alla scriptspråk lär förresten ha någon motsvarande funktion, på rak arm vet jag att PHP har ip2long() för det ändamålet.

Kod:
department ip_begin ip_end ip_long_begin ip_long_end
dep1 10.0.0.1 10.0.0.20 167772161 167772180
dep2 10.0.0.21 10.0.0.40 167772181 167772200
dep3 10.0.0.41 10.0.0.60 167772201 167772220

SELECT dep FROM t1 WHERE INET_ATON('10.0.0.25') BETWEEN ip_long_begin AND ip_long_end;
> dep2
Om jag nu inte missförstod dig och du är ute efter nånting helt annat...
PeterM är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-02-01, 16:07 #4
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
Jo, det är precis det jag menar! =)

Frågan är om jag har räknat tänkt rätt med min matematikbefriade hjärna...
Även om ex MSSql server har en sådan funktion så vill jag ändå köra med en numerisk representation då jag antar att det blir snabbare...
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-02-01, 16:14 #5
PeterM PeterM är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 56
PeterM PeterM är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 56
Jodå, du tänker rätt så vitt jag kan bedömma.
PeterM är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-02-01, 20:09 #6
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
Du tänker helt rätt. och mysql INET_ATON() är helt rätt väg att gå.
Just den ger "rätt" byteorder (för det du vill göra) eftersom INET_ATON('1.2.4.8') ger 0x01020408.

Använder du ett annat språk bör du kolla detta så at inte 1.2.3.4 blir 0x08040201 som är alternativet.
eg0master är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 19:52.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017