Прежде всего решите, на каком уровне протокола вы хотите протестировать искаженные данные:
Ethernet
Если вы хотите сгенерировать и получить недопустимые кадры Ethernet с неправильной контрольной суммой Ethernet, вам более или менее не повезло, поскольку контрольное суммирование часто выполняется аппаратно, а в случаях, когда это не так, драйвер для сетевой платы выполняет контрольную сумму, и, по крайней мере, в Windows это никак не обойти. NetBSD предоставляет такую возможность для большинства драйверов, которые выполняют контрольную сумму Ethernet в драйвере ОС.
В качестве альтернативы можно купить специализированное оборудование (например, карты от Napatech, но вы можете найти более дешевые), которое предоставляет API для отправки и получения кадров Ethernet, какими бы недействительными вы не хотели.
Имейте в виду, что отправка путем отправки недопустимых фреймов Ethernet, принимающая сторона или промежуточный маршрутизатор просто отбрасывают фреймы, они никогда не достигнут ни приложения, ни уровня IP ОС. Вы будете тестировать драйвер NIC или NIC на принимающей стороне.
IP
Если все, что вам нужно, это отправлять / получать недопустимые IP-пакеты, winpcap позволяет вам это сделать. Генерируйте пакеты, настройте winpcap для захвата пакетов, используйте winpcap для отправки ..
Помните, что пакеты с недопустимой контрольной суммой IP и другими недопустимыми полями, стек TCP / IP, на котором работает принимающее приложение, просто отбрасывают IP-пакеты, как это делает любой маршрутизатор IP / уровня 3 между отправителем и получателем. Они не дойдут до приложения. Если вы генерируете действительные IP-пакеты, вам также необходимо сгенерировать действительный UDP и самостоятельно выполнить сеанс TCP с действительными TCP-пакетами, чтобы приложение могло их обработать, в противном случае они также будут выброшены TCP / IP. стек
Вы будете тестировать нижнюю часть стека TCP / IP на принимающей стороне.
TCP / UDP
Это ничем не отличается от отправки / получения недопустимых IP-пакетов. Вы можете делать все это с помощью winpcap, хотя маршрутизаторы не будут их выбрасывать, если заголовки ethernet / IP в порядке. Приложение не получит эти пакеты, хотя они будут отброшены стеком TCP / IP.
Вы будете тестировать верхнюю часть стека TCP / IP на принимающей стороне.
Прикладной уровень
Это (вменяемый) способ реального тестирования приложения (если только ваше «приложение» не является стеком TCP / IP или ниже). Вы отправляете / получаете данные как любое приложение, использующее сокеты, но генерируете искаженные данные приложения, как хотите. Приложение получит эти данные, они не будут выброшены нижними уровнями протокола.
Хотя может быть сложно протестировать одну конкретную форму тестов с TCP, а именно изменение отправляемых сегментов TCP, если вы, например, хотите проверить, правильно ли приложение интерпретирует данные TCP как поток. (например, вы хотите отправить строку «привет» в 5 сегментах и каким-то образом заставить принимающее приложение читать () символы один за другим). Если вам не нужна скорость, вы обычно можете получить такое поведение, вставив паузы в алгоритм отправки и отключив алгоритм nagel (TCP_NDELAY) и / или настроив MTU NIC.
Помните, что любое хакерство с протоколами более низкого уровня в потоке TCP, например, причиной того, что один из пакетов имеет неверный / другой IP-адрес источника, просто отбрасывается нижними уровнями.
Вы будете тестировать приложение, работающее поверх TCP / UDP (или любого другого протокола IP).
Альтернатива
переключиться на другую ОС, где вы по крайней мере можете использовать необработанные сокеты без ограничений последних окон.
Внедрите прозрачную капельную вставку на основе альтернативы «Ethernet» или «IP» выше.то есть у вас есть ваше обычное клиентское приложение, ваше обычное серверное приложение.Вы разрываете кабель между ними, вставляете коробку с двумя сетевыми картами, где вы программно изменяете байты полученных кадров, и снова отправляете их обратно на другой сетевой адаптер.Это позволит вам легко вводить задержки пакетов в системе.В netfilter Linux уже есть эта возможность, которую вы можете легко создать поверх нее, часто просто с помощью конфигурации или сценариев.
Если вы можете изменить принимающее приложение, которое хотите протестировать, попросите его прочитатьданные из чего-то другого, например, из файла или канала, и подайте их случайными байтами / пакетами по вашему желанию.
Гибридная модель, в основном для тестирования приложений TCP, но также полезна, например, для тестирования UDP ICMPответы.Установите TCP-соединение, используя сокеты.Отправьте неверные данные приложения, используя сокеты.Вводить случайные искаженные пакеты (намного проще, чем программирование с необработанными сокетами, которые устанавливают сеанс TCP, а , а затем вводят ошибки нижнего уровня).Отправляйте искаженные пакеты IP или UDP / TCP, или, возможно, пакеты ICMP с помощью WinPcap, хотя обменивайтесь данными с кодом сокета и кодом winpcap, чтобы вы указали правильные адреса / порт, так чтобы принимающее приложение их увидело.
Выезд NS / 2