Buchempfehlung
MySQL kurz & gut
MySQL kurz & gut
Das preiswerte Taschen- buch stellt MySQL-rele- vante Inhalte systematisch und knapp dar, sodass es sich optimal zum Nach- schlagen beim Pro- grammieren eignet. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Internet und Netzwerke

CheckIP.Bas, IP-Adressen prüfen

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.Redakteurytwinky 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 Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 17.05.2011 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen