Avatar billede angelenglen Nybegynder
27. januar 2007 - 13:32 Der 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.
Avatar billede erikjacobsen Ekspert
27. januar 2007 - 13:40 #1
Hvis du kan lave "80.140.0.0" om til "080.140.000.000", så kan du sammenligne direkter med <= og >=
Avatar billede intenz Novice
27. januar 2007 - 13:48 #2
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);
}
}

Kode på:
http://www.ip2location.com/articles/article2.htm
Avatar billede intenz Novice
27. januar 2007 - 13:49 #3
hov :)
Havde bare klikket på spørgsmålet fra forsiden, troede det var php.
Så kan du nok ikke bruge det :)
Avatar billede nidyahou Praktikant
27. januar 2007 - 14:34 #4
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)
Avatar billede angelenglen Nybegynder
27. januar 2007 - 14:42 #5
okay det ved jeg så ikke, jeg er vist ikke god nok til ASP til at kunne få noget til at fungere ud fra dette.
Avatar billede erikjacobsen Ekspert
27. januar 2007 - 14:56 #6
Meget simpelt eksempel i VBScript

<%

    ip1 = "080140000000"
    ip2 = "080140255255"
   
   
    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
   
    response.write inside("80.140.10.4") & "<br>"
    response.write inside("81.140.10.4") & "<br>"
   
%>
Avatar billede cpufan Juniormester
27. januar 2007 - 15:18 #7
ipnr = "80.140.0.0"

ipok = split(ipnr,".")

if ipok(0) ="80" and ipok(1)="140" then response.write "ok"
Avatar billede angelenglen Nybegynder
27. januar 2007 - 15:29 #8
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:

<!--#include file="funktioner.inc.asp"-->
<%
IP =        "87.72.13.143"
StartIP =    "87.72.0.0"
SlutIP =    "87.72.255.255"
%>
<table border=1 cellpadding=5 cellspacing=0>
  <tr><td>Testet IP:</td><td><b><%=IP%></b></td></tr>
  <tr><td>Start IP:</td><td><b><%=StartIP%></b></td></tr>
  <tr><td>Slut IP:</td><td><b><%=SlutIP%></b></td></tr>
  <tr><td>Test Resultat:</td><td><b><%=CheckIP(IP,StartIP,SlutIP)%></b></td></tr>
</table>

Den giver mig resultatet:
Testet IP:      87.72.13.143
Start IP:     87.72.0.0
Slut IP:     87.72.255.255
Test Resultat:     False

Jeg kan dog ikke se hvorfor, for som jeg tyder din kode burde det være korrekt?
Avatar billede angelenglen Nybegynder
27. januar 2007 - 15:30 #9
argh nevermind, jeg tror jeg har fundet min fejl - jeg fjerner jo ikke punktummer eller noget fra mine test-ip'er....
Avatar billede angelenglen Nybegynder
27. januar 2007 - 15:33 #10
Okay her er hvad jeg endte med som virker:

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

<!--#include file="funktioner.inc.asp"-->
<%
IP =        "87.72.13.143"
StartIP =    "87.72.0.0"
SlutIP =    "87.72.255.255"
%>
<table border=1 cellpadding=5 cellspacing=0>
  <tr><td>Testet IP:</td><td><b><%=IP%></b></td></tr>
  <tr><td>Start IP:</td><td><b><%=StartIP%></b></td></tr>
  <tr><td>Slut IP:</td><td><b><%=SlutIP%></b></td></tr>
  <tr><td>Test Resultat:</td><td><b><%=CheckIP(IP,StartIP,SlutIP)%></b></td></tr>
</table>

Den giver mig resultatet:
Testet IP:      87.72.13.143
Start IP:    87.72.0.0
Slut IP:    87.72.255.255
Test Resultat:    True
Avatar billede angelenglen Nybegynder
27. januar 2007 - 16:13 #11
forresten erikjacobsen - du må lægge et svar for points.
Avatar billede erikjacobsen Ekspert
27. januar 2007 - 17:25 #12
Jeg samler slet ikke på point, tak.
Avatar billede angelenglen Nybegynder
27. januar 2007 - 17:27 #13
okay fair nok :-)
Tak for hjælpen ihverfald!
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester