ОП пишет:
Я хочу включить собственный IP-адрес в заголовки httprequest, чтобы конечное приложение знало, что этот запрос [из моего приложения] пришел с пользовательского IP-адреса, но не с IP-адреса, на котором запущено мое приложение
...
Допустим, я открыл google.co.in, теперь сервер Google знает, что этот запрос пришел с моего IP-адреса. теперь, если я использую HttpClient в apache, как мне настроить этот IP-адрес, чтобы при чтении сервера Google он обрабатывал этот запрос, исходно полученный с этого IP-адреса
Вы не можете.
(На самом деле это 4-я интерпретация, которую я написал в своем исходном ответе ниже.)
IP-адрес отправителя не отправляется в виде заголовка HTTP. Он отправляется в поле заголовка IP-протокола. Сервер получает IP-адрес отправителя снизу на уровне сокета, а не из информации HTTP.
И нет, вы не сможете подделать свой IP (это называется «спуфинг»), даже если захотите. Java не имеет встроенной поддержки необработанных сокетов, вы не можете изменить информацию на уровне IP. Даже если бы вы могли (или вы используете JNI или какое-либо приложение или оборудование для фильтрации исходящих пакетов), природа TCP делает спуфинг IP бесполезным для вашей ситуации (ответы будут отправлены на поддельный IP, а также многие другие трудности, которые выходят далеко за рамки объем этого ответа).
Итак, нет, вы не можете делать то, что пытаетесь сделать. Вам либо нужно получить специальные правила, установленные для вас администраторами сервера, к которому вы пытаетесь подключиться, либо вам нужно серьезно переосмыслить дизайн вашего приложения.
Изменить: другие варианты
Я упомянул об этом в комментариях к вопросу, но я также включаю их в свой ответ для полноты картины:
Одним из возможных решений, в зависимости от ваших требований к безопасности, является настройка VPN-доступа для ваших пользователей, чтобы пользователи сначала устанавливали VPN-подключение, а затем запускали ваше веб-приложение на внутреннем сервере.
Вы также можете подключить свой веб-сервер к своей сети через VPN и получить доступ к своим внутренним службам входа напрямую через ссылку VPN, а веб-приложение будет работать по ссылке WAN.
Это был мой первоначальный ответ до того, как ОП разъяснил требования:
Не совсем понятно, о чем вы спрашиваете, поэтому я отвечу на возможные варианты, о которых я могу подумать.
Если вы имеете в виду, что хотите, чтобы пользователь мог указать IP-адрес сервера, на который вы отправляете сообщение, просто создайте URL-адрес из IP-адреса:
HttpPost httppost = new HttpPost("http://" + ip + "/");
Если вы имеете в виду, что хотите, чтобы сервер делал что-то на основе IP-адреса пользователя: IP-адрес пользователя будет доступен на стороне сервера, когда сервер получит запрос, вам не нужно отправлять его явно. Как именно получить доступ к этой информации на стороне сервера, зависит от используемого вами сервера.
Если вы имеете в виду, что хотите, чтобы пользователь мог указать IP-адрес, который отправляется на сервер, просто отправьте его, как вы отправляете другие параметры:
params.add(new BasicNameValuePair("whatever", ip));
Если вы имеете в виду, что вы входите в систему, которая зависит от IP-адреса пользователя, с вашего сервера от имени удаленного пользователя, и вы хотите притвориться этим удаленным пользователем, чтобы войти удается: вы не можете. Система, в которую вы пытаетесь войти, имеет меры безопасности, чтобы предотвратить именно то, что вы пытаетесь сделать. Возможно, владельцы этой системы могут сделать исключение для IP-адреса вашего сервера; вы должны спросить их.
person
Jason C
schedule
16.08.2013