2013-10-12 50 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地址並解決你要找的東西。請給我幾天的時間把代碼放在一起,然後檢查我們是否應該讓你在路上!

[編輯]

在您的 「服務()」 方法,如果你調用

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

,然後尋找任何 「遠程地址」 或 「HTTP客戶端-IP」 在地圖,你應該有你所需要的。也就是說,在服務器套接字上調用「getInetAddress()」(根據Java文檔是「該套接字連接到的遠程IP地址」)的結果。請注意,如果這些標題不存在於地圖中,它可能會歸結於您擁有舊版本的代碼。版本2.0.5今天發佈,他們肯定存在。

+0

NanoHTTPD自己的作者。這一定是我的幸運日。我將用返回套接字的公共函數等待更新後的版本。感謝名單。這個問題與「回答」一樣好。 – Arvin

+0

@ Paul Hawke,請看看這個http://stackoverflow.com/questions/23603072/file-directory-navigation-with-android-nanohttpd-lightweight-server# –