Прежде всего решите, на каком уровне протокола вы хотите протестировать искаженные данные:
Ethernet
Если вы хотите генерировать и получать недопустимые кадры Ethernet с неправильной контрольной суммой Ethernet, вам более или менее повезло, поскольку контрольная сумма часто выполняется аппаратно, а в случаях, когда это не так, драйвер для сетевой карты выполняет контрольную сумму. и нет никакого способа обойти это, по крайней мере, в Windows. Однако NetBSD предоставляет эту опцию для большинства своих драйверов, которые выполняют контрольную сумму Ethernet в драйвере ОС.
Альтернативой является покупка специализированного оборудования (например, карты от Napatech, вы можете найти более дешевые), которое предоставляет API для отправки и получения кадров Ethernet, какими бы недействительными вы ни хотели.
Имейте в виду, что отправка путем отправки недопустимых кадров Ethernet, принимающая сторона или промежуточный маршрутизатор просто отбрасывают кадры, они никогда не достигнут ни приложения, ни уровня IP ОС. Вы будете тестировать сетевой адаптер или драйвер сетевого адаптера на принимающей стороне.
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 сегментах и каким-то образом заставить принимающее приложение читать () символы один за другим). Если вам не нужна скорость, вы обычно можете получить такое поведение, вставив паузы в отправку и отключив алгоритм Нагеля (TCP_NDELAY) и/или настроив MTU сетевой карты.
Помните, что любая лажа с протоколами более низкого уровня в потоке TCP, например. привести к тому, что один из пакетов имеет недопустимый / другой IP-адрес источника, который просто отбрасывается уровнями более низкого уровня.
Вы будете тестировать приложение, работающее поверх TCP/UDP (или любого другого IP-протокола).
Альтернативы
переключитесь на другую ОС, где вы, по крайней мере, можете использовать необработанные сокеты без ограничений последних окон.
Реализуйте решение для прозрачной вставки на основе альтернативы «Ethernet» или «IP», описанной выше. то есть у вас есть обычное клиентское приложение, обычное серверное приложение. Вы разрываете кабель между ними, вставляете свою коробку с двумя сетевыми картами, где вы программно изменяете байты полученных кадров и снова отправляете их обратно на другую сетевую карту. Это также позволит вам легко вводить задержки пакетов в системе. Сетевой фильтр Linux уже имеет эту возможность, которую вы можете легко создать поверх, часто с помощью простой настройки или сценария.
Если вы можете изменить принимающее приложение, которое хотите протестировать, заставьте его считывать данные из чего-то еще, например из файла или канала, и передавать ему случайные байты/пакеты по вашему желанию.
Гибридная модель, в основном для тестирования приложений TCP, но также полезна, например, для тестирование ответов UDP ICMP. Настройте TCP-соединение с помощью сокетов. Отправьте недопустимые данные приложения с помощью сокетов. Внедрите случайные искаженные пакеты (намного проще, чем программирование с необработанными сокетами, которые устанавливают сеанс TCP и затем вводят ошибки нижнего уровня). Отправляйте неправильно сформированные пакеты IP или UDP/TCP или, возможно, пакеты ICMP, используя WinPcap, хотя связывайтесь с кодом сокета с кодом winpcap, чтобы вы правильно указали адреса/порт, чтобы принимающее приложение увидело его.
Ознакомьтесь с NS/2.
person
Lyke
schedule
17.06.2011