在vb中使用Iphlpapi.dll获取网络信息 第二章 第四节 获取当前TCP连接情况
2010-05-18 09:58
666 查看
※==================================================================
※本连载文章说明:
※1、连载首发于《软件报》(http://www.sweek.com)2006年21期(2006年5月22日);
※2、此次网上连载采用的是原稿件结构,内容与《软件报》发表略有不同;
※3、谢绝除《软件报》及其相关刊物之外的传统媒体部分或全部转载;
※4、谢绝任何收费媒体、网络转载;
※5、原作者:uruseibest ,blog:http://blog.csdn.net/uruseibest;
※6、如有其它疑问,请联系作者;
※7、如有转载,必须连同本说明一并发表,否则将追究转载者责任。
※======================================================================
第四节 获取当前TCP连接情况
1、函数:
Private Declare Function GetTcpTable Lib "iphlpapi.dll" (ByRef pTcpTable As MIB_TCPTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long
参数说明:
pTcpTable:[输入]指向包含了MIB_TCPTABLE类型的TCP 连接表。
pdwSize:[输入,输出]指向pTcpTable参数的缓冲区大小,如果分配的缓冲不够,那么就等于最小需要缓冲。
bOrder:[输入]指定连接表是否按照类型排列。TRUE,那么就按以下类型顺序排列:Local IP address,Local port,Remote IP address,Remote port。
返回值:成功,返回0;失败,返回错误代码。
2、使用到的类型:
①MIB_TCPTABLE 类型包含Tcp连接表。
Type MIB_TCPTABLE
dwNum_Of_Entries As Long ‘当前包含MIB_TCPROW类型的总数
TCP_Table() As MIB_TCPROW ‘指向包含MIB_TCPROW类型的指针
End Type
备注:实际使用中可以定义:TCP_Table(120) As MIB_TCPROW ' 预留足够缓存
②MIB_TCPROW 类型包含了TCP连接信息。
Type MIB_TCPROW
dwState As Long ' TCP连接状态,为以下值之一:
常量名称
值
说明
MIB_TCP_STATE_CLOSED
1
关闭
MIB_TCP_STATE_LISTEN
2
正在监听
MIB_TCP_STATE_SYN_SENT
3
同步发送
MIB_TCP_STATE_SYN_RCVD
4
同步接收
MIB_TCP_STATE_ESTAB
5
已建立
MIB_TCP_STATE_FIN_WAIT1
6
FINWAIT 1
MIB_TCP_STATE_FIN_WAIT2
7
FINWAIT 2
MIB_TCP_STATE_CLOSE_WAIT
8
关闭等待
MIB_TCP_STATE_CLOSING
9
正在关闭
MIB_TCP_STATE_LAST_ACK
10
最后一次确认
MIB_TCP_STATE_TIME_WAIT
11
时间等待
MIB_TCP_STATE_DELETE_TCB
12
删除连接
dwLocalAddr As Long '本地IP
dwLocalPort As Long '本地端口
dwRemoteAddr As Long '远程机器IP
dwRemotePort As Long '远程机器端口
End Type
3、使用到的常量:
无
4、主要代码分析:
①定义一个MIB_TCPTABLE类型的变量,因为我们在定义MIB_TCPTABLE类型的时候预留了足够的缓存( TCP_Table(120) As MIB_TCPROW ),因此获得定义变量的大小后直接调用GetTcpTable,但是要注意的是,实际获得的TCP连接的总数应为dwNum_Of_Entries的值,一般小于我们的定义(120):
Dim mtcp As MIB_TCPTABLE
mtcplen = Len(mtcp)
rvalue = GetTcpTable(mtcp, mtcplen, True)
②使用For…Next循环遍历各个Tcp连接的信息:
For i = 0 To mtcp.dwNum_Of_Entries - 1
Print mtcp.TCP_Table(i).dwLocalAddr & "->" & mtcp.TCP_Table(i).dwRemoteAddr
Next
③因为MIB_TCPROW 类型中dwLocalAddr、dwRemoteAddr均为一长整型数,因此要通过转换来获得IP地址:
Dim Ip_Buf(1 To 4) As Byte
CopyMemory Ip_Buf(1), dwLocalAddr, 4
GetIp = CStr(Ip_Buf(1)) + "." + CStr(Ip_Buf(2)) + "." + CStr(Ip_Buf(3)) + "." + CStr(Ip_Buf(4))
④因为MIB_TCPROW 类型中dwLocalPort、dwRemotePort均为一长整型数,因此要通过转换来获得端口:
GetPort = dwLocalPort/ 256 + (dwLocalPort Mod 256) * 256
5、运行时截图:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/UruseiBest/archive/2006/12/20/1450364.aspx
※本连载文章说明:
※1、连载首发于《软件报》(http://www.sweek.com)2006年21期(2006年5月22日);
※2、此次网上连载采用的是原稿件结构,内容与《软件报》发表略有不同;
※3、谢绝除《软件报》及其相关刊物之外的传统媒体部分或全部转载;
※4、谢绝任何收费媒体、网络转载;
※5、原作者:uruseibest ,blog:http://blog.csdn.net/uruseibest;
※6、如有其它疑问,请联系作者;
※7、如有转载,必须连同本说明一并发表,否则将追究转载者责任。
※======================================================================
第四节 获取当前TCP连接情况
1、函数:
Private Declare Function GetTcpTable Lib "iphlpapi.dll" (ByRef pTcpTable As MIB_TCPTABLE, ByRef pdwSize As Long, ByVal bOrder As Long) As Long
参数说明:
pTcpTable:[输入]指向包含了MIB_TCPTABLE类型的TCP 连接表。
pdwSize:[输入,输出]指向pTcpTable参数的缓冲区大小,如果分配的缓冲不够,那么就等于最小需要缓冲。
bOrder:[输入]指定连接表是否按照类型排列。TRUE,那么就按以下类型顺序排列:Local IP address,Local port,Remote IP address,Remote port。
返回值:成功,返回0;失败,返回错误代码。
2、使用到的类型:
①MIB_TCPTABLE 类型包含Tcp连接表。
Type MIB_TCPTABLE
dwNum_Of_Entries As Long ‘当前包含MIB_TCPROW类型的总数
TCP_Table() As MIB_TCPROW ‘指向包含MIB_TCPROW类型的指针
End Type
备注:实际使用中可以定义:TCP_Table(120) As MIB_TCPROW ' 预留足够缓存
②MIB_TCPROW 类型包含了TCP连接信息。
Type MIB_TCPROW
dwState As Long ' TCP连接状态,为以下值之一:
常量名称
值
说明
MIB_TCP_STATE_CLOSED
1
关闭
MIB_TCP_STATE_LISTEN
2
正在监听
MIB_TCP_STATE_SYN_SENT
3
同步发送
MIB_TCP_STATE_SYN_RCVD
4
同步接收
MIB_TCP_STATE_ESTAB
5
已建立
MIB_TCP_STATE_FIN_WAIT1
6
FINWAIT 1
MIB_TCP_STATE_FIN_WAIT2
7
FINWAIT 2
MIB_TCP_STATE_CLOSE_WAIT
8
关闭等待
MIB_TCP_STATE_CLOSING
9
正在关闭
MIB_TCP_STATE_LAST_ACK
10
最后一次确认
MIB_TCP_STATE_TIME_WAIT
11
时间等待
MIB_TCP_STATE_DELETE_TCB
12
删除连接
dwLocalAddr As Long '本地IP
dwLocalPort As Long '本地端口
dwRemoteAddr As Long '远程机器IP
dwRemotePort As Long '远程机器端口
End Type
3、使用到的常量:
无
4、主要代码分析:
①定义一个MIB_TCPTABLE类型的变量,因为我们在定义MIB_TCPTABLE类型的时候预留了足够的缓存( TCP_Table(120) As MIB_TCPROW ),因此获得定义变量的大小后直接调用GetTcpTable,但是要注意的是,实际获得的TCP连接的总数应为dwNum_Of_Entries的值,一般小于我们的定义(120):
Dim mtcp As MIB_TCPTABLE
mtcplen = Len(mtcp)
rvalue = GetTcpTable(mtcp, mtcplen, True)
②使用For…Next循环遍历各个Tcp连接的信息:
For i = 0 To mtcp.dwNum_Of_Entries - 1
Print mtcp.TCP_Table(i).dwLocalAddr & "->" & mtcp.TCP_Table(i).dwRemoteAddr
Next
③因为MIB_TCPROW 类型中dwLocalAddr、dwRemoteAddr均为一长整型数,因此要通过转换来获得IP地址:
Dim Ip_Buf(1 To 4) As Byte
CopyMemory Ip_Buf(1), dwLocalAddr, 4
GetIp = CStr(Ip_Buf(1)) + "." + CStr(Ip_Buf(2)) + "." + CStr(Ip_Buf(3)) + "." + CStr(Ip_Buf(4))
④因为MIB_TCPROW 类型中dwLocalPort、dwRemotePort均为一长整型数,因此要通过转换来获得端口:
GetPort = dwLocalPort/ 256 + (dwLocalPort Mod 256) * 256
5、运行时截图:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/UruseiBest/archive/2006/12/20/1450364.aspx
相关文章推荐
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第四节 获取当前TCP连接情况
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第六节 获取当前UDP连接情况
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第六节 获取当前UDP连接情况
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十七节 设置TCP连接状态
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十七节 设置TCP连接状态
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第三节 获取本机TCP 信息列表
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第三节 获取本机TCP 信息列表
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十一节 获取当前计算机的IP信息
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十一节 获取当前计算机的IP信息
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十四节 返回本机网络接口数量
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十二节 获得本机系统网络接口适配器的列表
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十五节 设置本机默认的生存时间(time-to-live:TTL)值
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第七节 获取本机网间控制报文协议(ICMP)信息
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十五节 设置本机默认的生存时间(time-to-live:TTL)值
- 在vb中使用Iphlpapi.dll获取网络信息 第四章 第四节 实例二:探测到某个IP地址经过的路由列表
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第一节 获取本机网络适配器的信息
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十六节 获取本机IP 路由表
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第二节 获取MIB-II 接口表
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第八节 获取本机网络参数
- 在vb中使用Iphlpapi.dll获取网络信息 第二章 第十六节 获取本机IP 路由表