# IP Adresse einlesen und umwandeln



## aXel6644 (1. Februar 2005)

Morgen Leute 

Wir haben eine Aufgabe bekommen und sind jetzt hier etwas am basteln. Und zwar soll das programm folgendermaßen funktionieren:

Man gibt in einem Feld eine IP Adresse ein, die soll dann auf Richtigkeit überprüft werden (keine unerlaubten zeichen etc.), und anschließend in Binär umgewandeld werden.

Das Problem an der Sache ist, das ich keine 4 Felder machen kann, den ich jeweils sage : lasse nur zahlen zw. 0 und 255 zu. Ich muss quasi bis zum Punkt einlesen können ....

Über hilfe wäre ich sehr dankbar

mfg axel


----------



## Filone (1. Februar 2005)

Wenn es nur um die Eingabe geht, kannst Du es folgendermassen angehen (nur als Vorschlag) :


```
Private Sub txtIP_Change()
    
    Dim strToCheck As String

    strToCheck = Right(txtIP.Text,1)

    If Not IsNumeric(strToCheck) Then
      If strToCheck = "." Then
        'User hat einen Punkt eingegeben --> ist OK, also Sub verlassen
        Exit Sub
      Else
        'Fehlermeldung
        MsgBox "Only dots and numeric values allowed.",vbCritical, "Wrong input"
        'Letzten Eintrag entfernen
        frmSonstwas.txtIP.Text = Left(frmSonstWas.txtIP.Text, Len(frmSonstwas.txtIP.Text) -1)
        'Cursor ans Ende setzen
        'frmSonstWas.txtIP.SelStart = Len(frmSonstwas.txtIP.Text)
    End If

End Sub
```

Und nur mal als Frage : wieso soll die IP in einen Binärwert umgewandelt werden ? Normal sind IPs Longwerte, die man mit der API umwandeln kann.

Wenn Du das gemeint hast, dann kannst Du es mit der API achen, zwei Funktionen sind für Dich relevant dabei :

- gethostbyaddress
- gethostbyname

Wenn dahingehend noch Fragen sind, kann ich auch mal ein Beispiel uppen.


----------



## Shakie (1. Februar 2005)

@Filone: Man kann doch einfach jeden Abschnitt der IP-Adresse mit vorangestellten Nullen auffüllen, bis man 3 Zeichen pro Abschnitt hat. Dann lässt man die Punkte zwischen den Abschnitten weg und schon hat man einen Long-Wert.


----------



## Filone (1. Februar 2005)

So einfach ist das leider nicht, wenn ich es richtig verstanden habe dann ist die IP für den User (also die Numeric-Dotted-IP) im Hostbyteordering und die, die der Rechner nutzt im Networkbyteordering. Dahingehend bin ich mir aber auch nicht sicher, müsste ich nochmal durchlesen.

Wenn ich zuhause mit Sockets arbeite, habe ich z.B. 192.168.0.1 im Dotted-Format und 1680246461 als Long-Wert.

//Edit :

im oberen Posting hab ich Unsinn geredet, die Umwandlung einer Dotted-IP in einen Binärwert erfolgt mittels "inet_addr" aus der API.

Hier noch ein paar Tipps zur Verwendung :

http://zotteljedi.de/doc/socket-tipps/index.html


----------



## aXel6644 (3. März 2005)

hallo

irgendwie komme ich nicht ganz klar

also das was im zweiten post steht scheint genau das richtige zu sein aber irgendwie kapiere ich das nicht ganz


habe gestern mal was probiert und das würde auch gehne allerdings min 1000 seiten quelltext^^


was wirklich noch hilfreich wäre , wenn mir jemand erklären kann wie ich zb. aus 12.3.0.12 = 012.003.000.012 mache


----------



## Filone (7. März 2005)

So schwer ist das ganze aber nicht.

APIs 'inet_addr()' wandelt Deine Numeric-Dotted-IP (bspw. 217.124.21.31) in einen Longwert um, siehe msdn.microsoft.com.

Damit hast Du Deine IP umgewandelt.

Das zweite Post dient nur der Überprüfung der Benutzereingaben, so daß nur Zahlen und Punkte erfasst werden können.


----------

