vb用Iphlpapi.dll获取网络信息教程
VBA实现网页自动登录和信息采集的方法与技巧
VBA实现网页自动登录和信息采集的方法与技巧在当今互联网时代的背景下,自动化的信息采集变得越来越重要。
VBA(Visual Basic for Applications)作为一种宏语言,在Microsoft Office软件中被广泛应用。
通过VBA,我们可以实现网页自动登录和信息采集的功能,提高工作效率和数据准确性。
本文将介绍VBA实现网页自动登录和信息采集的方法与技巧,帮助读者更好地利用VBA进行自动化操作。
首先,实现网页自动登录需要了解HTML表单的工作原理。
在网页中,我们通常会遇到使用用户名和密码登录的表单。
VBA可以模拟用户输入,并提交表单,实现自动登录。
以下是实现网页自动登录的步骤:1. 新建VBA宏:在Microsoft Office软件中,如Excel 中按下ALT+F11快捷键,打开VBA编辑器。
在项目资源管理器中,选择对应的工作簿,右键点击插入模块,新建VBA宏。
2. 引用Microsoft Internet Controls库:在VBA编辑器中,点击工具-引用。
在出现的引用对话框中,勾选“M icrosoft Internet Controls”并点击确定。
3. 创建Internet Explorer对象:在VBA宏中,使用CreateObject函数创建Internet Explorer对象并设置其Visible属性为True,以便后续操作时能可视化显示页面。
4. 导航到登录页面:使用Navigate方法将IE对象导航到登录页面的URL地址。
5. 获取表单元素并填充:使用getElementsByName或getElementByID方法获取HTML表单元素,并使用Value属性设置其值,模拟用户输入用户名和密码。
6. 提交表单:使用getElementsByName或getElementByID方法获取登录按钮元素,并使用Click方法提交表单。
7. 等待页面加载完成:使用Do While循环等待页面加载完成,可以通过检测IE对象的ReadyState属性和Busy属性来判断页面是否已加载完毕。
利用VB访问Internet
当前, 有许多构造模块可以帮助用户创建名为超客户端(rich client)的Internet应用其中包括Visual Basic(以下简称VB)的ActiveX 控件集合。
它们可以提供SMTP和POP邮件服务、FTP、Newsgroup和Web访问等功能。
另外,利用OLE也可以实现Web访问的自动化。
本文向大家介绍这两种方法。
在应用中嵌入ActiveX控件利用Crescent的Internet Toolpak(Internet 工具包)符合HTTP 协议的控件,可以将VB应用连接到Web站点,向站点传送数据,并从站点获取HTML页面。
Crescent HTTP控件不能实际显示出下载的HTML页面,但能使应用程序以字符串的形式使用页面数据。
例如,如果服务器产生一个名叫Myresult.html的HTML文件答复来自客户端的请求,客户端应用能够通过与服务器建立的Crescent Active X连接来获取并下载这个文件。
建立连接的代码段如下:CIHTTP1.HostName=""CIHTTP1.URL="resul ts\myresult.html"CHTTP.ParseIncomingData = TrueCIHTTP1.Conn ectToServer一旦ActiveX控件与服务器建立连接,它就会触发HTTPServerConnection事件。
这时,应用程序发出命令CIHTTP1.GET,检索RL属性中指定的页面,然后该控件激活FileClosed事件取回指定的页面。
应用程序通过ActveX的属性HTMLPageText WithTags(主页不嵌有HTML代码时用属性HTMLPageTextWithOutTgs) 读页面文本。
代码如下:mytext= CIHTTP1. HTMLPageTextWithTags如果不想用控件下载整个主页,可以通过控件的PacketReceived事件的Packet参数快速扫描页面数据。
VB获取IP地址
IP = Right(IPstr, Len(IPstr) - InStr(IPstr, "["))
sLocalFile = "c:\ip.txt"
Call DeleteUrlCacheEntry(sSourceUrl)
If DownloadFile(sSourceUrl, sLocalFile) Then
hfile = FreeFile
Open sLocalFile For Input As #hfile
Dim Adapter As IP_ADAPTER_INFO
Call GetAdaptersInfo(ByVal 0&, cbRequired)
If cbRequired > 0 Then
ReDim buff(0 To cbRequired - 1) As Byte
WebBrowser1.Navigate ""
End Sub
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
On Error Resume Next '忽略错误 没有网络连接就没有从电信那获得外网IP 也就没有结果
Text2.Text = ""
End Sub
Private Sub Command1_Click()
VBA在网页自动化抓取与处理中的技巧
VBA在网页自动化抓取与处理中的技巧随着互联网的快速发展,大量的信息都储存在网页中。
对于许多需要获取网页数据的用户来说,手动复制粘贴显然是一件非常费时费力的事情。
然而,通过使用VBA(Visual Basic for Applications)编程语言,我们可以自动化这个过程,快速、高效地获取并处理网页数据。
本文将介绍一些VBA在网页自动化抓取与处理中的技巧,帮助读者掌握这一强大的工具。
1.使用XMLHTTP对象进行网页数据抓取在VBA中,我们可以使用XMLHTTP对象来发送HTTP请求,并获取网页的内容。
首先,需要引用Microsoft XML, v6.0库,并使用CreateObject函数创建XMLHTTP对象。
然后,可以使用XMLHTTP对象的Open、Send和ResponseText 属性来发送请求并获取网页内容。
此外,还可以使用XMLHTTP对象的Status和StatusText属性来获取HTTP响应的状态和描述。
通过控制XMLHTTP对象的各种属性和方法,我们可以实现对网页的自动化抓取。
2.解析HTML文档以提取所需数据获取网页内容后,接下来的关键步骤是解析HTML文档,以便提取出所需的数据。
VBA提供了许多方法来处理HTML文档,其中最常用的是使用HTMLDocument对象。
可以使用CreateObject函数创建HTMLDocument对象,并使用该对象的Write方法来加载HTML内容。
然后,可以使用HTMLDocument对象的各种方法和属性来查找和提取所需的数据。
例如,可以使用getElementById方法根据元素的ID获取特定元素的内容,使用getElementsByTagName方法根据标签名获取一组元素,或使用getElementsByClassName方法根据类名获取一组元素。
通过灵活利用HTMLDocument对象的各种方法和属性,可以轻松地从网页中提取出所需的数据。
VBA与网络通信的实际应用方法
VBA与网络通信的实际应用方法VBA(Visual Basic for Applications)是一种广泛应用的编程语言,通常用于在Microsoft Office应用程序中自动化任务和处理数据。
在当今数字化时代,网络通信变得至关重要。
本文将介绍VBA如何与网络通信结合,以实现各种实际应用方法。
一、基本概念与原理在VBA中,通过使用对象库中的"Microsoft.XMLHTTP"对象,可以实现与服务器进行HTTP通信。
该对象允许VBA在网络上发送HTTP 请求并接收响应。
通过这种方式,可以实现与远程服务器的通信,以获取数据或执行其他相关任务。
二、实际应用方法以下是几种使用VBA进行网络通信的实际应用方法:1. 发送HTTP请求通过VBA代码可以实现发送HTTP请求到特定的URL,并接收服务器返回的响应。
可以使用"Microsoft.XMLHTTP"对象的"open"、"send"和"responseText"等方法和属性来实现。
例如,可以通过发送HTTP GET请求获取特定网页的内容,或者通过发送HTTP POST请求向服务器提交表单数据。
2. 下载文件通过VBA代码,可以实现从指定URL下载文件到本地计算机。
使用"Microsoft.XMLHTTP"对象的"send"方法发送HTTP GET请求,将服务器返回的文件数据保存到本地文件中。
这对于自动化下载文件任务非常有用,尤其是针对需要定期更新的数据文件。
3. 解析网页内容通过VBA代码,可以解析特定网页的内容,并提取关键信息。
使用"Microsoft.XMLHTTP"对象发送HTTP GET请求获取网页内容后,通过VBA自带的字符串操作函数或正则表达式等方法,可以从网页内容中提取想要的数据。
VBA调用外部动态链接库的方法与示例
VBA调用外部动态链接库的方法与示例VBA(Visual Basic for Applications)是微软的一种编程语言,广泛应用于Office套件中的各种应用程序,如Excel、Word和Access。
VBA允许用户通过编写宏来自动化任务、增强功能和定制用户界面。
有时候,我们可能需要调用外部的动态链接库(DLL)中的函数来扩展VBA 的功能。
本文将介绍VBA调用外部动态链接库的方法,并提供一些示例帮助读者更好地理解。
一、什么是动态链接库(DLL)?动态链接库(Dynamic Link Library,DLL)是一种微软Windows操作系统中的可执行文件。
DLL中包含可供其他程序调用的函数、数据和资源。
通过使用DLL,我们可以实现代码的共享和重复使用,提高程序的模块化程度和执行效率。
二、VBA中调用DLL的方法VBA提供了一组用于调用DLL函数的关键字和函数。
具体步骤如下:1. 声明DLL函数在VBA代码中,首先需要声明将要调用的DLL函数。
声明的语法如下:```Declare Function 函数名 Lib "动态链接库文件名" (参数列表) As 返回值类型```其中,函数名是DLL中的函数名,动态链接库文件名是DLL所在的路径和文件名,参数列表是函数的输入参数,返回值类型是函数的返回值类型。
2. 在VBA中调用DLL函数声明完DLL函数后,我们就可以在VBA代码中调用这些函数了。
调用的语法如下:```变量名 = 函数名(参数列表)```其中,变量名是接收函数返回值的变量,函数名是所声明的DLL函数的函数名,参数列表是函数的输入参数。
3. 注册和取消注册DLL在调用DLL函数之前,我们需要先将DLL注册到Windows系统中。
注册DLL可以使用Windows系统提供的regsvr32工具。
具体操作步骤如下:a. 打开命令提示符窗口。
b. 输入regsvr32命令,后面是DLL的完整路径和文件名。
VB中怎么获取客户机电脑名和IP地址?谢谢!不是.net哦
VB中怎么获取客户机电脑名和IP地址?谢谢!不是.net哦分類:電腦/網絡 >> 程序設計 >> 其他編程語言解析:Private Const NCBASTAT = &H33Private Const NCBNAMSZ = 16Private Const HEAP_ZERO_MEMORY = &H8Private Const HEAP_GENERATE_EXCEPTIONS = &H4 Private Const NCBRESET = &H32Private Type NCBncb_mand As Bytencb_retcode As Bytencb_lsn As Bytencb_num As Bytencb_buffer As Longncb_length As Integerncb_callname As String * NCBNAMSZncb_name As String * NCBNAMSZncb_rto As Bytencb_sto As Bytencb_post As Longncb_lana_num As Bytencb_cmd_cplt As Bytencb_reserve(9) As Byte ' Reserved, must be 0ncb_event As LongEnd TypePrivate Type ADAPTER_STATUSadapter_address(5) As Byterev_major As Bytereserved0 As Byteadapter_type As Byterev_minor As Byteduration As Integerfrmr_recv As Integerfrmr_xmit As Integeriframe_recv_err As Integer xmit_aborts As Integerxmit_success As Longrecv_success As Long iframe_xmit_err As Integer recv_buff_unavail As Integer t1_timeouts As Integerti_timeouts As Integer Reserved1 As Longfree_ncbs As Integermax_cfg_ncbs As Integer max_ncbs As Integerxmit_buf_unavail As Integer max_dgram_size As Integer pending_sess As Integer max_cfg_sess As Integer max_sess As Integermax_sess_pkt_size As Integer name_count As IntegerEnd TypePrivate Type NAME_BUFFER name As String * NCBNAMSZ name_num As Integer name_flags As IntegerEnd TypePrivate Type ASTATadapt As ADAPTER_STATUSNameBuff(30) As NAME_BUFFEREnd TypePrivate Declare Function Netbios Lib "api32.dll" (pncb As NCB) As BytePrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)Private Declare Function GetProcessHeap Lib "kernel32" () As LongPrivate Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As LongPrivate Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long Private Function EtherAddress(LanaNumber As Long) As StringDim udtNCB As NCBDim bytResponse As ByteDim udtASTAT As ASTATDim udtT empASTAT As ASTATDim lngASTAT As LongDim strOut As StringDim x As IntegerudtNCB.ncb_mand = NCBRESETbytResponse = Netbios(udtNCB)udtNCB.ncb_mand = NCBASTATudtNCB.ncb_lana_num = LanaNumberudtNCB.ncb_callname = "* "udtNCB.ncb_length = Len(udtASTAT)lngASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, udtNCB.ncb_length)strOut = ""If lngASTAT ThenudtNCB.ncb_buffer = lngASTATbytResponse = Netbios(udtNCB)CopyMemory udtASTAT, udtNCB.ncb_buffer, Len(udtASTAT) With udtASTAT.adaptFor x = 0 To 5strOut = strOut & "-" & Right$("00" & Hex$(.adapter_address(x)), 2)Next xEnd WithHeapFree GetProcessHeap(), 0, lngASTATEnd IfEtherAddress = strOutEnd FunctionPrivate Sub Command1_Click()Text1.Text = Right$(EtherAddress(0), 17)Text2.Text = Winsock1.LocalIPText3.Text = Winsock1.LocalHostNameEnd SubPrivate Sub Command2_Click()EndEnd Sub。
vb编程读取路由器数据的方法
vb编程读取路由器数据的方法路由器是用于连接设备与互联网的设备,它在个人电脑与网络之间起着重要的桥梁作用。
在这样的背景下,当我们需要获取路由器的数据时,我们需要用到 VB 编程读取路由器数据的方法。
本文将介绍如何通过 获取路由器数据的方法。
一、了解路由器数据在开始读取路由器数据之前,首先需要了解路由器数据,这些数据有哪些?在哪里可以找到?路由器数据主要包括以下几类:(1)设备相关数据:该类数据包括路由器的设备名称、IP地址、MAC地址等信息。
(2)网络相关数据:该类数据包括路由器连接的网络相关信息,如子网掩码、网关等。
(4)日志数据:该类数据包括路由器存储的日志信息。
2、路由器数据获取方式获取路由器数据的方式有两种,一种是通过 Web 界面进行访问,另一种是通过路由器的 API 进行数据读取。
2.1 通过 Web 界面进行访问路由器提供的 Web 界面让我们可以直接访问路由器的数据,只需在浏览器中输入路由器 IP 地址即可。
当路由器登录成功后,我们可以通过 Web 界面获取到路由器的各种信息。
但是使用 Web 界面进行数据访问需要手动操作,会比较繁琐。
2.2 通过路由器的 API 进行数据读取路由器 API 提供了一种更加直接的方法,可以让程序直接获取路由器数据。
通过API 获取路由器数据的方式有很多,其中一种较为常用的是通过简单网络管理协议来访问路由器。
二、使用 VB 编程读取路由器数据下面,我们将通过 VB 编程来读取路由器数据,并给出具体的步骤。
1、了解 SNMP 协议SNMP 是一种常用的网络管理协议,用于管理网络上的设备,如路由器、交换机、防火墙等。
SNMP 主要提供以下四个部分:1.1 管理信息库(MIB)SNMP 使用 MIB 来记录网络设备可管理的信息。
MIB 类似于一个数据库,包含了使用SNMP 协议所必需的设备 ID(OID)和对应的数值。
OID 用于唯一标识网络设备上的部件和变量,数值则包含了这些部件和变量的状态信息。
vb联网操作技巧
Shell “rundll rnaui.dll,RnaDial 163”,vbNormalFocus
上面假定了连接名称,但在实际编程中我们是不知道连接名称的。在窗体上放置一个命令按钮(cmdCallConnect),在其单击事件中进行连接处理。下面的代码介绍如何取得默认的连接名称并启动它:
End If
Exit Function
/*意外处理*/
ErrorRoutineErr:
GetRegvalue =“”
End Function
SubKey = “RemoteAccess”
/*取得默认连接名*/
GetConnect=GetRegvalue(hKey,SubKey, “Default”)
End Function
/*取得注册的函数(GetRegvalue)*/
Public Function GetRegvalue(hKey As Long,lpszSubKey As String,szKey As String) As Variant
On Error GoTo ErrorRoutineErr:
Dim phkResult As Long
Dim lResult As Long
Dim szBuffer As String
Dim lBuffSize As Long
/*创建缓冲区*/
szBuffer = Space(255)
Option Explicit
/*有关的API声明*/
Private Declare Function RegOpenKeyEx Lib “advapi32” Alias “RegOpenKeyExA” (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
VBAPI函数的使用教程
VBAPI函数的使用教程API是系统提供的一些函数、过程,用法比较简单,总的来说有三类。
使用API,可以在VB带的API浏览器里面查找到声明。
以下声明均为窗体中使用的private第一类API,是过程比如: Sleep ,让窗体休眠声明:Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)在头部定义之后可以直接使用,跟VB里面的SUB一样用法:Sleep 休眠时间(毫秒)例如:Sleep 1000 ,就是让调用的程序挂起1秒推荐用法: Call Sleep (1000)第二类API,是直接返回值比如: FindWindow ,查找指定窗体的句柄声明:Private Declare Function FindWindow Lib "user32"Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long在头部定义之后可以直接使用,跟VB里面的Function一样用法:Dim Handle As LongHandle = FindWindow(vbNullString, 查找的窗口标题)例如:Dim Handle As LongHandle = FindWindow(vbNullString, Me.Caption)查找自己的窗口句柄,可以与 Me.hWnd 对比看是否正确推荐用法:同上第三类API,为指定变量赋值,并返回是否成功比如: FindWindow ,查找指定窗体的句柄声明:Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long在头部定义之后可以直接使用,跟VB里面的Function一样用法:Doit = GetUserName(UserName, 255)得到的UserName 就是当前电脑的用户名例如:Dim UserName As StringDim Doit As LongUserName = Space(255) ' 申请空间,用空格填充,没有这一步不行,因为这一类API不会自动申请空间Doit = GetUserName(UserName, 255) '把用户名赋到变量中,结尾是chr(0)UserName = Left(UserName, InStr(1, UserName, Chr(0)) - 1) '从chr(0)后面都不要了,只取前面Doit是返回的值,跟第二类的一样,这个返回值是指示操作是否成功,非零表示成功推荐用法:同上API种类很多,不过基本用法就是这三类了。
VBA自动访问网页并提取数据的方法总结
VBA自动访问网页并提取数据的方法总结在日常工作和学习中,我们经常需要从互联网上获取信息并进行数据分析。
为了提高效率和准确性,我们可以利用 VBA(Visual Basicfor Applications)编程语言来自动访问网页并提取所需的数据。
VBA 是微软 Office 软件套件中的一种编程语言,广泛应用于 Excel、Word、PowerPoint 等办公软件中。
下面将介绍一些使用 VBA 自动访问网页并提取数据的常见方法,供大家参考和学习。
1. 使用 Internet Explorer 控件通过 VBA 中的 InternetExplorer 控件,我们可以模拟使用 Internet Explorer 浏览器来访问网页并提取数据。
首先需要在 VBA 的引用中添加 Microsoft Internet Controls,并在代码中创建一个 InternetExplorer 对象。
然后,我们可以使用该对象的 Navigate 方法指定要访问的网页URL,并等待页面加载完成后,使用.document 方法获取页面内容。
通过分析页面的 HTML 结构,可以使用 VBA 的 DOM(文档对象模型)来提取所需的数据。
例如,可以使用 getElementsByTagName 方法获取指定标签的集合,通过遍历集合获取每个标签的属性或文本内容来提取数据。
2. 使用 XMLHTTP 请求VBA 还提供了 XMLHTTP 对象,通过发送 HTTP 请求来直接获取网页内容。
使用 XMLHTTP 对象可以绕过浏览器的界面交互,加快数据提取速度。
首先需要在 VBA 的引用中添加 Microsoft XML, v6.0,并在代码中创建一个 XMLHTTP 对象。
然后,使用对象的 Open 方法指定请求的方法(GET 或 POST)和 URL,以及是否异步请求。
在发送请求后,可以使用对象的 Status 属性检查请求的状态码,以确认页面是否成功加载。
在VB中使用API函数
在VB中使用API函数在VB中,可以使用API函数来实现一些高级功能或者与操作系统进行交互。
API(Application Programming Interface)是操作系统提供给开发人员的一组函数和接口,可以通过调用这些函数和接口来访问操作系统的底层功能。
1. 调用Windows API函数获取系统时间使用`GetSystemTime`函数可以获取当前系统的时间信息。
```vbPrivate Type SYSTEMTIMEwYear As IntegerwMonth As IntegerwDayOfWeek As IntegerwDay As IntegerwHour As IntegerwMinute As IntegerwSecond As IntegerwMilliseconds As IntegerEnd TypePrivate Declare Sub GetSystemTime Lib "kernel32" (lpSystemTime As SYSTEMTIME)Private Sub GetTimeDim sysTime As SYSTEMTIMEGetSystemTime sysTimeMsgBox "Current Time: " & sysTime.wHour & ":" &sysTime.wMinute & ":" & sysTime.wSecondEnd Sub```2. 调用Windows API函数显示消息框使用`MessageBox`函数可以显示一个消息框。
```vbPrivate Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As LongPrivate Sub ShowMessageDim result As Longresult = MessageBox(0, "Hello World!", "Message", vbInformation)If result = 1 ThenMsgBox "User clicked OK"ElseMsgBox "User clicked Cancel"End IfEnd Sub```3. 调用Windows API函数实现全屏显示使用`ShowWindow`函数可以设置应用程序窗口的显示状态。
VB获取本机计算机名、用户名、ip地址的方法代码(含5篇)
VB获取本机计算机名、用户名、ip地址的方法代码(含5篇)第一篇:VB 获取本机计算机名、用户名、ip地址的方法代码VB 获取本机计算机名、用户名、ip地址的方法代码 Private Sub Command1_Click()Dim aa As StringDim strLocalIP As StringDim winIP As Objectaa = aa & “本机电脑名称:” & Environ(“computername”)& vbCrLf aa = aa & “本机用户名称:” & Environ(“username”)& vbCrLfSet winIP = CreateObject(“MSWinsock.Winsock”)strLocalIP = winIP.localipMsgBox aa & “本机IP:” & strLocalIPEnd Sub第二篇:vb 6.0 获取本机公网IP[范文]vb 6.0 获取本机公网IPPrivat e 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 LongPrivate Declare Function InternetOpenUrl Lib “wininet.dll” Alias“InternetOpenUrlA”(_ByVal hInternetSession As Long, ByVal sUrl As String, _ByVal sHeaders As String, ByVal lHeadersLength As Long, _ByVal lFlags As Long, ByVal lContext As Long)As Long Private Declare Function InternetReadFile Lib “wininet.dll”(_ByVal hFile As Long, ByVal sBuffer As String, _ByVal lNumBytesT oRead As Long, _lNumberOfBytesRead As Long)As IntegerPrivate Declare Function InternetCloseHandle Lib “wininet.dll”(_ByVal hInet As Long)As IntegerPrivate Const INTERNET_FLAG_NO_CACHE_WRITE = &H4000000 Private Declare Function URLDownloadT oFile Lib “urlmon” Alias“URLDownloadToFileA”(ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long)As LongPublic Function GetIP()As StringDim wburl$, wburl2$, X1, X2, X3, X4On Error GoTo errwburl = GetUrlFile(wburl)If InStr(1, wburl, “无法找到该页”)= 0 ThenX1 = InStr(1, wburl, “[”)X2 = InStr(1, wburl, “]”)X1 = Mid(wburl, X1, X2X3)X3 = Replace(X3, “”, “")X3 = Replace(X3, ” “, ”“)X3 = Replace(X3, vbCrLf, ”“)GetIP = X3Exit FunctionElseGetIP = ”127.0.0.1“End Iferr:GetIP = ”127.0.0.1“End FunctionPrivate Function GetUrlFile(stUrl As String)As StringDim lgInternet As Long, lgSession As LongDim stBuf As String * 1024Dim inRes As IntegerDim lgRet As LongDim stTotal As StringstTotal = vbNullStringlgSession = InternetOpen(”VBTagEdit“, 1, vbNullString, vbNullString, 0)If lgSession ThenlgInternet = InternetOpenUrl(lgSession, stUrl, vbNullString, _0, INTERNET_FLAG_NO_CACHE_WRITE, 0)If lgInternet Then DoinRes = InternetReadFile(lgInternet, stBuf, 1024, lgRet)stTotal = stTotal & Mid$(stBuf, 1, lgRet)Loop While(lgRet <> 0)End IfinRes = InternetCloseHandle(lgInternet)End IfGetUrlFile = stT otalEnd Function使用方法:调用GetIP 返回值即为公网IPPrivate Sub Command1_Click()Dim aa As StringDim strLocalIP As StringDim winIP As Objectaa = aa & ”本机电脑名称:“ & Environ(”computername“)& vbCrLfaa = aa & ”本机用户名称:“ & Environ(”username“)& vbCrLfSet winIP = CreateObject(”MSWinsock.Winsock“)strLocalIP = winIP.localipMsgBox aa & ”本机IP:" & strLocalIPEnd Sub第三篇:PHP 获取客户端真实IP地址多种方法小结PHP 获取客户端真实IP地址多种方法小结经过复杂的判断与算是的获取IP地址函数复制代码代码如下: function getIP(){if(getenv('HTTP_CLIENT_IP')){ $ip = getenv('HTTP_CLIENT_IP');}elseif(getenv('HTTP_X_FORWARDED_FOR')){ $ip = getenv('HTTP_X_FORWARDED_FOR');}elseif(getenv('HTTP_X_FORWARDED')){ $ip = getenv('HTTP_X_FORWARDED');}elseif(getenv('HTTP_FORWARDED_FOR')){ $ip = getenv('HTTP_FORWARDED_FOR');}elseif(getenv('HTTP_FORWARDED')){ $ip = getenv('HTTP_FORWARDED');} else {$ip = $_SERVER['REMOTE_ADDR'];} return $ip;} 最简单获取ip地址代码一句实例复制代码代码如下: $reIP=$_SERVER[“REMOTE_ADDR”];echo $reIP;php获取ip的算法复制代码代码如下: if(getenv('HTTP_CLIENT_IP')){ $onlineip = getenv('HTTP_CLIENT_IP');} elseif(getenv('HTTP_X_FORWARDED_FOR')){ $onlineip = getenv('HTTP_X_FORWARDED_FOR');}elseif(getenv('REMOTE_ADDR')){ $onlineip = getenv('REMOTE_ADDR');} else {$onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];}echo $onlineip;可以分出内网与外网站ip地址获取程序复制代码代码如下: function getip_out(){ $ip=false;if(!emp ty($_SERVER[“HTTP_CLIENT_IP”])){ $ip = $_SERVER[“HTTP_CLIENT_IP”];}if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ips教程= explode(“, ”, $_SERVER['HTTP_X_FORWARDED_FOR']);if($ip){ array_unshift($i ps, $ip);$ip = FALSE;} for($i = 0;$i < count($ips);$i++){ if(!eregi(“^(10│172.16│192.168).”, $ips[$i])){ $ip = $ips[$i];break;} } }return($ip ? $ip : $_SERVER['REMOTE_ADDR']);}echo getip_out();php获取ip的算法,用了?号表达式来处理复制代码代码如下: $user_IP =($_SERVER[“HTTP_VIA”])? $_SERVER[“HTTP_X_FORWARDED_FOR”] : $_SERVER[“REMOTE_ADDR”];$user_IP =($user_IP)? $user_IP : $_SERVER[“REMOTE_ADDR”];第四篇:用命令行怎样通过IP地址知道对方的计算机名和工作组名局域网中,用命令行怎样通过IP地址知道对方的计算机名和工作组名?方法:nbtstat-A ip Nbtstat命令显示基于 TCP/IP 的 NetBIOS(NetBT)协议统计资料、本地计算机和远程计算机的 NetBIOS 名称表和 NetBIOS 名称缓存。
vb怎样采集网上数据
在这个Do While循环里面还有一个For循环,用于把采集下来的某一天的数据(已经整理好,暂时放在列表框里)逐一保存到数据库里。
※两个共用功能模块:DownPage和GetData
下面简单讲讲DownPage这个子过程。本过程的功能是:利用WebBrowser控件下载指定网址的网页,只下载不分析。具体代码如下:
GetData Format(dat, "yyyy-MM-dd"), 0
For i = 0 To List1.ListCount - 2 Step 2
arr = Split(List1.List(i), ",")
brr = Split(List1.List(i + 1), ",")
一步一步教会你,怎样采集网上数据
小生有礼
见习点评
UID16043 帖子3212 精华63 积分12119 金钱12119 元 众彩币771 金 阅读权限50 在线时间10 小时
注册时间2006-12-25 最后登录2009-1-20 个人空间 发短消息 加为好友 当前离线 1# 大 中 小 发表于 2008-1-7
以上这段代码,我们写了一个Do 循环,从Text1表示的日期开始,逐日采集数据,一直到Text2表示的日期为止,采集结束。
本教程我们利用WebBrowser控件进行网页下载,由于“下载网页”这个功能相对比较通用,可供“波胆赔率下载”和“比分下载”两个功能共同使用,将来其他程序还可以借用这个功能,因此,我们把这个功能进行模块化,单独拿出来另外做成一子个过程DownPage,这样更能提高程序阅读的清晰度。另外,也把“数据提取”功能单独做成一个子过程GetData,供“波胆赔率下载”和“比分下载”两个功能共同使用。
【转载】VB6获取本机IP的API,可以获取局域网IP和互联网IP【恢复】中国电子开发网...
【转载】VB6获取本机IP的API,可以获取局域网IP和互联网IP【恢复】中国电子开发网...Option ExplicitPrivate Const WS_VERSION_REQD = &H101Private 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 = 1Private Const SOCKET_ERROR = -1Private Const WSADescription_Len = 256Private Const WSASYS_Status_Len = 128Private Type HOSTENThName As LonghAliases As LonghAddrType As IntegerhLength As IntegerhAddrList As LongEnd TypePrivate Type WSADATAwversion As IntegerwHighVersion As IntegerszDescription(0 To WSADescription_Len) As ByteszSystemStatus(0 To WSASYS_Status_Len) As ByteiMaxSockets As IntegeriMaxUdpDg As IntegerlpszVendorInfo As LongEnd TypePrivate Declare Function WSAGetLastError Lib "WSOCK32.D LL" () As LongPrivate Declare Function WSAStartup Lib "WSOCK32.DLL" (B yVal wVersionRequired&, lpWSAData As WSADATA) As Long Private Declare Function WSACleanup Lib "WSOCK32.DLL" ( ) As LongPrivate Declare Function gethostname Lib "WSOCK32.DLL" ( ByVal hostname$, ByVal HostLen As Long) As LongPrivate Declare Function gethostbyname Lib "WSOCK32.DLL " (ByVal hostname$) As LongPrivate Declare Sub RtlMoveMemory Lib "kernel32" (hpvDe st As Any, ByVal hpvSource&, ByVal cbCopy&)Private Function hibyte(ByVal wParam As Integer)hibyte = wParam \ &H100 And &HFF&End FunctionPrivate Function lobyte(ByVal wParam As Integer)lobyte = wParam And &HFF&End FunctionPrivate Sub SocketsInitialize()Dim WSAD As WSADATADim iReturn As IntegerDim sLowByte As String, sHighByte As String, sMsg As Strin giReturn = WSAStartup(WS_VERSION_REQD, WSAD)If iReturn = 0 ThenIf lobyte(WSAD.wversion) < WS_VERSION_MAJOR Or (lobyt e(WSAD.wversion) = _WS_VERSION_MAJOR And hibyte(WSAD.wversion) < WS_VE RSION_MINOR) ThensHighByte = Trim$(Str$(hibyte(WSAD.wversion)))sLowByte = Trim$(Str$(lobyte(WSAD.wversion)))sMsg = "Windows Sockets version " & sLowByte & "." & sHi ghByte'Debug.Print sMsg'sMsg = sMsg & " winsock.dll tarafindan desteklenmiyor. "'MsgBox sMsg'EndEnd IfElse'Debug.Print "Winsock.dll Error."End IfEnd SubPublic Function GetCurrentIP(ByVal blnExternalIP As Boolea n) As StringDim hostname As String * 256Dim hostent_addr As LongDim host As HOSTENTDim hostip_addr As LongDim temp_ip_address() As ByteDim i As IntegerDim ip_address As StringDim IP As StringDim Internal As StringDim EXTERNAL As StringIf gethostname(hostname, 256) <> SOCKET_ERROR Then hostname = Trim$(hostname)hostent_addr = gethostbyname(hostname)If hostent_addr <> 0 ThenRtlMoveMemory host, hostent_addr, LenB(host)RtlMoveMemory hostip_addr, host.hAddrList, 4DoReDim temp_ip_address(1 To host.hLength)RtlMoveMemory temp_ip_address(1), hostip_addr, host.hLe ngthFor i = 1 To host.hLengthip_address = ip_address & temp_ip_address(i) & "."Nextip_address = Mid$(ip_address, 1, Len(ip_address) - 1)' Return Both LAN and External IP Fix' Master Yoda 30-05-2000' ########################################## ' HERE'S THE PROBLEM'TheIP = TheIP + ip_address' ########################################## ' HERE'S THE FIXInternal = IP ' Send ONLY the External IP to the CurrentIP Fu nctionEXTERNAL = ip_address ' Send the External IP to the functio n parameter ExternalIP = ip_address ' Send LAN IP to the function para Internal' You don't really need to return parameters,' it just allows you to get both IPs :)' ##########################################ip_address = ""host.hAddrList = host.hAddrList + LenB(host.hAddrList)RtlMoveMemory hostip_addr, host.hAddrList, 4Loop While (hostip_addr <> 0)If blnExternalIP = True ThenGetCurrentIP = EXTERNALElseGetCurrentIP = InternalEnd IfElse'Debug.Print "Winsock.dll error."GetCurrentIP = ""End IfElse'Debug.Print "Windows Socket Error " & Str(WSAGetLastErr or())GetCurrentIP = ""End IfEnd FunctionPrivate Sub SocketsCleanup()Dim lReturn As LonglReturn = WSACleanup()If lReturn <> 0 Then'MsgBox "Socket Error " & Trim$(Str$(lReturn)) & " occurred In Cleanup "End IfEnd SubPrivate Sub Class_Initialize()SocketsInitializeEnd SubPrivate Sub Class_T erminate() SocketsCleanupEnd Sub。
VBA网抓教程
vba网抓常用方法:1、xmlhttp/winhttp法:用xmlhttp/winhttp模拟向服务器发送请求,接收服务器返回的数据。
优点:效率高,基本无兼容性问题。
缺点:需要借助如fiddler的工具来模拟http请求。
2、IE/webbrowser法:创建IE控件或webbrowser控件,结合htmlfile对象的方法和属性,模拟浏览器操作,获取浏览器页面的数据。
优点:这个方法可以模拟大部分的浏览器操作。
所见即所得,浏览器能看到的数据就能用代码获取。
缺点:各种弹窗相当烦人,兼容性也确实是个很伤脑筋的问题。
上传文件在IE里根本无法实现。
(有实现方法请一定告诉我)3、QueryTables法:因为它是excel自带,所以勉强也算是一种方法。
其实此法和xmlhttp类似,也是GET或POST方式发送请求,然后得到服务器的response返回到单元格内。
优点:excel自带,可以通过录制宏得到代码,处理table很方便。
代码简短,适合快速获取一些存在于源代码的table里的数据。
缺点:无法模拟referer等发包头(如果你有在QT中模拟referer的方法,请一定告诉我)Sub Main()Dim strText As StringWith CreateObject("") 'CreateObject("")'.Open "POST", "", False.setRequestHeader "Content-Type", "application/x-www-form-urlencoded".setRequestHeader "Referer", "".SendstrText = .responsetextstrTextEnd WithEnd Sub拷贝剪切板:Sub CopyToClipbox(strText As String)'文本拷贝到剪贴板With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}").SetText strText.PutInClipboardEnd WithEnd SubDongYu作业KB, 下载次数: 88)2014-10-21 17:05 上传下载次数: 88Sub HomerWork1_1()'新手:DongYu'作业:1、网站:' 操作:点击“今日在售产品”,获取今日在售产品第一页的数据。
VBA中调用API实现局域网连接的常用操作
VBA中调用API实现局域网连接的常用操作如果常用到局域网内的其它机器上的文件,而且文件夹路径固定,又不想每次都打开该路径,可用VBA连接读取文件,这里完成“创建映射”、“断开映射”、“是否已创建映射”、“取映射路径”、“生成一个本地未用的盘符符号”、“取得本地盘符数组”等6个函数,基本上可满足平时文件操作的需要了这里使用API来实现‘以下代码可直接粘到EXCEL的VBA模块里面' Const NO_ERROR = 0' Const CONNECT_UPDA TE_PROFILE = &H1' Const RESOURCETYPE_DISK = &H1' Const RESOURCETYPE_PRINT = &H2' Const RESOURCETYPE_ANY = &H0' Const RESOURCE_CONNECTED = &H1' Const RESOURCE_REMEMBERED = &H3' Const RESOURCE_GLOBALNET = &H2' Const RESOURCEDISPLAYTYPE_DOMAIN = &H1' Const RESOURCEDISPLAYTYPE_GENERIC = &H0' Const RESOURCEDISPLAYTYPE_SERVER = &H2' Const RESOURCEDISPLAYTYPE_SHARE = &H3' Const RESOURCEUSAGE_CONNECTABLE = &H1' Const RESOURCEUSAGE_CONTAINER = &H2Private Type NETRESOURCEdwScope As LongdwType As LongdwDisplayType As LongdwUsage As LonglpLocalName As StringlpRemoteName As StringlpComment As StringlpProvider As StringEnd TypePrivate Declare Function WNetAddConnection2 Lib "mpr.dll" Alias "WNetAddConnection2A" (lpNetResource As NETRESOURCE, ByV al lpPassword As String, ByV al lpUserName As String, ByV al dwFlags As Long) As LongPrivate Declare Function WNetCancelConnection2 Lib "mpr.dll" Alias "WNetCancelConnection2A" (ByV al lpName As String, ByV al dwFlags As Long, ByV al fForce As Long) As LongPrivate Declare Function WNetGetConnection Lib "mpr.dll" Alias "WNetGetConnectionA" (ByV al lpszLocalName As String, ByV al lpszRemoteName As String, cbRemoteName As Long)As LongFunction 创建映射(网络路径As String, 用户名As String, 密码As String, 本地盘符As String) As BooleanDim NetR As NETRESOURCEDim ErrInfo As LongDim pf As StringDim lj As Stringpf = 本地盘符If Right(本地盘符, 1) <> ":" Thenpf = pf & ":"End Iflj = 网络路径If Right(lj, 1) = "\" Thenlj = Left(lj, Len(lj) - 1)End IfNetR.dwScope = &H2NetR.dwType = &H1NetR.dwDisplayType = &H3NetR.dwUsage = &H1NetR.lpLocalName = pfNetR.lpRemoteName = ljErrInfo = WNetAddConnection2(NetR, 密码, 用户名, &H1)If ErrInfo = 0 Then创建映射= TrueElse创建映射= FalseEnd IfEnd FunctionFunction 断开映射(本地盘符As String) As BooleanDim ErrInfo As LongDim strLocalName As StringstrLocalName = 本地盘符If Right(strLocalName, 1) <> ":" ThenstrLocalName = strLocalName & ":"End IfErrInfo = WNetCancelConnection2(strLocalName, &H1, False) If ErrInfo = 0 Then断开映射= TrueElse断开映射= FalseEnd IfEnd FunctionFunction 是否已创建映射(盘符As String) As Boolean Dim lj As StringDim LocalName As StringDim NetName As StringDim LenNetName As LongDim jg As LongLocalName = 盘符If Right(LocalName, 1) <> ":" ThenLocalName = LocalName & ":"End IfNetName = String$(255, Chr$(32))LenNetName = Len(NetName)jg = WNetGetConnection(LocalName, NetName, LenNetName) If jg = 0 Then是否已创建映射= TrueElse是否已创建映射= FalseEnd IfEnd FunctionFunction 取映射路径(本地盘符As String) As String Dim lj As StringDim LocalName As StringDim NetName As StringDim LenNetName As LongDim jg As LongLocalName = 本地盘符If Right(LocalName, 1) <> ":" ThenLocalName = LocalName & ":"End IfNetName = String$(255, Chr$(32))LenNetName = Len(NetName)jg = WNetGetConnection(LocalName, NetName, LenNetName)If jg = 0 Then取映射路径= NetNameElse取映射路径= "未映射"End IfEnd FunctionFunction 生成盘符() As StringDim yypf() As StringDim zf(26) As StringDim pfs As IntegerDim js As IntegerDim jc As IntegerDim bz As BooleanDim pf As StringFor js = 1 To 26zf(js) = Chr(js + 64)Nextyypf = 取已用驱动器列表()pfs = UBound(yypf)For js = 1 To 26bz = FalseFor jc = 1 To pfsIf StrComp(zf(js), yypf(jc), vbTextCompare) = 0 Then bz = TrueExit ForEnd IfNextIf bz = False Thenpf = zf(js)Exit ForEnd IfNextErase zfErase yypf生成盘符= pfEnd FunctionFunction 取已用驱动器列表() As String()Dim fso As ObjectDim d As ObjectDim dc As ObjectDim s As StringDim pf() As StringDim js As IntegerSet fso = CreateObject("Scripting.FileSystemObject") Set dc = fso.Drivesjs = 0For Each d In dcs = d.DriveLetterjs = js + 1ReDim Preserve pf(js)pf(js) = sNextSet fso = NothingSet d = NothingSet dc = Nothing取已用驱动器列表= pfEnd Function。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vb用Iphlpapi.dll获取网络信息第一章前言Windows 98以上的操作系统在系统目录下都带有iphlpapi.dll这个动态链接库文件,它可以帮助程序员方便地获取计算机网络信息。
对于C程序员来说,只要有iphlpapi的头文件,调用iphlpapi.dll是很简单的事,但是对于Vb程序员则是比较困难的问题。
本文将就Vb中调用iphlpapi.dll来介绍iphlpapi的使用。
第二章IPHLPAPI 的主要函数本章将根据iphlpapi.dll提供函数的功能来分别讲解iphlpapi.dll的主要函数。
编程时,我们可以调用这些函数迅速获得本机大部分网络信息。
第一节获取本机网络适配器的信息1、函数:Private Declare Function GetAdaptersInfo Lib "iphlpapi.dll" ( IpAdapterInfo As Any, pOutBufLen As Long) As Long参数说明:pAdapterInfo:[输出] 指向一个IP_ADAPTER_INFO类型的连接表;pOutBufLen:[输入] 指定pAdapterInfo参数的大小,如果指定大小不足,GetAdaptersInfo 将此参数置为所需大小, 并返回一个ERROR_BUFFER_OVERFLOW错误代码。
返回值:成功,返回0;失败,返回错误代码。
备注:此函数不能获得回环(Loopback)适配器的信息2、使用到的类型:①IP_ADAPTER_INFO类型:包含本机网络适配器信息。
Type IP_ADAPTER_INFONext As Long ‘在适配器列表中指向下一个适配器ComboIndex As Long ‘保留未用AdapterName As String * MAX_ADAPTER_NAME_LENGTH ‘适配器名Description As String * MAX_ADAPTER_DESCRIPTION_LENGTH ‘对网卡的描述,‘实际上好象是驱动程序的名字AddressLength As Long ‘适配器物理地址的长度Address(MAX_ADAPTER_ADDRESS_LENGTH - 1) As Byte‘物理地址,每个字节存放一个十六进制的数值Index As Long ‘适配器索引号Type As Long ‘适配器类型,包含以下类型的适配器(见下表):常量名称值说明MIB_IF_TYPE_ETHERNET 6 以太网适配器MIB_IF_TYPE_TOKENRING 9 令牌环适配器MIB_IF_TYPE_FDDI 15 光纤接口适配器MIB_IF_TYPE_PPP 23 点到点协议适配器MIB_IF_TYPE_LOOPBACK 24 回环(Loopback)适配器MIB_IF_TYPE_SLIP 28 串行适配器MIB_IF_TYPE_OTHER 其他值其他类型的适配器DhcpEnabled As Long ‘适配器是否启用了动态主机配置协议(DHCP)CurrentIpAddress As Long ‘保留(当前使用的IP地址?)IpAddressList As IP_ADDR_STRING ‘绑定到此适配器的IP地址链表GatewayList As IP_ADDR_STRING ‘默认网关地址链表DhcpServer As IP_ADDR_STRING ‘DHCP服务器地址,DhcpEnabled=TRUE时有效HaveWins As Byte ‘是否启用WINS(Windows Internet Name Service)PrimaryWinsServer As IP_ADDR_STRING ‘主WINS地址SecondaryWinsServer As IP_ADDR_STRING ‘辅WINS地址LeaseObtained As Long ‘向DHCP服务器租用IP地址的时间,DhcpEnabled=TRUE时有效LeaseExpires As Long ‘向DHCP服务器租用IP地址到期时间,DhcpEnabled=TRUE时有效End Type②IP_ADDR_STRING描述IP 地址链表的节点。
Type IP_ADDR_STRINGNext As Long ‘指向列表中下一个IP_ADDR_STRING类型。
为空,则是最后一个地址IpAddress As String * 16 ‘点式十进制字串表示Ip地址IpMask As String * 16 ‘子网掩码Context As Long ‘网络IP地址标识,符合AddIPAddress和DeleteIPAddress函数中的网‘接口关联参数。
End Type3、使用到的常量:Const MAX_ADAPTER_NAME_LENGTH = 260 //适配器名字长度Const MAX_ADAPTER_ADDRESS_LENGTH = 8 //适配器物理地址长度Const MAX_ADAPTER_DESCRIPTION_LENGTH = 132 //适配器描述长度4、主要代码分析:①调用函数GetAdaptersInfo,以及在调用中应该注意的问题:对函数GetAdaptersInfo进行两次调用,第一次调用获得参数pOutBufLen的实际大小;第二次调用获取IpAdapterInfo的数据。
代码如下:pOutBufLen = 0error = GetAdaptersInfo(ByVal 0&, pOutBufLen)ReDim AdapterInfoBuffer(pOutBufLen - 1)error = GetAdaptersInfo(AdapterInfoBuffer(0), pOutBufLen)②IpAdapterInfo中可能包含多个IP_ADAPTER_INFO类型,因此下一步使用copymemory函数将数据拷贝到IP_ADAPTER_INFO类型:CopyMemory AdapterInfo, AdapterInfoBuffer(0), pOutBufLen③获得了首个IP_ADAPTER_INFO类型后,根据IP_ADAPTER_INFO类型中的Next成员并调用循环语句(Do…Loop Until)来获得所有IP_ADAPTER_INFO类型:DopAdapt = AdapterInfo.NextIf pAdapt <> 0 ThenCopyMemory AdapterInfo, ByVal pAdapt, AdapterInfoSizeEnd IfLoop Until pAdapt = 0④由每次获得的IP_ADAPTER_INFO类型来获取网络适配器物理地址:PhysicalAddress = ""For i = 0 To AdapterInfo.AddressLength - 1PhysicalAddress = PhysicalAddress & Hex(AdapterInfo.Address(i))If i < AdapterInfo.AddressLength - 1 ThenPhysicalAddress = PhysicalAddress & "-"End IfNext⑤对于属于IP_ADDR_STRING类型的IpAddressList、GatewayList、DhcpServer、PrimaryWinsServer、SecondaryWinsServer,同样要注意IP_ADDR_STRING中Next成员的使用:DoCopyMemory IP_ADDR_STRING, AdapterInfo.IpAddressList, LenB(IP_ADDR_STRING)Print "IP Address: " & IP_ADDR_STRING.IpAddressPrint "Subnet Mask: " & IP_ADDR_STRING.IpMaskpAddrStr = IP_ADDR_STRING.NextIf pAddrStr <> 0 ThenCopyMemory IP_ADDR_STRING.IpAddressList, ByVal pAddrStr, _LenB(IP_ADDR_STRING.IpAddressList)End IfLoop Until pAddrStr = 05、运行时截图:第二节获取MIB-II 接口表1、函数:Private Declare Function GetIfTable Lib "iphlpapi.dll" (ByRef pIfTable As MIB_IFTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long参数说明:pIfTable:[输入]成功的话指向一个MIB_IFTABLE类型的缓冲区。
PdwSize:[输入,输出]指定pIfTable参数所占缓冲区的大小,如果缓冲区不是足够大返回接口表,函数设置这个参数等于所必须的缓冲区大小。
bOrder:[输入]指定返回的接口表是否按接口序号按上升顺序排列。
如果参数为TRUE那么按上升顺序排列。
返回值:成功,返回0;失败,返回错误代码。
2、使用到的类型:①MIB_IFTABLE 包含接口表Private Type MIB_IFTABLEdwNumEntries As Long '当前网络接口的总数MIB_Table(9) As MIB_IFROW '指向一个包含MIB_IFROW类型的指针End Type②MIB_IFROW 保存接口信息Private Type MIB_IFROWwszName(0 To 511) As Byte '接口名称的Unicode字符串,必须为512字节dwIndex As Long '接口编号dwType As Long '接口类型,参看IP_ADAPTER_INFO类型的Type成员dwMtu As Long '最大传输单元dwSpeed As Long '接口速度(字节)dwPhysAddrLen As Long '由bPhysAddr获得的物理地址有效长度bPhysAddr(0 To 7) As Byte '物理地址dwAdminStatus As Long '接口管理状态dwOperStatus As Long '操作状态,以下值之一:常量名称值说明MIB_IF_OPER_STA TUS_NON_OPERATIONAL 0 网络适配器被禁止,例如:地址冲突MIB_IF_OPER_STA TUS_UNREACHABLE 1 没有连接MIB_IF_OPER_STA TUS_DISCONNECTED 2 局域网:电缆未连接;广域网:无载波信号MIB_IF_OPER_STA TUS_CONNECTING 3 广域网适配器连接中MIB_IF_OPER_STA TUS_CONNECTED 4 广域网适配器连接上远程对等点MIB_IF_OPER_STA TUS_OPERA TIONAL 5 局域网适配器默认状态dwLastChange As Long '操作状态最后改变的时间dwInOctets As Long '总共收到(字节)dwInUcastPkts As Long '总共收到(unicast包)dwInNUcastPkts As Long '总共收到(non-unicast包),包括广播包和多点传送包dwInDiscards As Long '收到后丢弃包总数(即使没有错误)dwInErrors As Long '收到出错包总数dwInUnknownProtos As Long '收到后因协议不明而丢弃的包总数dwOutOctets As Long '总共发送(字节)dwOutUcastPkts As Long '总共发送(unicast包)dwOutNUcastPkts As Long '总共发送(non-unicast包),包括广播包和多点传送包dwOutDiscards As Long '发送丢弃包总数(即使没有错误)dwOutErrors As Long '发送出错包总数dwOutQLen As Long '发送队列长度dwDescrLen As Long ' bDescr部分有效长度bDescr(0 To 255) As Byte '接口描述End Type3、使用到的常量:无4、主要代码分析:①分配足够大的缓存空间,然后直接调用GetIfTable获得接口信息:Dim ifT As MIB_IFTABLELenIfT = Len(ifT)RValue = GetIfTable(ifT, LenIfT, True)②由ifT.dwNumEntries获得接口数量,然后用for…next循环获取每个接口信息:For i = 0 To ifT.dwNumEntries - 1Print "接口编号:" & ifT.MIB_Table(i).dwIndexPrint "接口速度:" & ifT.MIB_Table(i).dwSpeedNext③物理地址的获得:PhysAddr = Right("00" & Hex(ifT.MIB_Table(i).bPhysAddr(0)), 2)For j = 1 To 5PhysAddr = PhysAddr & "-" & Right("00" & Hex(ifT.MIB_Table(i).bPhysAddr(j)), 2)NextPrint "物理地址:" & PhysAddr5、运行时截图:第三节获取本机TCP 信息列表1、函数:Private Declare Function GetTcpStatistics Lib "iphlpapi.dll" (ByRef pTcpStats As MIB_TCPSTATS) As Long参数说明:pStats :[输出]指向一个接收本机TCP统计表的MIB_TCPSTA TS类型返回值:成功,返回0;失败,返回错误代码。