请教怎么将域名转变成IP    在线等。

解决方案 »

  1.   

    從域名得到IP及從IP得到域名Private Const WS_VERSION_REQD = &H101
    Private Const WS_VERSION_MAJOR = WS_VERSION_REQD \ &H100 And &HFF&
    Private Const WS_VERSION_MINOR = WS_VERSION_REQD And &HFF&
    Private Const MIN_SOCKETS_REQD = 1
    Private Const SOCKET_ERROR = -1
    Private Const WSADescription_Len = 256
    Private Const WSASYS_Status_Len = 128Private Type HOSTENT
      hname     As Long
      hAliases  As Long
      hAddrType As Integer
      hLength   As Integer
      hAddrList As Long
    End TypePrivate Type WSADATA
      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 Declare Function gethostbyaddr Lib "WSOCK32.DLL" (addr As Any, ByVal _
                    byteslen As Integer, addrtype As Integer) As Long
    Private Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long
    Private Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal _
                    wVersionRequired&, lpWSAData As WSADATA) As Long
    Private Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long
    Private Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal hostname$) As Long
    Private Declare Sub RtlMoveMemory Lib "KERNEL32" (hpvDest As Any, ByVal hpvSource&, ByVal cbCopy&)Function hibyte(ByVal wParam As Integer)    '獲得整數的高位
      hibyte = wParam \ &H100 And &HFF&
    End FunctionFunction lobyte(ByVal wParam As Integer)    '獲得整數的低位
      lobyte = wParam And &HFF&
    End FunctionFunction SocketsInitialize()
      Dim WSAD      As WSADATA
      Dim iReturn   As Integer
      Dim sLowByte  As String
      Dim sHighByte As String
      Dim sMsg      As String
       
      iReturn = WSAStartup(WS_VERSION_REQD, WSAD)
       
      If iReturn <> 0 Then
         MsgBox "Winsock.dll 沒有反應."
         End
      End If
       
      If lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyte(WSAD.wversion) = WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VERSION_MINOR) Then
         sHighByte = Trim$(str$(hibyte(WSAD.wversion)))
         sLowByte = Trim$(str$(lobyte(WSAD.wversion)))
         sMsg = "Windows Sockets版本 " & sLowByte & "." & sHighByte
         sMsg = sMsg & " 不被winsock.dll支持 "
         MsgBox sMsg
         End
      End If
       
      If WSAD.iMaxSockets < MIN_SOCKETS_REQD Then
         sMsg = "這個系統需要的最少Sockets數為 "
         sMsg = sMsg & Trim$(str$(MIN_SOCKETS_REQD))
         MsgBox sMsg
         End
      End If
    End FunctionSub SocketsCleanup()
        Dim lReturn As Long
        lReturn = WSACleanup()
        If lReturn <> 0 Then
           MsgBox "Socket錯誤 " & Trim$(str$(lReturn)) & " occurred in Cleanup "
           End
        End If
    End SubSub Form_Load()
        '初始化Socket
        SocketsInitialize
    End SubPrivate Sub Form_Unload(Cancel As Integer)
      '清除Socket
      SocketsCleanup
    End SubPrivate Function getip(name As String) As String
      Dim hostent_addr      As Long
      Dim host              As HOSTENT
      Dim hostip_addr       As Long
      Dim temp_ip_address() As Byte
      Dim i                 As Integer
      Dim ip_address        As String
       
      hostent_addr = gethostbyname(name)
       
      If hostent_addr = 0 Then
         getip = ""                     '主机名不能被解釋
         Exit Function
      End If
       
      RtlMoveMemory host, hostent_addr, LenB(host)
      RtlMoveMemory hostip_addr, host.hAddrList, 4
       
      ReDim temp_ip_address(1 To host.hLength)
      RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLength
       
      For i = 1 To host.hLength
          ip_address = ip_address & temp_ip_address(i) & "."
      Next
      ip_address = Mid$(ip_address, 1, Len(ip_address) - 1)
       
      getip = ip_address
    End FunctionPrivate Sub Command1_click()
      Dim str As String
      str = getip(Text1.Text)
      If str = "" Then
         Text2.Text = "主机名不能被解釋"
      Else
         Text2.Text = str
      End If
    End SubPrivate Function getname(addrstr As String) As String
      Dim hostent_addr    As Long
      Dim host            As HOSTENT
      Dim addr(0 To 50)   As Byte
      Dim addrs           As String
      Dim hname(1 To 50)  As Byte
      Dim str             As String
      Dim i As Integer, j As Integer
      Dim temp_int        As Integer
      Dim byt             As Byte
      str = Trim$(addrstr)
      i = 0
      j = 0
      Do
        temp_int = 0
        i = i + 1
        Do While Mid$(str, i, 1) >= "0" And Mid$(str, i, 1) <= "9" And i <= Len(str)
           temp_int = temp_int * 10 + Mid$(str, i, 1)
           i = i + 1
        Loop
        If temp_int <= 255 Then
           addr(j) = temp_int
           j = j + 1
        End If
        
        Loop Until Mid$(str, i, 1) <> "." Or i > Len(str) Or temp_int > 255
             If temp_int > 255 Then
                getname = "地址非法"
                Exit Function
             End If
             hostent_addr = gethostbyaddr(addr(0), j, 2)
             If hostent_addr = 0 Then
                getname = "此地址無法解析"
                Exit Function
             End If
             RtlMoveMemory host, hostent_addr, LenB(host)
             RtlMoveMemory hname(1), host.hname, 50
             j = 51
             For i = 1 To 50
                 If hname(i) = 0 Then j = i
                 If i >= j Then hname(i) = 32
             Next i
             getname = Trim$(StrConv(hname, vbUnicode))
    End FunctionPrivate Sub Command2_Click()
      Dim name As String
      name = getname(Text2.Text)
      If name = "" Then name = "此地址沒有域名"
      Text1.Text = name
    End Sub