获取外网IP的几种方法

本文介绍五种获取外网IP地址的方法,包括使用XML、INET控件、纯API调用、InternetExplorer对象及WebBrowser控件。通过实际测试对比,推荐第一种方法因其简单易实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  获取外网IP的几种方法 收藏
测试了几种方法,其实质是一样的,还是觉得第一种最好,最简单.下面分别列出来:

第一种:用XML

    Set h = CreateObject("Microsoft.XMLHTTP")
    h.Open "GET", "http://www.ip138.com/ip2city.asp", False
    h.Send
    If h.ReadyState = 4 Then s = StrConv(h.Responsebody, vbUnicode)
    If InStr(s, "[") > 0 And InStr(s, "]") > 0 Then MsgBox Split(Split(s, "[")(1), "]")(0) Else MsgBox "IP地址获取失败"

第二种:用inet控件

    Dim WWIP As String, Tmp As Long
    WWIP = Inet1.OpenURL("http://www.ip138.com/ip2city.asp")
    Tmp = InStr(1, WWIP, "[")
    If Tmp > 0 Then
        MsgBox Mid(WWIP, Tmp + 1, InStr(Tmp + 1, WWIP, "]") - Tmp - 1)
    Else
        MsgBox "IP地址获取失败"
    End If

第三种:用纯API

Private Declare Function InternetOpen Lib "Wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long
Private Declare Function InternetOpenUrl Lib "Wininet.dll" Alias "InternetOpenUrlA" (ByVal hInternetSession As Long, ByVal lpszUrl As String, ByVal lpszHeaders As String, ByVal dwHeadersLength As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
Private Declare Function InternetReadFile Lib "Wininet.dll" (ByVal hFile As Long, sBuffer As Any, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
Private Declare Function InternetCloseHandle Lib "Wininet.dll" (ByVal hInet As Long) As Integer
Private Const OnceLen = 2048
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_FLAG_RELOAD = &H80000000

'打开URL函数
Function OpenURL(ByVal sURL As String) As String
    Dim hOpen As Long, hFile As Long, RetLen As Long, Buffer() As Byte, szBuffer As String
    hOpen = InternetOpen(vbNullString, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
    hFile = InternetOpenUrl(hOpen, sURL, vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
    If hFile <> 0 Then
        Do
            ReDim Buffer(OnceLen - 1)
            InternetReadFile hFile, ByVal VarPtr(Buffer(0)), OnceLen, RetLen
            DoEvents
            If RetLen = 0 Then Exit Do
            If RetLen < OnceLen Then ReDim Preserve Buffer(RetLen - 1)
            szBuffer = szBuffer & CStr(Buffer)
        Loop
        InternetCloseHandle hFile
    End If
    InternetCloseHandle hOpen
    OpenURL = StrConv(szBuffer, vbUnicode)
End Function

Private Sub Command1_Click()
    Dim s As String
    s = OpenURL("http://www.ip138.com/ip2city.asp")
    If InStr(s, "[") > 0 And InStr(s, "]") > 0 Then MsgBox Split(Split(s, "[")(1), "]")(0) Else MsgBox "IP地址获取失败"
End Sub

第四种:用"InternetExplorer.Application"对象

    Dim objIE As Object
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Visible = False
    objIE.Navigate "http://www.ip138.com/ip2city.asp"
    Do While objIE.Busy
        DoEvents
    Loop
    MsgBox objIE.Document.body.innertext
    Set objIE = Nothing
 

第五种:用WebBrowser控件

不推荐,略

参见原帖:

http://www.vbgood.com/thread-73675-1-1.html


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/asftrhgjhkjlkttttttt/archive/2010/12/28/6101944.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值