Как отправить сырой пакет Ethernet с C #? [закрыто
-
09-10-2019 - |
Вопрос
Есть ли способ отправить RAW Packet Ethernet на другой хост через C #? В Windows 7, если это имеет значение.
Решение
На основании предложений Saint_pl:
Я нашел, вероятно, лучшее решение - похоже на SharpPcap. Это Pcap.net. - .NET Wrapper для WinPCAP. Теперь я могу изменить мои пакеты, все, что я хочу.
У меня есть некоторые ресурсы для вас, которые, возможно, полезны. Я не пытаюсь это решения в Windows 7, но, возможно, она содержит хорошую информацию для начала.
Сырцовые манипуляции пакета Ethernet или Зеркало на CodeProject
Эта цель этой статьи состоит в том, чтобы объяснить, как отправить необработанный пакет Ethernet, используя C # на платформе Microsoft. Сырой пакет Ethernet - это полный слой 2 сетевой кадр, который отправляется на физическую проволоку. Отправка кадра, как такова, позволяет вам манипулировать мишечными и исходными MAC-адресами и полями протокола слоя 3.
Также какая-то информация о необработанных розетках (на всякий случай тоже интересно):
Клиент (и сервер) сокеты связи Посмотрите всю главу, но здесь ключевые части:
- C # Пример программы сокета UDP RAW UDP
- C # Пример программы Ping Ping C # Часть А. | Часть Б.
- Все примеры
Не отправляя пакеты, но, может быть, интересно: Сеть Sniffer в 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);