我開發了一個使用TcpClient/TcpListener監聽本地計算機上其他應用程序的請求的c#應用程序。現在我需要確定哪些進程實際上正在建立與偵聽器的連接。從TcpClient/TcpListener查找源程序
有一些例子使用GetExtendedTcpTable來查看哪些進程正在使用哪些端口。但似乎這將是一個非常昂貴的操作在每個連接到我的監聽器上運行。系統必須知道誰在進行連接,對嗎?我無法找到通過任何對象暴露的信息。任何願意伸出援手的winsock大師?
我開發了一個使用TcpClient/TcpListener監聽本地計算機上其他應用程序的請求的c#應用程序。現在我需要確定哪些進程實際上正在建立與偵聽器的連接。從TcpClient/TcpListener查找源程序
有一些例子使用GetExtendedTcpTable來查看哪些進程正在使用哪些端口。但似乎這將是一個非常昂貴的操作在每個連接到我的監聽器上運行。系統必須知道誰在進行連接,對嗎?我無法找到通過任何對象暴露的信息。任何願意伸出援手的winsock大師?
就我所知,沒有託管API,唯一的選擇是pInvoke Windows API。
Windows API可通過「IPHlpApi.dll」和「IpHelperAPI.dll」獲得,但您需要獲取該端口的特定部分未被記錄。
[DllImport("iphlpapi.dll",SetLastError=true)]
public static extern int GetTcpTable(byte[] pTcpTable,
out int pdwSize, bool bOrder);
託管包裝的源代碼可以找到here。
不幸的是,有這麼多的請求一次發生,這種方法不會讓我隔離我的TcpListener正在談論的特定進程。我從PInvoke得到的表太沒有連接,只是給我一個最近的進程來打我的監聽端點。 –
最糟糕的情況是,您始終可以使用執行'netstat -no'並解析結果。 –
也見過那個。但是,似乎它會爲每個TCP連接增加大量的開銷。畢竟,由於連接改變,我無法緩存它。 –
想想吧,Fiddler允許你按照過程進行過濾,所以必須有一種方法可以以一種有效的方式獲取數據,因爲Fiddler不會導致流量放緩...... –