2013-10-12 3 views
2

Как определить IP-адрес, исходящий от запроса? Мой текущий код:NanoHTTPD: определить происхождение запроса

@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.

ответ

8

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

[EDIT]

В вашем методе "служить()", если вы звоните

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

А потом, искать или "адреса удаленного" или "HTTP-клиент-IP" в на карте, вы должны иметь то, что вам нужно. То есть результат вызова «getInetAddress()» на сокете сервера (который согласно документации Java является «удаленным IP-адресом, к которому подключен этот сокет»). Обратите внимание, что если эти заголовки arent присутствуют на карте, вероятно, вам придется иметь более старую версию кода. Версия 2.0.5 была выпущена сегодня, и они определенно присутствуют.

+0

Автор сам NanoHTTPD. Это должен быть мой счастливый день. Я буду ждать обновленной версии с публичной функцией, возвращающей сокет. Thanx. Этот вопрос так же хорош, как «ответил». – Arvin

+0

@ Пол Хоук, пожалуйста, взгляните на это http://stackoverflow.com/questions/23603072/file-directory-navigation-with-android-nanohttpd-lightweight-server# –