2015-10-15 13 views
0

其實我有三個問題:C#我將如何攔截所有數據包並通過掛接找出IP?

1根據Nazar Grynko答案,難道只有攔截三大功能(發送,recv的,並連接)將幫助我預期在我的機器上的所有數據包?

2-如果我鉤了三個函數,如何獲得一個IntPtr指向一個P /調用本機函數的sockaddr結構?

3-發送,和recv沒有sockaddr,所以如何找出地址?

預先感謝您。

+0

監控機器上的所有流量比連接用戶模式代碼中的三個功能要困難。這將需要在內核模式下完成。這意味着一個司機。不是C#的東西。 –

+0

@DavidHeffernan,他們用於C#的Easyhook和deviare怎麼樣?另一件事,轉移到捕獲像SharpPcap這樣的數據包工具更好。或堅持鉤住。 – user3312744

+0

我以爲你說你想檢測機器上的所有數據包。您不會從在用戶環境中運行的桌面應用程序那樣做。 –

回答

0
  1. 你所描述的功能是POSIX標準的一部分。這意味着當你在Windows上使用這些函數時,你實際上調用了一個包裝器,最終轉換爲system call。您可以在不使用此功能的情況下發送數據包(例如,通過使用Windows API)。

  2. 查看答案1。這不會幫助你。你還必須爲所有進程提供一個鉤子。

  3. 您描述的功能使用file descriptor這是一個POSIX結構,並在其他系統上進行用戶模式模擬。

要檢查您的流量,您必須使用驅動程序,將爲您做到這一點。你可能想看看Pcap.Net這是一個針對你的問題的C#項目,並提供必要的驅動程序和API。

+0

我知道pcap和其他驅動程序,如sharppcap,...等,但我的目標是要知道接收或發送對我來說很困難的捕獲包的過程。我嘗試從頭文件(tcp&udp)中檢索端口#並執行netstate,但仍然不是所有的數據包都可以關聯到進程,只有tcp&udp。 – user3312744