Эмулировать входящие сетевые сообщения для Indy - PullRequest
0 голосов
/ 29 апреля 2009

Можно ли эмулировать входящие сообщения с помощью Indy (если это имеет какое-либо значение: я использую Indy 10 и Delphi 2009)? Я хочу иметь возможность создавать эти сообщения локально, и я хочу, чтобы Indy верил, что они приходят от определенных клиентов в сети. Вся внутренняя обработка Indy (выбор потока, в котором получено сообщение и тому подобное) должна быть точно такой же, как если бы сообщение прибыло по сети.

Есть идеи по этому поводу? Заранее спасибо за любые советы.

Ответы [ 4 ]

5 голосов
/ 29 апреля 2009

То, что вы хотите сделать, не имеет никакого отношения к Indy, так как вам придется делать это на гораздо более низком уровне. Самый простой способ заставить Indy поверить в то, что сообщения приходят от конкретного клиента, - это вставить правильно подготовленные пакеты в сетевой стек. Читайте о TCP Packet Injection в Google или Википедии. EtterCap - это один из таких инструментов, который позволяет внедрять пакеты в установленные соединения. Тем не менее, это определенно относится к серым областям, так как некоторые инструменты являются незаконными в некоторых странах.

Во всяком случае, все это ИМХО слишком сложно. Я не знаю, что именно вы хотите сделать, но специально подготовленный клиент или сервер - гораздо лучший инструмент для имитации определенного поведения при разработке серверных или клиентских приложений. Вы можете запускать их локально или, если вам нужны разные IP-адреса или подсети, вы можете многое сделать с виртуальными машинами.

0 голосов
/ 07 июля 2009

Indy имеет механизм абстрактного стека для поддержки кроссплатформенности (IDStack.pas). Я думаю, вы можете взломать стек для окон (IdStackWindows.pas) Это класс. Вы можете даже подумать о том, чтобы получить его и переопределить некоторые функции для взлома.

0 голосов
/ 29 апреля 2009

Одна вещь, которую вы можете сделать, - это создать виртуальные машины для запуска ваших тестовых клиентов, чтобы они не рассматривались как «локальные машины», и довольно просто создать сложную сеть с VMS - при условии, что у вас достаточно память и дисковое пространство. Другое преимущество тестирования на виртуальных машинах заключается в том, что вы можете полностью исключить среду разработки, когда пришло время сосредоточиться на развертывании. Удивительно, сколько времени это экономит в одиночку.

VirtualPC - бесплатная загрузка от Microsoft и работает довольно хорошо. VMWare имеет другую опцию, но стоит немного больше, чтобы начать. В целях разработки я предпочитаю настольные версии, но серверные версии также хорошо работают. Вам все равно понадобится лицензия для установки виртуальной ОС. MSDN членство, пожалуй, самый дешевый способ, позволяющий создавать тестовые среды для других версий ОС.

0 голосов
/ 29 апреля 2009

Indy не имеет никаких встроенных механизмов для этого, но, подумав, я бы порекомендовал создать небольшое тестовое приложение (или набор), которое будет запускаться локально на вашей машине разработки и подключаться к вашему приложению сервера Indy. для воспроизведения сообщений.

Это не должно относиться к вашим приложениям на сервере Indy, если TCP-соединение устанавливается либо локально, либо с удаленного хоста, поскольку механизмы, с помощью которых создается поток сервера, и обрабатываемая команда идентичны обоим сценариям.

Мое последнее выступление было связано с использованием Indy, и все наши тесты проводились с помощью аналогичного приложения типа Resender, которое загружало локальные файлы сообщений и отправляло их в приложение сервера Indy.

HTH и удачи!

...