NanoHTTPD: определить источник запроса

Как определить IP-адрес, с которого поступил запрос? Мой текущий код:

@Override
public Response serve(String uri, Method method,
    Map<String, String> headers, Map<String, String> parms,
    Map<String, String> files) {

    headers.get("origin"); // my current workaround
};

Но любой клиент может изменить или удалить заголовки запроса. Таким образом, это неправильный способ получить эту информацию. В ASP.NET MVC3 этого можно добиться с помощью Request.UserHostAddress.


person Arvin    schedule 12.10.2013    source источник


Ответы (1)


Прямо сейчас NanoHTTPD не предоставляет необработанные сокеты. Есть запрос на добавление «getSocket()» или аналогичного класса сеанса, что позволит запрашивать IP-адрес и решить, что вы ищете. Дайте мне пару дней, чтобы собрать код и проверить, и вы уже в пути!

[РЕДАКТИРОВАТЬ]

В вашем методе "serve()", если вы вызываете

Map<String, String> headers = session.getHeaders();

А затем ищите на карте либо «remote-addr», либо «http-client-ip», у вас должно быть то, что вам нужно. То есть результат вызова «getInetAddress()» на сокете сервера (который, согласно документации Java, является «удаленным IP-адресом, к которому подключен этот сокет»). Обратите внимание: если эти заголовки отсутствуют на карте, вероятно, это связано с тем, что у вас более старая версия кода. Сегодня вышла версия 2.0.5, и они точно присутствуют.

person Paul Hawke    schedule 17.10.2013
comment
Сам автор NanoHTTPD. Это должен быть мой счастливый день. Буду ждать обновленную версию с публичной функцией, возвращающей сокет. спасибо Этот вопрос так же хорош, как и ответ. - person Arvin; 18.10.2013
comment
@ Пол Хоук, внимательно посмотрите на этот stackoverflow.com/questions/23603072/ - person Nosakhare Belvi; 12.05.2014