27. januar 2007 - 13:32Der er
12 kommentarer og 1 løsning
Er IP indenfor range?
Jeg har brug for at kunne checke IP'er for om de er indenfor et bestemt range.
Jeg vil kunne definere en godkendt range, eksempelvis: Start: 80.140.0.0 Slut: 80.140.255.255
Så hvis jeg tester med IP 80.140.15.54 så skal den svare ok. ip 80.141.15.54 skulle ikke svare ok da den er udenfor range.
Jeg havde først tænkt på at fjerne alle punktummer og så sammenligne talstørrelsen. Men der er eksempler hvor det ikke ville virke...
80.140.0.0 vill jo blive til 8014000 og 80.140.255.255 til 80140255255
så hvis jeg checker på om et tal er større end 1. tal og mindre end 2.tal så virker det jo ikke. Eksempelvis ville 80.141.15.54 værre indenfor range ifølge denne test da 801411554 er større end 8014000 OG mindre end 80140255255 :-(
Men jeg ved ikke hvordan jeg ellers skulle gøre det...
ps. en adresse som fx 80.140.0.0 eller 80.140.255.255 skulle også godkendes - dvs hele rangen tæller med incl. start- og slut-tallene.
håber ikke jeg har gjort det mere forvirrende end det er.
Du kan måske låne lidt fra IP2Location's script til at gøre det du vil: // Function to convert IP address (xxx.xxx.xxx.xxx) to IP number (0 to 256^4-1) function Dot2LongIP ($IPaddr) { if ($IPaddr == "") { return 0; } else { $ips = split ("\.", "$IPaddr"); return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 * 256 * 256); } }
ellers kan den vel klares med en split funktion hvor du splitter ved punktummer? Det ser faktisk ud til at det er det samme som den der php løsning gør (selvom jeg ikke er php kyndig)
function inside(ip) a = split(ip,".") for i=lbound(a) to ubound(a) do while len(a(i))<3 a(i) = "0" & a(i) loop next ip= a(0) & a(1) & a(2) & a(3) if ip>=ip1 and ip<=ip2 then inside=true else inside=false end if end function
Det ser rigtigt godt ud erikjacobsen, men jeg har lidt problemer.
jeg har omdøbt lidt på variabelnavnene for at jeg havde lidt lettere ved at se mig ud af det, det jeg kom frem til er:
Function CheckIP(strIP, startIP, slutIP) arrIP = split(strIP,".") for i=lbound(arrIP) to ubound(arrIP) do while len(arrIP(i))<3 arrIP(i) = "0" & arrIP(i) loop next strIP= arrIP(0) & arrIP(1) & arrIP(2) & arrIP(3) if strIP>=startIP and strIP<=slutIP then CheckIP=true else CheckIP=false end if End Function
Jeg har så lave en lille testside, men den melder "false" hvor den ikke skulle:
Function ConvertIP(strIP) arrIP = split(strIP,".") for i=lbound(arrIP) to ubound(arrIP) do while len(arrIP(i))<3 arrIP(i) = "0" & arrIP(i) loop next ConvertIP= arrIP(0) & arrIP(1) & arrIP(2) & arrIP(3) End Function
Function CheckIP(strIP, startIP, slutIP) if ConvertIP(strIP)>=ConvertIP(startIP) and ConvertIP(strIP)<=ConvertIP(slutIP) then CheckIP=true else CheckIP=false end if End Function
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.