2011-02-28 41 views
3

我正在編寫一個數據包嗅探器,作爲在C#中學習.NET 4套接字開發的練習。我的目標是嗅探進出我電腦的IP數據包。不知道爲什麼我在C#嗅探器中設置套接字選項時出現錯誤代碼10022(無效參數)

我的問題是我在調用SetSocketOption時收到錯誤代碼10022,無效參數。我沒有看到我有一個無效的論點。我的電腦上有一些管理員權限,但也許我沒有足夠的權限。這是我的工作電腦和IT部門非常嚴格。這就是說,如果這是一個權限問題,我會期待一個不同的例外。

我不知道我的下一步應該調試這個問題。任何人有想法?

下面的代碼如下:

public Sniffer() 
{ 
    try 
    { 
     socket = new Socket(
      AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP); 

     IPAddress[] ipAddresses = Dns.GetHostEntry(
      Dns.GetHostName()).AddressList; 

     socket.Bind(new IPEndPoint(ipAddresses[0], 0)); 

     socket.SetSocketOption(
      SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true); 

     byte[] inputData = new byte[4] { 1, 0, 0, 0 }; 
     byte[] outValue = new byte[4]; 

     socket.IOControl(IOControlCode.ReceiveAll, inputData, outValue); 
    } 
    catch (SocketException ex) 
    { 
     string ErrorMessage = ex.Message; 
    } 
} 
+0

我沒有看到IP作爲本文檔中的參數之一(?)http://msdn.microsoft.com/en-us/library/600stss7.aspx – Shoban 2011-02-28 18:27:12

+0

您是否正在運行win7或vista?如果是這種情況,您可能只需要提升權限。 – 2011-02-28 18:27:44

+0

Win7。任何想法如何找到我需要達到什麼水平? – Don 2011-02-28 18:30:41

回答

0

由於在2000年初的微軟濫用病毒已經限制在所有操作系統的比XP更新的Windows操作系統的非服務器版本使用原始套接字的SP2。

您可以從MSDN上的TCP/IP Raw Sockets頁面瞭解更多有關限制的信息。

-2

WSAEINVAL 10022

參數無效。

提供了一些無效參數(例如,指定setsockopt函數的無效等級)。在某些情況下,它還引用了套接字的當前狀態 - 例如,在未偵聽的套接字上調用accept。

看看這個錯誤在這裏: http://msdn.microsoft.com/en-us/library/ms740668(v=vs.85).aspx

+0

我正在使用System.Net.Sockets。您指向的鏈接是關於Windows Socket 2,我認爲它是針對c/C++邏輯的。對不起,我是微軟套接字世界的新手,所以我的評論可能太天真了。 – Don 2011-02-28 18:41:30

+0

@Martin JAsper:看看這裏:別人已經解決了這個問題:http://sharedcache.codeplex.com/workitem/5002 – JAiro 2011-02-28 18:49:32

+0

@JAiro:我試了一下。套接字在綁定之後立即可用。所以這似乎不是問題。 – Don 2011-02-28 19:15:04

相關問題