У меня есть источник, который отправляет пакеты udp с неверными заголовками контрольной суммы, и я не могу контролировать источник. На wireshark я вижу, что эти пакеты отправляются на хост назначения, но приложение не получает их из-за неверной контрольной суммы udp. Я хотел бы, чтобы приложение на хосте (windows server 2012) получало эти пакеты и повторно отправляло их с правильной контрольной суммой, чтобы приложение собирало пакеты.

Я пытался использовать объект .NET Socket с SocketType RAW и ProtocolType IP, но он также игнорирует пакеты.

1 ответ1

0

Ваш подход к использованию RAW-сокетов на самом деле не слишком далек от того, что вам нужно.

Скорее всего, ваша система имеет контрольную сумму UDP, выгруженную на сетевую карту, что означает, что NIC выполняет проверку контрольной суммы еще до того, как ОС увидит пакет. Это здорово по соображениям производительности, но означает, что в вашем случае у вас буквально нет возможности добраться до этих пакетов.

К сожалению, выяснить, включено ли это, немного по-разному в каждой ОС. В Linux вы можете использовать ethtool для проверки формы командной строки (я не знаю метода GUI). В Windows он скрыт во вкладке «Дополнительно» свойств драйвера для сетевой карты (хотя вы можете даже не видеть и не контролировать его там, это зависит от драйвера).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .