Wens interessiert... die IP-Adressbereiche und die Umwandlung in Long als Code:
Die Struktur von IPRange habe ich der Seite http://jodies.de/ipcalc?host=62.153.0.1&mask1=20 nachempfunden.... Damit kann ich erstmal alles machen was ich brauche. Gru�, chris Public Structure IPRange Public IPAddress As String Public Netmask As String Public Network As String Public Broadcast As String Public HostMin_Dotted As String Public HostMax_Dotted As String Public HostMin_Long As Long Public HostMax_Long As Long Public Hosts As Long End Structure 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
