Code-Beispiel
IP-Adresse "lesbar" machen
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
GPL | PMedia | 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 PMedia angelegt.
- Die aktuellste Version wurde am 12.11.2007 von PMedia gespeichert.
|
|