Я изменяю свой файл hosts, чтобы изменить IP-адрес (например, вызова базы данных) на локальный прокси, который я пишу.
10.1.2.3 localhost
10.1.2.4 localhost
Я хочу, чтобы прокси, прослушивающий сокет, определил, к какой машине должен быть направлен запрос открытия сокета. например, в моем клиенте я звоню.
dbPort = 4000;
openDatabaseConnection("10.1.2.3", dbPort);
...
openDatabaseConnection("10.1.2.4", dbPort);
Так что оба звонка на одном сокете. Я хочу, чтобы мой прокси-сервер прослушивал 4000
и перенаправить идущий к 10.1.2.3 на правильный сервер предполагаемый IP-адрес.
Есть ли вызов POSIX, чтобы получить это из заголовка сокета?
Мой вопрос: Что такое вызов POSIX для определения предполагаемого IP-адреса запроса на открытие перенаправленного сокета?
Нет, нет способа узнать, какой IP-адрес использовался в клиентской программе. Файл hosts определяет набор псевдонимов, а псевдонимы заменяются реальным адресом (в вашем случае localhost
) преобразователем имени / адреса, что приводит к потере всей информации об используемом псевдониме. Переадресация не производится, подстановка псевдонимов выполняется еще до того, как клиент подключится.
Самый простой способ решить вашу проблему — не использовать псевдоним IP-адреса через hosts
файл, но использовать разные номера портов.
Вы могли бы также добавить «виртуальные» интерфейсы для разных адресов и иметь прокси-сервер для прослушивания соединений на обоих этих интерфейсах.
Других решений пока нет …