request伺服器地址
㈠ 為什麼用request.getRemoteAddr獲得的全是127.0.0.1
獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了Apache,Squid等反向代理軟體就不能獲取到客戶端的真實IP地址了。如果使用了反向代理軟體,用request.getRemoteAddr()方法獲取的IP地址是:127.0.0.1或192.168.1.110,而並不是客戶端的真實IP。
經過代理以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的 IP,伺服器端應用也無法直接通過轉發請求的地址返回給客戶端。但是在轉發請求的HTTP頭信息中,增加了X-FORWARDED-FOR信息。用以跟蹤原有的客戶端IP地址和原來客戶端請求的伺服器地址。當我們訪問index.jsp/時,其實並不是我們瀏覽器真正訪問到了伺服器上的index.jsp文件,而是先由代理伺服器去訪問index.jsp ,代理伺服器再將訪問到的結果返回給我們的瀏覽器,因為是代理伺服器去訪問index.jsp的,所以index.jsp中通過request.getRemoteAddr()的方法獲取的IP實際上是代理伺服器的地址,並不是客戶端的IP地址。
於是可得出獲得客戶端真實IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
獲得客戶端真實IP地址的方法二:
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
可是,如果通過了多級反向代理的話,X-Forwarded-For的值並不止一個,而是一串IP值,究竟哪個才是真正的用戶端的真實IP呢?
答案是取X-Forwarded-For中第一個非unknown的有效IP字元串。如:
X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
用戶真實IP為: 192.168.1.110
㈡ request.getRemoteAddr();拿到的是伺服器的ip,還是我發送方主機的ip
我不太清楚你用的啥語言,但是你想,HTTP協議是屬於應用層協議,是在最上層的,你拿到的HTTP的內容,IP層的地址應該已經被剝離掉了,你從request裡面是不可能拿到對端的IP的。你自己看看HTTP的頭,它就沒有這個東西啊
㈢ 如何通過Request獲取用戶真實IP
問題引出:
<hr/>
在JSP里,獲取客戶端的IP地址的方法是:request.getRemoteAddr(),這種方法在大部分情況下都是有效的。但是在通過了 Apache,Nagix等反向代理軟體就不能獲取到客戶端的真實IP地址了。如果使用了反向代理軟體,用 request.getRemoteAddr()方法獲取的IP地址是:127.0.0.1或 192.168.1.110,而並不是客戶端的真實IP。
經過代理以後,由於在客戶端和服務之間增加了中間層,因此伺服器無法直接拿到客戶端的 IP,伺服器端應用也無法直接通過轉發請求的地址返回給客戶端。但是在轉發請求的HTTP頭信息中,增加了X-FORWARDED-FOR信息。用以跟蹤原有的客戶端 IP地址和原來客戶端請求的伺服器地址。
舉例來說,當我們訪問口碑網首頁hangzhou.jsp時,其實並不是我們瀏覽器真正訪問到了伺服器上的hangzhou.jsp 文件,而是先由代理伺服器Nagix去訪問hagnzhou.jsp ,代理伺服器再將訪問到的結果返回給我們的瀏覽器,因為是代理伺服器去訪問hangzhou.jsp的,所以hangzhou.jsp中通過 request.getRemoteAddr()的方法獲取的IP實際上是代理伺服器的地址,並不是客戶端的IP地址。
<hr/>
獲得客戶端真實IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}
<hr/>
獲得客戶端真實IP地址的方法二
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
<hr/>
㈣ <%=Request ("LOCAL_ADDR")%>是提取伺服器IP地址,如何提取客戶機的IP呢
取得客戶機的IP:
<%=request.servervariables("remote_host")%>
㈤ 微信小程序的request 中url 一定要用域名嗎 不能用HTTPS的伺服器IP地址嗎
首先根據微信小程序的要求,需要使用域名!必須使用HTTPS協議加密,並且符合以下ATS標准:
一、證書(要求):安全的證書公鑰演算法(RSA 2048 位以上或 ECC 256 位以上)、安全的證書簽名演算法(SHA2)、證書被 Apple ATS 信任(權威機構頒發)、證書與域名匹配(包含被檢測的域名)、證書時間有效(未過期)。
二、伺服器(要求):開啟 HTTPS、伺服器配置符合 ATS 規范、支持 TLS1.2、PFS(完全正向保密)、iOS 密碼套件支持。
三、您要知道的是使用可信機構機構Gworg SSL證書,成本考慮的情況下通常使用DV證書,然而他僅支持域名,然而IP是不可能的,就算是可信機構簽發了IP證書信任,但信任率也不會全面,而且公網IP也會變動,當然IP在那邊意味著伺服器也暴漏在眼前,IP簽發的成本不菲!
㈥ java 怎麼寫一個介面 讓他返回伺服器的動態IP地址和埠
我認為要解決此類問題,你應該有個伺服器a,a的IP是固定的,然後所有動態的伺服器b,c,d等,應該定時把自己身份信息(應當包括身份、埠等)上送給伺服器a。那麼在a的請求中就可以獲得IP,這樣伺服器a上就可以返回b,c,d的IP和埠了?希望這個思路可以幫到你。