Как отправить raw ethernet-пакет с C#?
есть ли способ отправить raw-пакет Ethernet на другой хост через C#? В Windows 7, Если это имеет значение.
3 ответов
на основе предложения Saint_pl:
Я нашел, вероятно, лучшее решение-подобное SharpPcap. ЭтоPcap.Net - .NET-оболочка для WinPcap. Теперь я могу изменять свои пакеты, что захочу.
У меня есть некоторые ресурсы для вас, которые могут быть полезны. Я не пробую эти решения в Windows 7, но, возможно, он содержит хорошую информацию для начала.
Raw Ethernet Пакет Манипуляции или зеркало CodeProject
эта цель этой статьи-объяснить, как отправить необработанный пакет Ethernet с помощью C# на платформе Microsoft. Пакет raw Ethernet-это полный сетевой фрейм уровня 2, который отправляется на физический провод. Отправка такого фрейма позволяет управлять целевыми и исходными MAC-адресами и полями протокола уровня 3.
также некоторая информация о необработанных сокетах (на всякий случай вам тоже интересно):
клиент (и сервер) сокеты связи взгляните на всю главу, но здесь ключевые части:
- пример программы сокета UDP C# Raw
- Пример Программы Ping Сокета C# Raw часть | часть B
- примеры
Не отправка пакетов, но, возможно, интересно:сетевой сниффер в C#, SharpPcap-структура захвата пакетов для .NET
IPHELPER API имеет некоторые низкоуровневые вещи - но, вероятно, не так низко, как вы хотите получить
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);