Code-Beispiel
CheckIP.Bas, IP-Adressen prüfen
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | ytwinky | 17.05.2011 |
Eine IP-Adresse besteht (u.A.) aus 4 Quads(0..255) und 3 Punkten('.'), dabei ist es jedoch ersteinmal uninteressant, was eine IP-Adresse noch alles aussagen kann. Diese genannten Bedingungen müssen erfüllt sein, solange es sich um IPv4-Adressen handelt!
Nun ist es bei z.B. Browsern eher unwahrscheinlich, daß sie verkehrte IP-Adressen weitersenden, aber wie sieht es denn mit dem 'pebkac'-Effekt aus?
(Für alle, die es noch nicht wissen:pebkac=problem encountered between keybord and chair; Problem entdeckt zwischen Tastatur und Stuhl <--Der User.)
Hier sind noch nicht mal die absichtlichen Fehler gemeint, die ein Programm aus dem Tritt bringen sollen, sondern die kleinen Unachtsamkeiten..
Eine kleine Routine hilft, hier wenigstens die gröbsten Fehler zu entdecken, bevor eine IP-Adresse auf das (Inter-)Netz^^ losgelassen wird:
'©2008 by ytwinky, MD
'67119558 is the long version of the IP address 198.41.0.4
'ZahlenBeispiel entn. aus API-Guide
Type IPAdrTyp
As String*15 IP
As Integer Quad(0 To 3), IPFehler
As uInteger Dez
End Type
Declare Function CheckIP(byRef IPAdresse As IPAdrTyp) As Byte
Dim IPAdresse As IPAdrTyp
With IPAdresse
' Input"IP-Eingabe", .IP
.IP="198.041.000.004"
Print .IP &" <-- IP vorher(Dez=67119558)"
Select Case CheckIP(IPAdresse)
Case 0
For i As Integer=0 To 3
Print Str(.Quad(i)) &*IIf(i<3, @".", @"");
Next
Print " <-- IP gecheckt, Dez=" &.Dez
Case 1
Print "Falsche IP:" &.IP
Case Else
Print "Bereichsfehler(0..255) IP:" &.IP &" im " &Abs(.IPFehler)+1 &".Quad"
End Select
Print .IP &" <-- IP nacher";
End With
Sleep
End
Function CheckIP(byRef IPAdresse As IPAdrTyp) As Byte
'Liefert 0 für ungültig, 1 für gültig, -i Nummer des falschen Quads in IRet
Dim As Integer i, j, quad 'Schleifenvariablen
Dim As String s=IPAdresse.IP
Dim As String sq(0 To 3) 'zur Bearbeitung der IP
With IPAdresse
.IPFehler=3 '3 Punkte müssen sein, sonst Fehler
.Quad(0)=0
.Dez=0
For i=0 To Len(s)-1 'den ganzen String prüfen
j-=s[i]=46 'ist das aktuelle Zeichen ein '.'
If s[i]=46 Then .Quad(j)=i+1
Next i
If j<>3 Then Return 1 'Anzahl der Quads falsch
For i=0 To 3 '4 Quads gibts
sq(i)=Mid(s, .Quad(i)+1, IIf(i=3, Len(s), .Quad(i+1))-.Quad(i)+(i<3))
sq(i)=LTrim(sq(i), "0") 'führende Nullen entfernen
If sq(i)="" Then sq(i)="0" 'oops, das war eine zuviel ^^
quad=Val(sq(i)) 'quad nimmt den Wert des Quads auf
'Wenn ein falsches Zeichen im Quad ist, stimmt die Länge nicht
'sollte q>255 sein oder q<0(wie auch immer..), Fehler..
.IPFehler=((Len(Str(quad))<>Len(sq(i))+(quad<0)+(quad>255))<>0)*i
If .IPFehler Then Return .IPFehler 'Fehler melden..
.Quad(i)=quad 'jetzt den Wert an das Quad(i) zuweisen
.Dez+=quad*256^i 'dezimale IP-Adresse berechnen(uInteger)
Next 'nächstes Quad
.IP=.Quad(0) &"." &.Quad(1) &"." &.Quad(2) &"." &.Quad(3)
End With
Return IPAdresse.IPFehler '0 zurückgeben: alles okay
End Function '..und fertich
..ganz nebenbei wird auch noch die dezimale IP berechnet:
DezIP=Quad(0)*256^0+Quad(1)*256^1+Quad(2)*256^2+Quad(3)*256^3
Fröhliches IP-Checken
Gruß
ytwinky
Zusätzliche Informationen und Funktionen |
- Das Code-Beispiel wurde am 28.01.2008 von ytwinky angelegt.
- Die aktuellste Version wurde am 17.05.2011 von ytwinky gespeichert.
|
|