请问在vb编程中如何获取指定网页的公网ip,(我的网站是动态ip)

解决方案 »

  1.   

    不知你是要用网页的访问来获取公网IP?还是...什么?感觉没把问题描述清楚!如果说是你用于做网站服务器的IP是动态的,要让你程序根据动态IP来访问到,那么就可以使用花生壳之类的动态(IP)域名管理软件来实现!如果你是要在指定域名下,获取网站服务器的IP,你可以在指定页面,通过页面代码来返回IP...呵呵!
      

  2.   

    那你是已知域名是吧?那可以直接根据域名来获取IP的!!==============================
    vb中从域名得到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, sHighByte As String, 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 Sub
    Private 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_addressEnd FunctionPrivate Sub Command1_click()
        Dim str As String
        str = getip(Text1.Text)
        If str = "" Then
            Text2.Text = "主机名不能被解释"
        Else
            Text2.Text = str
        End If
    End Sub
    Private 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
            End If
            If i >= j Then
                hname(i) = 32
            End If
        Next i
        getname = Trim$(StrConv(hname, vbUnicode))
    End Function
    Private Sub Command2_Click()
        Dim name As String
        name = getname(Text2.Text)
        If name = "" Then
            name = "此地址没有域名"
        End If
        Text1.Text = name
    End Sub
      

  3.   

    3楼的兄弟,能否告诉我你的qq号,我以后可以向你请教问题,
    本想给你加分,但系统提示我发贴不到5天
    Private Const WS_VERSION_MAJOR = WS_VERSION_REQD &H100 And &HFF&
    hibyte = wParam &H100 And &HFF&
    上面两句有问题
    请问你懂不懂asp之类的
      

  4.   

    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 那块代码是这样的嘛!呵呵!
      

  5.   

    &H100 And &HFF&
    两种颜色?运行报错,去掉&H100 后ok
      

  6.   

    用WMP控件进行多媒体编程,还需要什么控件?
      

  7.   

    我在网上下载了宝丽通网络媒体播放器,里面有一个控件,我想用此控件做一个播放器,但不知道如何把此控件封在我的程序里,让没有装宝丽通网络媒体播放器的电脑里只要装我的播放器就可以用,望各位大虾指教一下,另外请教一个问题,我在一个界面下,做几个播放窗口(既几个播放控件),是不是占用系统资源是只有一个的几倍?有没有只要一个控件可以同时播放几个文件(多媒体文件)的办法?我想播放固定位置的几个asf电影,然后客户根据他的需要看某一部电影(双击播放),应该可以不需要别的控件吧?兄弟,能否告诉我你的qq号,我以后可以向你请教问题
      

  8.   

    最简单的是用系统的ping,
    vb里运行ping,结果输出到一个文件里,然后从那里获取ip