谷歌搜索似乎没有找到关于这些 API 的太多信息,但我能够在 allapi.mentalis.org 上找到这篇文章,该文章讨论GetTcpTable
了 IP Helper API ( iphlpapi.dll
) 中的函数以及 VB6 的一些示例代码。该GetOwnerModuleFromTcpEntry
函数也是同一个API的一部分,所以它的实现应该是比较相似的,虽然我找不到任何例子。
命名空间似乎提供了当前使用的System.Net.NetworkInformation
所有 IP 端点,但我似乎找不到任何东西可以让您使用该命名空间中的这些端点获取有关实际进程的任何信息。您可能会尝试的是System.Diagnostics
名称空间。在那里,您可以访问Process
具有您想要获取的大部分信息的对象,包括 PID 和名称(尽管您可能必须解决某些进程名称的权限问题)。我使用以下内容进行了快速测试,并将其与netstat -a -n -b -o
我通过管道传输到文本文件的结果进行了比较,这似乎是一个不错的匹配。在任何人说什么之前,这是糟糕的代码,我只是把它放在一起进行测试,所以请不要起火;)。
Dim CurrentProcesses As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcesses
For Each Proc As System.Diagnostics.Process In CurrentProcesses
Try
Debug.WriteLine("[" & Proc.Id.ToString & "] " & Proc.MainModule.ToString)
Catch ex As Exception
'An "Access Denied" exception may be thrown on the Proc.MainModule.ToString, but
'you can still get the PID for the process.
Debug.WriteLine("[" & Proc.Id.ToString & "] Cannot get module name")
End Try
Next Proc
我能想到的最后一个选择是从代码中实际调用命令行(使用Shell
or Process.Start
)并运行netstat
并将其通过管道传输到文本文件,或者将其读入内存。从那里,您可以解析结果。这方面的一个例子是(取自Experts-Exchange 上的一个问题):
Dim process As New Process()
Dim output As String = String.Empty
process.StartInfo.WorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.System)
process.StartInfo.FileName = "netstat"
process.StartInfo.Arguments = "-a -n -b -o"
process.StartInfo.CreateNoWindow = True
process.StartInfo.ErrorDialog = False
process.StartInfo.RedirectStandardOutput = True
process.StartInfo.UseShellExecute = False
process.Start()
process.WaitForExit(5000)
output = process.StandardOutput.ReadToEnd()
MessageBox.Show(output)
显然,此方法需要更多代码来解析output
字符串,但它会为您提供从netstat
命令接收到的确切信息。