Will man seine eigene dynamische IP ermitteln, so kann man dies im allgemeinen natürlich über das Winsock-Control machen. MsgBox "Meine eigene IP: " & Winsock1.LocalIP Dieses Vorgehen hat aber einen entscheidenden Nachteil, sobald sich der Rechner in einem LAN mit TCP/IP-Protokoll befindet. Dann nämlich liefert "LocalIP" immer nur die LAN-IP. Will man dann trotzdem die dynamische IP herausfinden, so gibt es mindestens zwei Wege. Der erste davon wurde bereits in Dynamische IP-Adresse schnell ermittelt - dank WMI gezeigt. Wenn man jedoch (wie ich) kein WMI installiert hat, so kann man die Information auch durch eine Auswertung der TCP-Kontrollstrukturen erhalten. Dazu benötigt man lediglich die "iphlpapi.dll", die aber bei Aktivieren von TCP/IP von Windows im allgemeinen automatisch installiert wird. Die folgende Funktion "GetIPAdresses" gibt alle verfügbaren IP's des eigenen Rechners in einem String durch Komma getrennt zurück: Option Explicit ' zunächst alle benötigten API-Deklarationen Private Declare Function GetTcpTable Lib "iphlpapi.dll" ( _ ByRef pTcpTable As Any, _ ByRef pdwSize As Long, _ ByVal bOrder As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" _ Alias "RtlMoveMemory" ( _ dst As Any, _ src As Any, _ ByVal bcount As Long) Private Declare Function lstrcpyA Lib "kernel32" ( _ ByVal RetVal As String, _ ByVal Ptr As Long) As Long Private Declare Function lstrlenA Lib "kernel32" ( _ ByVal Ptr As Any) As Long Private Declare Function inet_ntoa Lib "wsock32.dll" ( _ ByVal addr As Long) As Long Private Type MIB_TCPROW dwState As Long dwLocalAddr As Long dwLocalPort As Long dwRemoteAddr As Long dwRemotePort As Long End Type Private Const ERROR_SUCCESS As Long = 0 Private Const MIB_TCP_STATE_CLOSED As Long = 1 Private Const MIB_TCP_STATE_LISTEN As Long = 2 Private Const MIB_TCP_STATE_SYN_SENT As Long = 3 Private Const MIB_TCP_STATE_SYN_RCVD As Long = 4 Private Const MIB_TCP_STATE_ESTAB As Long = 5 Private Const MIB_TCP_STATE_FIN_WAIT1 As Long = 6 Private Const MIB_TCP_STATE_FIN_WAIT2 As Long = 7 Private Const MIB_TCP_STATE_CLOSE_WAIT As Long = 8 Private Const MIB_TCP_STATE_CLOSING As Long = 9 Private Const MIB_TCP_STATE_LAST_ACK As Long = 10 Private Const MIB_TCP_STATE_TIME_WAIT As Long = 11 Private Const MIB_TCP_STATE_DELETE_TCB As Long = 12 ' Hilfsfunktionen Private Function GetString(ByVal lpszA As Long) As String GetString = String$(lstrlenA(ByVal lpszA), 0) Call lstrcpyA(ByVal GetString, ByVal lpszA) End Function Private Function GetInetAddrStr(Adresse As Long) As String GetInetAddrStr = GetString(inet_ntoa(Adresse)) End Function ' alle IP-Adressen ermitteln Public Function GetIPAdresses() As String Dim TcpRow As MIB_TCPROW Dim byBuffer() As Byte Dim lBenoetigt As Long Dim lGroesse As Long Dim lZeilen As Long Dim lZaehler As Long Dim sAktAdresse As String Dim sGefunden() As String Dim lAnzahl As Long Dim i As Long Dim bFound As Boolean Call GetTcpTable(ByVal 0&, lBenoetigt, 1) GetIPAdresses = "" lAnzahl = 0 If lBenoetigt > 0 Then ReDim Buffer(0 To lBenoetigt - 1) As Byte If GetTcpTable(Buffer(0), lBenoetigt, 1) = ERROR_SUCCESS Then lGroesse = LenB(TcpRow) ' Die ersten 4 Bytes enthalten die Anzahl der ' Einträge CopyMemory lZeilen, Buffer(0), 4 For lZaehler = 1 To lZeilen bFound = False ' Überspringt die ersten vier Bytes von vorher ' und holt die Daten in die TcpRow-Struktur CopyMemory TcpRow, Buffer(4 + _ (lZaehler - 1) * lGroesse), lGroesse With TcpRow sAktAdresse = GetInetAddrStr(.dwLocalAddr) ' Die IP's können mehrfach vorkommen, deswegen ' hier schauen welche IP's schon vorher ' gefunden wurden For i = 1 To lAnzahl bFound = (sAktAdresse = sGefunden(i)) Next i If Not bFound And Left(sAktAdresse, 1) <> "0" _ And sAktAdresse <> "127.0.0.1" Then GetIPAdresses = GetIPAdresses & _ GetInetAddrStr(.dwLocalAddr) & "," lAnzahl = lAnzahl + 1 ReDim Preserve sGefunden(lAnzahl) sGefunden(lAnzahl) = sAktAdresse End If End With Next lZaehler ' Am Ende das letzte Komma entfernen GetIPAdresses = Left(GetIPAdresses, _ Len(GetIPAdresses) - 1) Else MsgBox "Es trat ein Fehler beim Füllen der " & _ "TCP-Struktur auf!" End If End If End Function Ein Beispiel, wie die IP's ausgelesen werden können: MsgBox "Meine IP's: " & GetIPAdresses() Dieser Tipp wurde bereits 32.220 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevAniGif (VB/VBA) Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |