Как надежно генерировать ошибки кадра Ethernet в программном обеспечении?
-
27-10-2019 - |
Вопрос
Вопрос:
Я тестирую часть программного обеспечения для поиска неисправностей кабеля и хочу надежно и воспроизводимо генерировать неисправности кабеля на кабеле категории 5.
На данный момент я использую не скрученный кабель метровой длины и вручную проворачиваю кабель рядом с источником питания, но я не могу обнаружить никаких сбоев в приложении (я считываю счетчики сбоев Ethernet с Ethernet ASIC .) Я не могу сказать, связано ли это с тем, что ошибок не возникает, или потому, что обнаружение программного / аппаратного обеспечения неисправно.
Есть ли способ сделать это в программном обеспечении?
Я бы согласился написать что-то на языке более высокого уровня, например Java или python, и в крайнем случае был бы готов собрать это вместе на C, но я бы действительно не стал переписывать драйвер Ethernet просто чтобы исправить возможную ошибку.
[РЕДАКТИРОВАТЬ]: я хочу создать повреждения кабеля, а не обнаруживать их.
[РЕДАКТИРОВАТЬ]: Я без проблем передавал большие файлы через FTP и SCP с поддельным кабелем и не вижу ошибок при проверке трафика с помощью wirehark
[EDIT]: См. также аналогичный вопрос в python .
Решение:
Итак, потратив больше дня на борьбу с C, это решение на Python.
Сначала отключите автоматическое вычисление контрольной суммы карты Ethernet:
родовое словоЗатем отправьте свой хитрый фрейм из python:
родовое словоКто сказал, что это должно быть сложно ...
PS: Я люблю Python.
Решение
Если вы работаете на C, вы можете отправить необработанный фрейм Ethernet с помощью socket(AF_PACKET, SOCK_RAW, ...)
и передать ему указатель на необработанный буфер, который вы создали сами (например, следуя макету фрейма в wikipedia ).
Прошло много времени с тех пор, как я это делал, поэтому я не собираюсь писать типичный фрагмент кода ...