2010-10-18 286 views
25

有沒有辦法通過C#發送原始數據包以太網到其他主機?在Windows 7中,如果它有所作爲。如何用C#發送原始以太網數據包?

+2

你有什麼期望在另一端發生的呢?原始呢?制定你自己的協議?我們都用什麼錯,你的硬件知道如何路由,你的局域網管理員知道如何支持? – 2010-10-19 00:38:28

+0

我只是想發送以太網數據包與一些更改字段像MAC地址 – Saint 2010-10-19 09:57:47

+1

SharpPcap和Pcap.net是要走的路。您需要一個WinPcap包裝器框架,因爲出於安全原因,Windows不允許訪問較低級別的協議標頭。 WinPcap提供了自己的網絡驅動程序,允許您繞過該限制。 – 2010-11-10 08:44:16

回答

17

低:

我發現可能是更好的解決方案 - 類似SharpPcap。它是Pcap.Net - WinPcap的.NET包裝。現在我可以隨意修改我的數據包。


我有一些資源,你也許有幫助。我不嘗試在Windows 7中的解決方案,但也許它包含一些很好的信息開始。

Raw Ethernet Packet Manipulationmirror on CodeProject

本文的這個目的是介紹如何使用C#在微軟平臺上發送原始以太網數據包。原始以太網數據包是發送到物理線路的完整第2層網絡幀。像這樣發送一個幀允許您操作目標和源MAC地址以及第3層協議字段。

而且對原始套接字的一些信息(以防萬一你有趣太):

Client (and Server) Sockets Communication取整章,但這裏的關鍵部位一看:

不發送數據包,但也許有趣:A Network Sniffer in C#SharpPcap - A Packet Capture Framework for .NET

+0

我認爲原始以太網數據包從CodeProject發送將幫助我。順便說一句,我想這是唯一的方式,我發現通過C#發送以太網數據包,例如更改的MAC地址。 – Saint 2010-10-19 10:21:09

+0

原始的以太網操作是非常低的水平。爲了以良好的水平完成您的任務,您當然需要一些關於網絡驅動程序接口規範和理解設備驅動程序(及其API)的知識。不要跳過它。單靠C#在這個任務中並沒有給你足夠的權力。 – 2010-10-19 15:06:54

+2

我發現可能更好的解決方案 - 類似於SharpPcap。它是http://pcapdotnet.codeplex.com/ - WinPcap的.NET包裝。現在我可以隨意修改我的數據包。 Thanx :) – Saint 2010-10-23 14:54:42

-3
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("10.25.184.11"), 4456); 

server.Connect(ip); 

byte[] sendData = new byte[] { 0, 8, 32, 64 }; 
server.Send(sendData); 

//done. now let's listen for data 

byte[] receiveData = new byte[1024]; 
int receivedDataLength = server.Receive(receiveData); 

//if the response is a string message 
string stringData = Encoding.ASCII.GetString(receiveData, 0, receivedDataLength); 
Console.WriteLine(stringData); 
+11

這是一個TCP數據包,而不是以太網數據包......你是2層太高的堆棧;) – 2010-10-18 23:04:53

+3

啊我明白了。理解失敗。 – bufferz 2010-10-19 01:32:17

+0

此外,這不適用於Windows 7. [只有服務器版本的Windows允許使用原始TCP套接字](http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548%28v=vs。 85%29.aspx#LIMITATIONS_ON_RAW_SOCKETS)由於惡意軟件濫用在過去。 – 2013-07-12 23:39:51

0

iphelper API有一些低層次的東西 - 但可能並不像你想Saint_pl基礎上建議,獲取

相關問題