打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
vb.net 枚举电脑上的TCP,UDP连接

最新vb.net 枚举电脑上的TCP,UDP连接

以下是三零网为大家整理的最新vb.net 枚举电脑上的TCP,UDP连接的文章,希望大家能够喜欢!

 本来不想用API来实现的,因为VB.net里面封装了很多东西,微软也不提倡我们调用API。但我直接用VB.net提供的类和方法,我不知道怎么获取系统当前的TCP连接信息,比如对应的端口,对应的IP,对应的进程等等。C语言和易语言都是调用API实现的。下面用VB.NET2008来实现(代码有点笨,请别见外)。


API申明部分:

Declare Auto Function htons Lib "ws2_32.dll" Alias "htons" (ByVal PORT As Integer) As Integer
Declare Auto Function GetProcessHeap Lib "Kernel32.dll" Alias "GetProcessHeap" () As Integer
Declare Auto Function AllocateAndGetTcpExTableFromStack Lib "Iphlpapi.dll" Alias "AllocateAndGetTcpExTableFromStack" (ByRef TcpTable As IntPtr, ByVal bOrder As Integer, ByVal Heap As Integer, ByVal Flags As Integer, ByVal Flags2 As Integer) As Integer
Declare Auto Function AllocateAndGetTcpExTableFromStack_ Lib "Iphlpapi.dll" Alias "AllocateAndGetTcpExTableFromStack" (ByRef TcpTable As Byte(), ByVal bOrder As Integer, ByVal Heap As Integer, ByVal Flags As Integer, ByVal Flags2 As Integer) As Integer
Declare Auto Function AllocateAndGetUdpExTableFromStack Lib "Iphlpapi.dll" Alias "AllocateAndGetUdpExTableFromStack" (ByRef TcpTable As IntPtr, ByVal bOrder As Integer, ByVal Heap As Integer, ByVal Flags As Integer, ByVal Flags2 As Integer) As Integer
Declare Auto Function AllocateAndGetUdpExTableFromStack_ Lib "Iphlpapi.dll" Alias "AllocateAndGetUdpExTableFromStack" (ByRef TcpTable As Byte(), ByVal bOrder As Integer, ByVal Heap As Integer, ByVal Flags As Integer, ByVal Flags2 As Integer) As Intege


数据结构部分:

Public Structure MIB_TCPEXROW
Public dwState As Int32
Public dwLocalAddr As Int32
Public dwLocalPort As Int32
Public dwRemoteAddr As Int32
Public dwRemotePort As Int32
Public dwProcessPID As Int32
End Structure
Public Structure MIB_UDPEXROW
Public dwLocalAddr As Int32
Public dwLocalPort As Int32
Public dwProcessPID As Int32
End Structure


代码部分 :

Private Function getIP_(ByVal IP As Integer) As String
Dim ret() As Byte = BitConverter.GetBytes(IP)
getIP_ = CStr(ret(0)) + "." + CStr(ret(1)) + "." + CStr(ret(2)) + "." + CStr(ret(3))
End Function
Private Function getState_(ByVal state As Integer) As String
Select Case (state)
Case 1
getState_ = "Closed"
Case 2
getState_ = "Listening"
Case 3
getState_ = "SYN_Sent"
Case 4
getState_ = "SYN_Rcvd"
Case 5
getState_ = "ESTAB"
Case 6
getState_ = "FIN_Wait1"
Case 7
getState_ = "FIN_Wait2"
Case 8
getState_ = "Close_Wait"
Case 9
getState_ = "Closing"
Case 10
getState_ = "Last_Ack"
Case 11
getState_ = "Time_Wait"
Case 12
getState_ = "Delete_TCB"
Case Else
getState_ = "未知"
End Select
End Function
Private Function MainFunction()
Dim temp_() As Byte '当做第一层指针,是为了获取连接数量
Dim temp As IntPtr = IntPtr.Zero 'temp第二层指针
Dim size_ As Integer '储存连接数量
Dim size2 As Integer = System.Runtime.InteropServices.Marshal.SizeOf(GetType(MIB_TCPEXROW)) '获取结构的大小
AllocateAndGetTcpExTableFromStack_(temp_, 1, GetProcessHeap(), 2, 2)
AllocateAndGetTcpExTableFromStack(temp, 1, GetProcessHeap(), 2, 2)
size_ = temp_(0) '字节数据的第一个元素的值储存的是TCP连接的数量,求UDP时雷同
Dim i As Integer
Dim tcp As MIB_TCPEXROW
For i = 0 To size_ - 1 Step 1
tcp = New MIB_TCPEXROW
With tcp
.dwLocalAddr = 0
.dwLocalPort = 0
.dwProcessPID = 0
.dwRemoteAddr = 0
.dwRemotePort = 0
.dwState = 0
End With
tcp = CType(System.Runtime.InteropServices.Marshal.PtrToStructure(New IntPtr(temp.ToInt32 + 4 + i * size2), GetType(MIB_TCPEXROW)), MIB_TCPEXROW)
MessageBox.Show("进程ID" + CStr(tcp.dwProcessPID))
MessageBox.Show("本地IP" + getIP_(tcp.dwLocalAddr))
MessageBox.Show("本地端口" + CStr(htons(tcp.dwLocalPort)))
MessageBox.Show("外网IP" + getIP_(tcp.dwRemoteAddr))
MessageBox.Show("外网端口" + CStr(htons(tcp.dwRemotePort)))
MessageBox.Show("连接状态" + getState_(tcp.dwState))
Next
'************************************UDP
temp = IntPtr.Zero
size2 = System.Runtime.InteropServices.Marshal.SizeOf(GetType(MIB_UDPEXROW))
AllocateAndGetUdpExTableFromStack_(temp_, 1, GetProcessHeap(), 2, 2)
AllocateAndGetUdpExTableFromStack(temp, 1, GetProcessHeap(), 2, 2)
size_ = temp_(0)
Dim udp As MIB_UDPEXROW
For i = 0 To size_ - 1 Step 1
udp = New MIB_UDPEXROW
With udp
.dwLocalAddr = 0
.dwLocalPort = 0
.dwProcessPID = 0
End With
udp = CType(System.Runtime.InteropServices.Marshal.PtrToStructure(New IntPtr(temp.ToInt32 + 4 + i * size2), GetType(MIB_UDPEXROW)), MIB_UDPEXROW)
MessageBox.Show("进程ID" + CStr(udp.dwProcessPID))
MessageBox.Show("本地IP" + getIP_(udp.dwLocalAddr))
MessageBox.Show("本地端口" + CStr(htons(udp.dwLocalPort)))
Next
End Function
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
详解VB.net文件传输.(可传输任意文件)
利用VBA实现幻灯片播放的倒计时功能
经典的vb编程题[整理版]
VB.NET语法规则三大要素
Visual Basic .NET的Override事件处理程序
西门子以太网通信N种协议,你都搞懂了吗?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服