Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [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

IP-Adresse "lesbar" machen

Lizenz:Erster Autor:Letzte Bearbeitung:
GPLMitgliedPMedia 12.11.2007

Sucht man die IP-Adresse eines Hosts per gethostbyname(), so erhält man diese als Integer, so wie er auch von den Socketfunktionen benötigt wird.

Jedoch hat das einen Nachteil, und zwar kann man diesen Integer als "Mensch" nicht so einfach lesen... diese Funktion schafft Abhilfe.

Function ip_get(ip as integer) As String
    Dim Temp As String
    Dim TempB As String
    Temp = Hex(ip)
    if len(temp) < 8 then temp = string(8-len(temp), "0")+temp
    TempB = Str(Val("&h"+Mid(Temp,7,2)))+"."
    TempB += Str(Val("&h"+Mid(Temp,5,2)))+"."
    TempB += Str(Val("&h"+Mid(Temp,3,2)))+"."
    TempB += Str(Val("&h"+Mid(Temp,1,2)))
    Return TempB
End Function

Zum Nachvollziehen habe ich PMedias Funktion mal in ein Beispiel gepackt, zusammen mit ein paar Änderungen, die sie schneller machen und auch eine Function, die aus einer 'normalen' IP-Adresse eine 'dezimale' macht:

Function SubStr(byVal Liste As String, byVal Trenner As String, byVal Stelle As Integer) As String
  Dim As Integer Aktuell=0, Ooops, ltr=Len(Trenner), Vorige=1, Gefunden
  If Stelle=0 Or Liste="" Or Trenner="" Or Instr(Liste, Trenner)=0 Then Return ""
  Do
    Ooops=Gefunden
    Gefunden=Instr(Gefunden+1, Liste, Trenner)
    Aktuell-=Gefunden<>0
    If Aktuell=Stelle-1 Then Vorige=Gefunden+ltr
    If Aktuell=Stelle Then Exit Do
  Loop Until Gefunden=0
  If Stelle>Aktuell Then Return Mid(Liste, IIF(Stelle-Aktuell>1, Len(Liste)+1, Ooops+ltr)) &Chr(0)
  Return Mid(Liste, Vorige, Gefunden-Vorige)
End Function

Function yIP_Get(IP As uInteger) As String
    Dim As String Temp=Hex(IP, 8)
    Return Str(Val("&h" &Chr(Temp[6], Temp[7]))) &"." _
      &Val("&h" &Chr(Temp[4], Temp[5])) &"." _
      &Val("&h" &Chr(Temp[2], Temp[3])) &"." _
      &Val("&h" &Chr(Temp[0], Temp[1]))
End Function

Function ip_get(ip as integer) As String
    Dim Temp As String
    Dim TempB As String
    Temp = Hex(ip)
    if len(temp) < 8 then temp = string(8-len(temp), "0")+temp
    TempB = Str(Val("&h"+Mid(Temp,7,2)))+"."
    TempB += Str(Val("&h"+Mid(Temp,5,2)))+"."
    TempB += Str(Val("&h"+Mid(Temp,3,2)))+"."
    TempB += Str(Val("&h"+Mid(Temp,1,2)))
    Return TempB
End Function

Function y_ip_get(ip As Integer) As String
    Dim As String s, t = Hex(ip, 8)
    s = Str(Val("&h" &Mid(t, 7, 2))) &"." &Val("&h" &Mid(t, 5, 2)) &"."
    Return s &Val("&h" &Mid(t, 3, 2)) &"." &Val("&h" &Mid(t, 1, 2)))
End Function


Function ip2long (IP As String) As uInteger
  Dim As uInteger num, kf(1 To 4)={256*256*256, 256*256, 256, 1}
'  Dim As uInteger num, kf(1 To 4)={1, 256, 256*256, 256*256*256} 'für andersherum
  For i As Integer=1 To 4
    num+=Val(SubStr(IP, ".", i))*kf(i)
  Next
  Return num
End Function

Dim IP As String="127.3.2.1"
?yIP_Get(IP2Long(IP))
?IP_Get(IP2Long(IP))
?"Soll=" &Cast(uInteger, 127*16777216+3*65536+2*256+1) 'Formel kann im INet nachgelesen werden
'?"Soll=" &Cast(uInteger, 127+3*256+2*65536+1*16777216) 'für andersherum
?IP2Long(IP)
Sleep

Gruß
ytwinky


Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 06.08.2007 von MitgliedPMedia angelegt.
  • Die aktuellste Version wurde am 12.11.2007 von MitgliedPMedia gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen