LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網站管理員

C#獲取電腦上所有打開端口的詳細連接信息

admin
2025年2月12日 9:50 本文熱度 1285

在C#中獲取電腦上所有打開端口的詳細連接信息通常涉及到網絡編程和系統(tǒng)級別的操作。這可以通過多種方式實現(xiàn),但最常見的方法之一是使用System.Net命名空間中的類,并結合系統(tǒng)級別的API調用。下面是一些步驟和示例代碼,幫助你獲取電腦上所有打開端口的詳細連接信息。


方法1:使用System.Net.NetworkInformation

System.Net.NetworkInformation命名空間提供了訪問網絡接口信息和網絡統(tǒng)計信息的功能。你可以使用IPGlobalProperties.GetIPGlobalProperties()來獲取當前計算機的IP全局屬性,然后使用GetActiveTcpListeners()和GetActiveTcpConnections()方法來查看TCP連接。

示例代碼:

using System;

using System.Net;

using System.Net.Sockets;

using System.Collections.Generic;

 

class Program

{

    static void Main()

    {

        // 獲取當前計算機的IP全局屬性

        IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();

 

        // 獲取當前計算機的TCP監(jiān)聽端口

        var tcpListeners = ipGlobalProperties.GetActiveTcpListeners();

        Console.WriteLine("Active TCP Listeners:");

        foreach (var listener in tcpListeners)

        {

            Console.WriteLine($"Port: {listener.Port}");

        }

 

        // 獲取當前計算機的TCP連接(需要管理員權限)

        var tcpConnections = ipGlobalProperties.GetActiveTcpConnections();

        Console.WriteLine("\nActive TCP Connections:");

        foreach (var connection in tcpConnections)

        {

            Console.WriteLine($"LocalEndPoint: {connection.LocalEndPoint}, RemoteEndPoint: {connection.RemoteEndPoint}, State: {connection.State}");

        }

    }

}



方法2:使用P/Invoke調用Windows API

如果你需要更詳細的控制或者需要訪問更多底層信息,你可以使用P/Invoke調用Windows API,如netstat命令的底層API。例如,使用netstat -ano的底層API可以讓你獲取到每個連接的PID等信息。

示例代碼(使用P/Invoke調用netstat):

using System;

using System.Diagnostics;

using System.Runtime.InteropServices;

using System.Text;

 

class Program

{

    [DllImport("iphlpapi.dll", ExactSpelling = true)]

    private static extern int SendARP(uint ip, uint mac, byte[] pa, ref uint size);

    [DllImport("iphlpapi.dll", SetLastError = true)]

    private static extern uint GetIpAddrTable(IntPtr pIPAddrTable, ref uint pSize, bool bOrder);

    [DllImport("iphlpapi.dll", SetLastError = true)]

    private static extern int GetExtendedTcpTable(IntPtr pTcpTable, ref uint dwOutBufLen, bool sort, int ipVersion, TcpTableType tableClass, uint reserved);

    private enum TcpTableType : uint { OwnerPidOnly = 5 }; // 只獲取PID信息

    private const int ERROR_INSUFFICIENT_BUFFER = 122; // 緩沖區(qū)不足錯誤代碼

    private const int IP_ADAPTER_INFO_SIZE = 8 * 1024; // 適配器信息緩沖區(qū)大小估計值

    private const int MAX_ADAPTER_DESCRIPTION_LENGTH = 128; // 適配器描述最大長度

    private const int MAX_ADAPTER_NAME_LENGTH = 256; // 適配器名稱最大長度

    private const int MAX_ADAPTER_ADDRESS_LENGTH = 8; // 適配器地址最大長度(以字節(jié)為單位)

    private const int GAA_FLAG_INCLUDE_PREFIX = 16; // 標志位:包含前綴長度信息

    private const int MIB_TCP_STATE_LISTENING = 2; // TCP狀態(tài):監(jiān)聽狀態(tài)

    private const int MIB_TCP_STATE_ESTABLISHED = 4; // TCP狀態(tài):已建立連接狀態(tài)

    private const int MIB_TCP_STATE_CLOSE_WAIT = 8; // TCP狀態(tài):關閉等待狀態(tài)等...

    // 其他必要的結構和常量定義...

}

注意:直接使用P/Invoke調用底層API相對復雜且容易出錯,特別是涉及到權限和網絡編程的細節(jié)問題。通常建議先嘗試使用System.Net.NetworkInformation類,如果需要更詳細的信息再考慮使用P/Invoke。此外,獲取某些信息可能需要管理員權限。對于大多數應用場景,直接使用System.Net.NetworkInformation應該已經足夠。


相關文檔:

C#獲取電腦上所有打開端口的詳細連接信息[1]
  http://29190.oa22.cn

【C#】如何判斷當前是否開啟了遠程桌面連接[4927]
  http://16624.oa22.cn

C#如何判斷Windows Server遠程桌面有異常登錄,并獲知當前登錄用戶名?[3550]
  http://16722.oa22.cn


該文章在 2025/2/12 10:11:15 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
性生潮久久久不久久久久 | 亚洲欧美卡通动漫一区二区 | 亚洲精品字幕在线观看 | 亚洲一区二区三区乱码AⅤ 在线播放国产日韩 | 日本乱人片一区二区三区 | 一区二区免费国产在线观看 |