|
要在C#中列出指定程序的网络连接,您需要使用.NET Framework的System.Net.NetworkInformation类。这个类提供了获取网络信息的方法。但是,值得注意的是,由于.NET Framework的限制,你不能直接通过它获取特定应用程序的网络连接信息。你需要获取所有的网络连接,然后通过进程ID来确定特定应用程序的网络连接。
以下是一个简单的示例,它列出了系统中所有活动的TCP连接:
- using System;
- using System.Net.NetworkInformation;
- class Program
- {
- static void Main()
- {
- IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
- TcpConnectionInformation[] connections = properties.GetActiveTcpConnections();
- foreach (TcpConnectionInformation c in connections)
- {
- Console.WriteLine("Local endpoint: {0} \t Remote endpoint: {1} \t State: {2}", c.LocalEndPoint, c.RemoteEndPoint, c.State);
- }
- }
- }
复制代码
这个代码会打印出每一个活跃的TCP连接的本地和远程端口,以及连接的状态。
然而,要获取特定进程的网络连接,你需要更深入的操作系统API。在Windows上,你可能需要调用一些Win32 API,例如GetExtendedTcpTable,这个API可以返回包含进程ID的TCP连接信息。
但这需要用到PInvoke,这是.NET中调用非托管代码(例如C++写的Win32 API)的技术。以下是一个简单的例子:
- [DllImport("iphlpapi.dll", SetLastError = true)]
- public static extern uint GetExtendedTcpTable(IntPtr pTcpTable, ref int dwOutBufLen, bool sort, int ipVersion, TCP_TABLE_CLASS tblClass, uint reserved = 0);
- public enum TCP_TABLE_CLASS
- {
- TCP_TABLE_BASIC_LISTENER,
- TCP_TABLE_BASIC_CONNECTIONS,
- TCP_TABLE_BASIC_ALL,
- TCP_TABLE_OWNER_PID_LISTENER,
- TCP_TABLE_OWNER_PID_CONNECTIONS,
- TCP_TABLE_OWNER_PID_ALL
- }
复制代码
然后你可以调用GetExtendedTcpTable,并使用TCP_TABLE_OWNER_PID_ALL参数,这样返回的表格就会包含进程ID。然后你就可以遍历这个表格,找出对应指定进程的连接。
注意,使用PInvoke和Win32 API需要一定的.NET和Windows开发知识,且上述代码仅用于示例,可能需要根据实际需求进行修改和完善。 |
|