2011-08-22 68 views
4

我的代碼工作從Any good .net packet sniffers around?.NET數據包嗅探:試圖創建插座會導致訪問錯誤

在項目和一個獨立的,我嘗試使用下面的行創建一個套接字:

mainSocket = new Socket(AddressFamily.InterNetwork, 
         SocketType.Raw, ProtocolType.IP); 

在那行,我立即得到一個異常

System.Net.Sockets.SocketException: An attempt was made to access a socket 
in a way forbidden by its access permissions 

我不認爲這是帳戶權限問題。我可以在這個帳戶下運行Fiddler就好了。

這是打開傳出數據包偵聽器的正確方法嗎?如果是這樣,我需要做些什麼來避免權限錯誤?

更新:.NET 4.0的Windows 7家庭高級版

+1

如果我在Linqpad中運行代碼,則會得到相同的錯誤。但是,如果我將Linqpad作爲「以管理員身份運行」啓動,則可以毫無問題地執行代碼。不確定Fiddler是怎麼做的,但它似乎是一些許可相關的問題。 –

+0

如果使用SocketType.Stream而不是Raw,它會工作嗎? – EricLaw

+0

@Eric,是的。 –

回答

3

不能創建沒有管理權限的原始套接字。

原始套接字提供了操縱底層傳輸的能力,因此它們可用於構成安全威脅的惡意目的。因此,只有Administrators組的成員可以在Windows 2000及更高版本上創建SOCK_RAW類型的套接字。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548(v=vs.85).aspx

我不知道小提琴手是什麼,但它可能會使用UAC自動獲得管理PRIVS。另外,如果你正在尋找一個體面的.net數據包嗅探器,你可能想看看SharpPcap,它包裝了已經很棒的libpcap。

+0

[Fiddler](http://fiddler2.com/fiddler2 /)是一個Web調試代理。測試Web服務非常方便,除此之外。 – TrueWill