Отключить проверку контрольной суммы UDP при получении

696
Micah Hunsberger

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

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

0

1 ответ на вопрос

0
Austin Hemmelgarn

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

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

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

Я пошел в расширенные параметры конфигурации для адаптера и отключил разгрузку контрольной суммы udp, а также разгрузку контрольной суммы IP. Я не получаю никаких других результатов. Я все еще вижу пакеты в wireshark, но не могу заставить PowerShell или другое приложение их забрать. Micah Hunsberger 6 лет назад 0