Проверка контрольной суммы в UDP с использованием сокета UDP - PullRequest
0 голосов
/ 25 октября 2019

Возможно ли для сокета UDP (SOCK_DGRAM) получить доступ к полю контрольной суммы из входящего пакета UDP и проверить наличие ошибок? Я знаю, что мы можем сделать это с помощью необработанных сокетов (SOCK_RAW), но я хочу знать, можем ли мы сделать это с помощью сокетов дейтаграмм. Если так, как мы можем сделать это в C?

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Если вы создаете обычный сокет UDP, у вас нет доступа к заголовку UDP и, следовательно, к контрольной сумме. Но ядро ​​уже отбрасывает пакеты, в которых контрольная сумма неверна, поэтому вы все равно не увидите эти пакеты.

0 голосов
/ 25 октября 2019

Вы не можете сделать это с помощью сокетов дейтаграмм (SOCK_DGRAM), потому что стек TCP / IP удаляет эти байты заголовка UDP из полученного буфера перед передачей его в API более высокого уровня. Вам нужно использовать необработанные сокеты (SOCK_RAW), чтобы эти байты были сохранены.

...