Я хочу создать приложение, которое работает как "человек посередине" для анализа протокола (ISO 8583), отправленного по TCP/IP.
Некоторый контекст: основная идея состоит в том, чтобы получить необработанные двоичные данные и преобразовать их в строку для разбора и декодирования протокола.
В проекте две части:
Я трачу слишком много времени на первую часть. Итак, если есть макет, который я могу использовать для начала, это будет хорошо. Не обязательно с Indy, но я предпочитаю C++Builder.
Это мой первый опыт работы с Indy, и хотя у меня есть опыт работы с TCP/IP, я всегда использовал его как то, что уже есть, а не на низкоуровневой реализации.
Я тестирую с Hercules, и пока вижу связи.
Когда я подключаюсь к серверу в Hercules, я вижу, что мое приложение подключается. Но когда мое приложение отключается, я не вижу сообщения об этом, что означает (я думаю), что мое приложение отключается неправильно (но я могу повторно подключаться столько раз, сколько захочу).
Я отправляю данные в свое приложение с помощью Hercules (строка «Hello»). Очевидно, он работает, но мне трудно получить фактические данные.
Документация иногда приводит меня к неработающим ссылкам, примеров нет или они доступны в Delphi.
Я работаю со следующим:
Windows 11 Домашняя
Embarcadero® C++Builder 10.4 Версия 27.0.40680.4203
Delphi и C++ Builder 10.4, обновление 2
Инди 10.6.2.0
Взгляните на компонент Indy TIdMappedPortTCP
. Это TCP-сервер, который действует как прокси-сервер MITM между клиентами и указанным сервером, предоставляя вам события, когда одна из сторон отправляет необработанные данные.
Используйте коллекцию Bindings
или свойство DefaultPort
, чтобы указать локальные IP-адреса/порты, которые вы хотите, чтобы сервер прослушивал для клиентов.
Используйте свойства MappedHost
и MappedPort
, чтобы указать удаленный сервер, к которому вы хотите TIdMappedPortTCP
подключиться.
Событие OnBeforeConnect
запускается, когда клиент подключается к TIdMappePortTCP
.
Событие OnConnect
запускается непосредственно перед тем, как TIdMappedPortTCP
попытается подключиться к удаленному серверу.
Событие OnOutboundClientConnect
запускается, когда TIdMappedPortTCP
подключается к удаленному серверу.
Событие OnExecute
запускается, когда клиент отправляет байты на TIdMappedPortTCP
, и до того, как байты отправляются на удаленный сервер. Событие может изменить байты, если это необходимо.
Событие OnOutboundData
запускается, когда удаленный сервер отправляет байты на TIdMappedPortTCP
и до того, как байты отправляются клиенту. Событие может изменить байты, если это необходимо.
Спасибо, сэр, это выглядит многообещающе. Я попробую.