2017-06-02 49 views
0

我有一個小程序,用於嗅探通過以太網接口傳入的原始數據包。我的代碼看起來像:原始套接字似乎在某些情況下獲得所有數據包,但不是其他數據包

 Socket ReceiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); 
     EndPoint DefaultIPEndpoint = new IPEndPoint(IPAddress.Parse("10.0.2.0"), 0); // 10.0.2.0 is static ip on ethernet interface 

     ReceiveSocket.ReceiveTimeout = 5000; 
     ReceiveSocket.Bind(DefaultIPEndpoint); 
     ReceiveSocket.IOControl(IOControlCode.ReceiveAll, new byte[4] { 1, 0, 0, 0 }, null); 

     while (true) 
     { 
      byte[] ReceiveBuffer = new byte[512]; 
      int ByteCount = 0; 

      ByteCount = ReceiveSocket.ReceiveFrom(ReceiveBuffer, ref DefaultIPEndpoint); 
      // Handle Packets... 
     } 

我發現,這隻適用於某些實現。通過工作,我的意思是它實際上接收了接口上的所有數據包。我可以使用wireshark查看即將發生的事情,所以我知道應該接收多少流量,以及何時「不工作」,它只接收少量數據包,而且它們只是廣播(10.0.255.255),看起來像是http通知像this

現在,它「工作」時,我建立在調試,但不是當我建立在發佈。另外,我在它自己的獨立控制檯應用程序中,以及在後臺線程中工作的另一個應用程序中。在控制檯應用程序中它可以工作,但在線程應用程序中它不起作用。

有什麼想法?爲什麼我可能沒有得到剩餘的數據包?

編輯:再次看到它,並通過wireshark,接收後,再加上一些斷點,它看起來像我可以改變我的「不工作」的定義爲:我只得到正在發送的數據包。我沒有收到任何收到的數據包。

回答

0

打算回答我自己的問題。事實證明,無論一次我在另一臺具有不同網卡的計算機上嘗試它,它都可以正常工作。導致我相信它是我筆記本電腦的以太網接口驅動程序中的一個錯誤或類似的東西。

相關問題