Подтвердить что ты не робот

Как отправить пакет raw ethernet с С#?

Есть ли способ отправить необработанный пакет Ethernet на другой хост через С#? В Windows 7, если это имеет значение.

4b9b3361

Ответ 1

По предложению Saint_pl:

Я нашел, вероятно, лучшее решение - похоже на SharpPcap. Это Pcap.Net - оболочка .NET для WinPcap. Теперь я могу изменить мои пакеты, что я хочу.


У меня есть некоторые ресурсы для вас, которые могут быть полезны. Я не пробую эти решения в Windows 7, но, возможно, в нем содержится хорошая информация для начала.

Манипуляция необработанным Ethernet-пакетом или зеркало в CodeProject

Цель этой статьи - объяснить, как отправлять необработанный пакет Ethernet с использованием С# на платформе Microsoft. Необработанный пакет Ethernet представляет собой полный сетевой кадр уровня 2, который отправляется на физический провод. Отправка кадра, подобного этому, позволяет манипулировать целевыми и исходными MAC-адресами и полями протокола уровня 3.

Также немного информации о сырых сокетах (на случай, если вам тоже интересно):

Связь с клиентскими (и серверными) сокетами рассматривает целую главу, но здесь ключевые части:

Не отправка пакетов, но, возможно, интересно: сетевой сниффер в С#, SharpPcap - инфраструктура захвата пакетов для .NET

Ответ 2

iphelper API имеет некоторые вещи низкого уровня - но, вероятно, не так низко, как вы хотите получить

Ответ 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 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);