2011-09-15 63 views
5

我試圖寫在C#發送原始套接字的應用程序。我沒有很多C/C++的經驗,所以更喜歡C#。我在C#中找到了幾個用於原始套接字的選項,但是沒有人允許我設置諸如ACK,SYN,PSH,FIN等標誌。如果可以在C#中完成這些任何想法?原始套接字 - C# - 設置標誌

任何提示將不勝感激。

更新: 我想寫一個工具來測試防火牆,我想發送狀態數據包,具有不同標誌的數據包。我使用的是Win 2008,據我所知,我可以對它進行原始套接字。如果需要,我將使用C/C++,到目前爲止,它看起來像。

進一步更新: SharpPcap看起來不錯,看起來V4.0沒有來源,只有3.5一樣。因爲文檔還不完整,所以我會試着去弄清楚它。有沒有人使用過它?

最後編輯: SharpPcap好看!它正在做我所需要的!我將發佈後續問題,因爲我不是.NET大師,它捕獲的很好,我不能從捕獲代理部分發送數據包。

謝謝大家!

+0

即使C套接字也不會下降到ACK,SYN,...級別。你想做什麼? – LueTm

+0

@Loki:考慮給瑞恩S指出一點,因爲你已經接受了他的答案。如果您稍後再詢問,這將鼓勵其他用戶回答您的問題。 :) –

回答

3

結賬SharpPcap

根據其描述:

SharpPcap是.NET環境的跨平臺數據包捕獲框架,基於著名的pcap/WinPcap的庫。它提供了一個API,用於捕獲,注入,分析和構建使用任何.NET語言(如C#和VB.NET)的數據包。

它在內部使用WinPcap驅動程序,因此它將允許您使用自己的IP/TCP標頭構建原始數據包。

0

如果您想要降低到該級別,可以使用SocketType.RawProtocolType.IP創建Socket。但是,我相信您將不得不手動創建代表ACK,SYN等的數據包。因此,您需要閱讀一些RFC文檔。 :)

我找不到任何關於您的具體需要在網絡上的資源,但它很可能是值得閱讀如何C# network sniffer實現。至少它會給你一些關於如何操作那個級別的原始套接字的想法。

編輯:由於空軍終於人指出,這是不可能在Windows桌面版本。但是,這應該在服務器版本中起作用。下面是從Microsoft官方聲明:

侷限在原始套接字

在Windows 7中,Windows Vista中,Windows XP的Service Pack 2(SP2)和 的Windows XP的Service Pack 3(SP3)發送流量超過 原始套接字的能力已經在幾個方面受到限制:

  • TCP數據無法通過原始套接字進行發送。
  • 具有無效源地址的UDP數據報不能通過 原始套接字發送。任何傳出UDP數據報的IP源地址必須存在於網絡接口上,否則數據報將被丟棄。作出此更改 是爲了限制惡意代碼創建分佈式拒絕服務攻擊的能力,並限制發送欺騙性 數據包(帶有僞造源IP地址的TCP/IP數據包)的能力。
  • 不允許使用IPPROTO_TCP 協議的原始套接字調用綁定函數。

與原始套接字綁定功能被允許用於其它 協議(IPPROTO_IP,IPPROTO_UDP,或IPPROTO_SCTP,例如)。

上述這些限制並不適用於Windows Server 2008 R2, 的Windows Server 2008,Windows Server 2003中,或將 操作系統早於Windows XP SP2的版本。

1

簡短的回答,在桌面版本的Windows上,你不能。從Wikipedia

當微軟發佈Windows XP於2001年在Winsock的接口來實現的原始套接字支持,媒體批評微軟聲稱原始套接字只能使用黑客執行TCP重置攻擊。 Windows XP發行三年後,Microsoft默默地將Winsock的原始套接字支持限制在一個不可移動的修補程序中,並且對於使用它們的應用程序沒有提供進一步的支持或解決方法。