wens interessiert ... kleiner Fl�chtigkeitsfehler...
So ist es richtig:

Function getIPRange(ByVal IPAddress As String, ByVal Netmask As String) As _
IPRange
    Dim MaskArr = Split(Netmask, ".")
    For i As Integer = 0 To 3
        If MaskArr(i) < 255 Then
            'Subnetmask korrigieren...
            For j As Byte = i + 1 To 3 : MaskArr(j) = 0 : Next

            Dim Base As Byte = 255 - MaskArr(i) + 1
            Dim IPArr = Split(IPAddress, ".")
            Dim Start As Byte = 0
            Do While Start + Base <= IPArr(i)
                Start = Start + Base
            Loop

            Dim IPRange As IPRange
            IPRange.Netmask = Join(MaskArr, ".")
            IPRange.IPAddress = IPAddress

            For j As Byte = i + 1 To 3 : IPArr(j) = 0 : Next
            IPArr(i) = Start
            IPRange.Network = Join(IPArr, ".")
            IPArr(3) = IPArr(3) + 1
            IPRange.HostMin_Dotted = Join(IPArr, ".")

            For j As Byte = i + 1 To 3 : IPArr(j) = 255 : Next
            IPArr(i) = Start + Base - 1
            IPRange.Broadcast = Join(IPArr, ".")
            IPArr(3) = IPArr(3) - 1
            IPRange.HostMax_Dotted = Join(IPArr, ".")
            IPRange.HostMin_Long = IP2Long(IPRange.HostMin_Dotted)
            IPRange.HostMax_Long = IP2Long(IPRange.HostMax_Dotted)
            IPRange.Hosts = IPRange.HostMax_Long - IPRange.HostMin_Long + 1
            Return IPRange
        End If
    Next
End Function

Public Function IP2Long(ByVal DottedIP As String) As Object
    Dim arr = Split(DottedIP, ".")
    If UBound(arr) = 3 Then
        For i As Byte = 1 To 4
            If arr(i - 1) > 255 Or arr(i - 1) < 0 Then Return 0
            IP2Long = ((arr(i - 1) Mod 256) * (256 ^ (4 - i))) + IP2Long
        Next
    End If
End Function




-----Urspr�ngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Auftrag von Christoph Cluss
Gesendet: Donnerstag, 17. M�rz 2005 16:40
An: [email protected]
Betreff: AW: [Asp.net] WG: Datenbank mit IP-Adressen... mit .NET


Hallo Peter,

danke f�r die schnelle Antwort! Auf jeden Fall der richtige Weg.
Bin jetzt auf der Suche die Start und die Endadresse mit einer IP
und der Subnetmask zu ermitteln... wird aber kein Problem sein.

Danke, chris


Wen's interessiert ... IP in Long umwandeln:

Public Function IP2Long(ByVal DottedIP As String) As Object
   Dim arr = Split(DottedIP, ".")
   If UBound(arr) = 3 Then
     For i As Byte = 1 To 4
        If arr(i - 1) > 255 Or arr(i - 1) < 0 Then Return 0
        IP2Long = ((arr(i - 1) Mod 256) * (256 ^ (4 - i))) + IP2Long
     Next
   End If
End Function



-----Urspr�ngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Auftrag von Peter Koen
Gesendet: Donnerstag, 17. M�rz 2005 00:11
An: [email protected]
Betreff: RE: [Asp.net] WG: Datenbank mit IP-Adressen... mit .NET


Hallo Christoph,

Eigentlich ganz einfach: Eine IP Adresse ist nichts anderes als ein 32 Bit
Wert (4x1 byte). D.h. speichere die IP Adressen als INT in der Datenbank,
knall den Clustered Index drauf und fertig. Das ist selbst bei mehreren
Millionen Rows verdammt schnell.  Vorallem mu�t du ja nicht jede IP Adresse
abspeichern sondern nur Anfang und Ende der "Zonen" und machst dann einfach
ein WHERE  INTIP>=START AND INTIP<=ENDE

Wenn das alles mit INTs aufgebaut ist l��t du das Problem innerhalb weniger
millisekunden pro Abfrage.

lG
Peter

> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] On Behalf Of Christoph Cluss
> Sent: Donnerstag, 17. M�rz 2005 00:00
> To: x Asp. Net
> Subject: [Asp.net] WG: Datenbank mit IP-Adressen... mit .NET
>
> Hallo,
>
> ich soll auf einer Website ein Targeting nach IP Adresse einbauen.
> d.h: �ber die IP-Adresse soll die Region des Users gecheckt
> werden und dann besondere Informationen angezeigt werden.
>
> Hierf�r bekomme ich eine csv-Datei mit IP-Adressen und Subnet
> Masks und dem Bundesland.
>
> Da es hierbei um Millionen einzelen IPs geht und die
> Performance auch sehr hoch sein soll bin ich mir noch nicht
> so ganz schl�ssig wie ich die Datenbank aufbauen soll um eine
> konkrete IP zuzuordnen.
>
> Dachte mir alle IP-Bl�cke vielleicht in einzelen Felder zu setzen.
> die Subnetmask quasi invertieren also 255.255.254.0 wird zu
> 0.0.1.255 das auch in einzelne Felder.
>
> Dann m��te man doch irgendwie in der SQL-Abfrage einen
> Bereich der einzelnen IP-Bl�cke ermitteln k�nnen.
> also die SubnetMask 255.255.254.0 wird zu 0.0.1.255 wenn die
> BasisIP des Netzes 62.153.0.1 ist m��te der zul�ssige
> IP-Bereich ja von 62.153.0.1 bis 62.153.1.255 gehen was ja
> der addierten "invertierten"
> Subnetmask entspricht:
> 62    +       0       =62
> 153   +       0       =153
> 0     +       1       =1
> 1     +       255     =256
> Stimmt das wenigsten technisch ein bischen?? ;-)
>
> jemand ne Idee??
> Danke und Gru� Chris
>
> Beispiel f�r die IP-Daten wie ich sie bekomme:
> 62.153.0.1            255.255.254.0   Hannover
> Niedersachsen Germany de.telekom
> 62.153.10.1           255.255.254.0   Dresden Sachsen Germany
> de.telekom
> 62.153.100.1  255.255.255.224 Hannover        Niedersachsen
> Germany       de.telekom
> 62.153.100.113        255.255.255.240 M�nchen Bayern  Germany
> de.telekom
> 62.153.100.129        255.255.255.128 Regensburg      Bayern
> Germany       de.telekom
> 62.153.100.33 255.255.255.240 N�rnberg        Bayern  Germany
> de.telekom
> 62.153.100.49 255.255.255.240 Regensburg      Bayern  Germany
> de.telekom
> 62.153.100.65 255.255.255.240 Regensburg      Bayern  Germany
> de.telekom
> 62.153.100.81 255.255.255.240 Hof     Bayern  Germany de.telekom
> 62.153.100.97 255.255.255.240 Bonn    Nordrhein-Westfalen
> Germany       de.telekom
> 62.153.101.1  255.255.255.128 Neubrandenburg
> Mecklenburg-Vorpommern        Germany
> de.telekom
> 62.153.101.129        255.255.255.128 Freiburg
> Baden-W�rttemberg     Germany de.telekom
> 62.153.102.1  255.255.255.128 Trier   Rheinland-Pfalz Germany
> de.telekom
> 62.153.102.129        255.255.255.240 Wuppertal
> Nordrhein-Westfalen   Germany
> de.telekom
> 62.153.102.145        255.255.255.240 Dortmund
> Nordrhein-Westfalen   Germany
> de.telekom
>
>
> _______________________________________________
> Asp.net Mailingliste, Postings senden an:
> [email protected]
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/asp.net
>
> --
> No virus found in this incoming message.
> Checked by AVG Anti-Virus.
> Version: 7.0.308 / Virus Database: 266.7.2 - Release Date: 11.03.2005
>
>

--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.308 / Virus Database: 266.7.2 - Release Date: 11.03.2005


_______________________________________________
Asp.net Mailingliste, Postings senden an:
[email protected]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net

_______________________________________________
Asp.net Mailingliste, Postings senden an:
[email protected]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net

_______________________________________________
Asp.net Mailingliste, Postings senden an:
[email protected]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net

_______________________________________________
Asp.net Mailingliste, Postings senden an:
[email protected]
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/asp.net

Antwort per Email an