Home Office Tips Excel VBA Eigene IP-Adresse anzeigen
Eigene IP-Adresse anzeigen PDF Print E-mail

 

Beispiel für das Auslesen der eigenen IP-Adresse.

Kann sehr nützlich sein, wenn für eine Anwendung ein Log geführt werden soll. Somit läßt sich der PC eindeutig identifizieren.

 

Option Explicit

Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () _
        As Long

       
Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _
        wVersionRequired As Long, lpWSAData As WinSocketDataType) _
        As Long
       
Private Declare Function WSACleanup Lib "WSOCK32.DLL" () _
        As Long
       
Private Declare Function gethostname Lib "WSOCK32.DLL" (ByVal _
        HostName As String, ByVal HostLen As Integer) As Long
       
Private Declare Function gethostbyname Lib "WSOCK32.DLL" _
        (ByVal HostName As String) As Long
       
Private Declare Sub RtlMoveMemory Lib "kernel32" (hpvDest As _
        Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
       
Private Type HostDeType
    hName As Long
    hAliases As Long
    hAddrType As Integer
    hLength As Integer
    hAddrList As Long
End Type

Const WS_VERSION_REQD As Long = &H101&
Const SOCKET_ERROR As Long = -1&
Const WSADESCRIPTION_LEN As Long = 256&
Const WSASYS_STATUS_LEN As Long = 128&

Private Type WinSocketDataType
    wVersion As Integer
    wHighVersion As Integer
    szDescription(0 To WSADESCRIPTION_LEN) As Byte
    szSystemStatus(0 To WSASYS_STATUS_LEN) As Byte
    iMaxSockets As Integer
    iMaxUdpDg As Integer
    lpszVendorInfo As Long
End Type

Private strPCName As String
Private strPCIP As String


Private Sub GetIPs()
    Dim IP As String, Host As String
    Dim x As Integer
    Call InitSocketAPI
    Host = MyHostName
    MsgBox (HostByName(Host, x))
    Call CleanSockets
End Sub

Private Sub InitSocketAPI()
    Dim Result As Integer
    Dim SocketData As WinSocketDataType
    Result = WSAStartup(WS_VERSION_REQD, SocketData)
    If Result <> 0 Then
        Call MsgBox("'winsock.dll' antwortet nicht !")
        End
    End If
End Sub

Private Function MyHostName() As String
    Dim HostName As String * 256
    If gethostname(HostName, 256) = SOCKET_ERROR Then
        MsgBox "Windows Sockets error " & Str(WSAGetLastError())
        Exit Function
    Else
        MyHostName = NextChar(Trim$(HostName), Chr$(0))
    End If
End Function

Private Function HostByName(Name As String, Optional x As Integer = 0) As String
    Dim MemIp() As Byte
    Dim y As Integer
    Dim HostDeAddress As Long, HostIp As Long
    Dim IpAddress As String
    Dim Host As HostDeType
    HostDeAddress = gethostbyname(Name)
    If HostDeAddress = 0 Then
        HostByName = ""
        Exit Function
    End If
    Call RtlMoveMemory(Host, HostDeAddress, LenB(Host))
    For y = 0 To x
        Call RtlMoveMemory(HostIp, Host.hAddrList + 4 * y, 4)
        If HostIp = 0 Then
            HostByName = ""
            Exit Function
        End If
    Next y
    ReDim MemIp(1 To Host.hLength)
    Call RtlMoveMemory(MemIp(1), HostIp, Host.hLength)
    IpAddress = ""
    For y = 1 To Host.hLength
        IpAddress = IpAddress & MemIp(y) & "."
    Next y
    IpAddress = Left$(IpAddress, Len(IpAddress) - 1)
    HostByName = IpAddress
    strPCIP = IpAddress
End Function

Private Sub CleanSockets()
    Dim Result As Long
    Result = WSACleanup()
    If Result <> 0 Then
        Call MsgBox("Socket Error " & Trim$(Str$(Result)) & _
                      " in Prozedur 'CleanSockets' aufgetreten !")
        End
    End If
End Sub

Private Function NextChar(Text As String, Char As String) As String
    Dim pos As Integer
    pos = InStr(1, Text, Char)
    If pos = 0 Then
        NextChar = Text
        Text = ""
    Else
        NextChar = Left$(Text, pos - 1)
        Text = Mid$(Text, pos + Len(Char))
    End If
    strPCName = NextChar
End Function

 

 

 

 

Eigene_IP-Adresse_anzeigen-VBA.zip