有沒有辦法通過C#發送原始數據包以太網到其他主機?在Windows 7中,如果它有所作爲。如何用C#發送原始以太網數據包?
回答
低:
我發現可能是更好的解決方案 - 類似SharpPcap。它是Pcap.Net - WinPcap的.NET包裝。現在我可以隨意修改我的數據包。
我有一些資源,你也許有幫助。我不嘗試在Windows 7中的解決方案,但也許它包含一些很好的信息開始。
Raw Ethernet Packet Manipulation或mirror on CodeProject
本文的這個目的是介紹如何使用C#在微軟平臺上發送原始以太網數據包。原始以太網數據包是發送到物理線路的完整第2層網絡幀。像這樣發送一個幀允許您操作目標和源MAC地址以及第3層協議字段。
而且對原始套接字的一些信息(以防萬一你有趣太):
Client (and Server) Sockets Communication取整章,但這裏的關鍵部位一看:
- C# Raw UDP Socket Program Example
- C#原始套接字Ping程序示例part A | part B
- All examples
不發送數據包,但也許有趣:A Network Sniffer in C#,SharpPcap - A Packet Capture Framework for .NET
我認爲原始以太網數據包從CodeProject發送將幫助我。順便說一句,我想這是唯一的方式,我發現通過C#發送以太網數據包,例如更改的MAC地址。 – Saint 2010-10-19 10:21:09
原始的以太網操作是非常低的水平。爲了以良好的水平完成您的任務,您當然需要一些關於網絡驅動程序接口規範和理解設備驅動程序(及其API)的知識。不要跳過它。單靠C#在這個任務中並沒有給你足夠的權力。 – 2010-10-19 15:06:54
我發現可能更好的解決方案 - 類似於SharpPcap。它是http://pcapdotnet.codeplex.com/ - WinPcap的.NET包裝。現在我可以隨意修改我的數據包。 Thanx :) – Saint 2010-10-23 14:54:42
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);
這是一個TCP數據包,而不是以太網數據包......你是2層太高的堆棧;) – 2010-10-18 23:04:53
啊我明白了。理解失敗。 – bufferz 2010-10-19 01:32:17
此外,這不適用於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
iphelper API有一些低層次的東西 - 但可能並不像你想Saint_pl基礎上建議,獲取
- 1. 使用pcapdotnet發送原始以太網數據包
- 2. 從內核模塊發送一個原始以太網數據包
- 3. 在類型字段中發送帶有數據字段長度的原始以太網數據包
- 4. SBApplication:如何發送原始數據
- 5. 如何發送原始數據到API
- 6. 如何在Ruby中將以太網數據包發送到網絡中?
- 7. 如何使用以太網預告片發送數據報?
- 8. PHP如何發送原始HTTP數據包
- 9. 如何將wireshark數據包重新發送到原始文件?
- 10. 用原始數據發送Angular2表格
- 11. 如何使用python發送原始發佈數據?
- 12. 在Winsock中實現原始以太網
- 13. 原始以太網的Java庫
- 14. 是否可以從Android向Arduino以太網盾發送UDP/TCP數據包?
- 15. 使用Go語言發送帶有以太網報頭的Raw數據包
- 16. 如何使用Java將原始數據發送到打印機
- 17. 在Windows上發送原始以太網II幀時,我必須提供FCS嗎?
- 18. 發送XML原始數據總是空
- 19. 在python請求發送原始數據
- 20. C#將原始字節數組發送到網站
- 21. 在Linux中使用C++過濾以太網數據包Ubuntu
- 22. 如何使用libpcap解析以太網數據包?
- 23. 如何從ANSI C中的以太網卡獲取網絡數據包?
- 24. Python - 在以太網數據包中發送/接收一個numpy陣列
- 25. 在內核模塊中創建一個以太網數據包併發送它
- 26. 如何使用C#發佈原始數據HttpWebRequest
- 27. 如何使用C#發送dhcp發現數據包?
- 28. 如何將原始數據包注入到我的網絡中
- 29. 如何讀取發送到端口的原始數據(python)
- 30. 如何將Android設備的原始數據發送到主機?
你有什麼期望在另一端發生的呢?原始呢?制定你自己的協議?我們都用什麼錯,你的硬件知道如何路由,你的局域網管理員知道如何支持? – 2010-10-19 00:38:28
我只是想發送以太網數據包與一些更改字段像MAC地址 – Saint 2010-10-19 09:57:47
SharpPcap和Pcap.net是要走的路。您需要一個WinPcap包裝器框架,因爲出於安全原因,Windows不允許訪問較低級別的協議標頭。 WinPcap提供了自己的網絡驅動程序,允許您繞過該限制。 – 2010-11-10 08:44:16