我有一個小程序,用於嗅探通過以太網接口傳入的原始數據包。我的代碼看起來像:原始套接字似乎在某些情況下獲得所有數據包,但不是其他數據包
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,接收後,再加上一些斷點,它看起來像我可以改變我的「不工作」的定義爲:我只得到正在發送的數據包。我沒有收到任何收到的數據包。