java訪問ip
在進行JavaWeb開發時,通過會記錄日誌,在記錄日誌的時候,就會存在客戶端的ip存儲,那麼如何獲取客戶端對應的ip呢?
知識點客戶端的訪問ip,是可以通過Request對象來獲取,代碼如下,也是我在項目中經常使用到的工具類。
publicclassIPUtils{/***獲取IP地址*@paramrequest*@return*/(HttpServletRequestrequest){Stringip=request.getHeader("x-forwarded-for");System.out.println("x-forwarded-forip:"+ip);if(ip!=null&&ip.length()!=0&&!"unknown".equalsIgnoreCase(ip)){//多次反向代理後會有多個ip值,第一個ip才是真實ipif(ip.indexOf(",")!=-1){ip=ip.split(",")[0];}}if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("Proxy-Client-IP");System.out.println("Proxy-Client-IPip:"+ip);}if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("WL-Proxy-Client-IP");System.out.println("WL-Proxy-Client-IPip:"+ip);}if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("HTTP_CLIENT_IP");System.out.println("HTTP_CLIENT_IPip:"+ip);}if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("HTTP_X_FORWARDED_FOR");System.out.println("HTTP_X_FORWARDED_FORip:"+ip);}if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getHeader("X-Real-IP");System.out.println("X-Real-IPip:"+ip);}if(ip==null||ip.length()==0||"unknown".equalsIgnoreCase(ip)){ip=request.getRemoteAddr();System.out.println("getRemoteAddrip:"+ip);}System.out.println("獲取客戶端ip:"+ip);returnip;}}可以通過調用此工具類來獲取到當前客戶端訪問的IP地址了。
特殊情況其實這裡面也存在一些特殊的情況,客戶端可能通過代理的方式進行調用後端代碼,所以這里的ip其實可能並不是真實的地址。
還有就是如果通過轉發的話,ip的獲取也可能會有所差異。
所以大家在使用獲取ip的情況下,還是不要太過依賴於他。
『貳』 如何在java中獲取本地ip
很多朋友都想知道java如何獲取本地ip?下面就一起來了解一下吧~
獲取java本地ip一共有兩種方法:1、inetAddress類;2、封裝方法。
1、 inetAddress類
通過InetAddress的實例對象包含以數字形式保存的IP地址,同時還可能包含主機名(如果使用主機名來獲取InetAddress的實例,或者使用數字來構造,並且啟用了反向主機名解析的功能)。InetAddress類提供了將主機名解析為IP地址(或反之)的方法。其生成InetAddress對象的方法。
import java.net.Inet4Address; import java.net.InetAddress; import java.net.UnknownHostException; public class Main { public static void main(String[] args) throws UnknownHostException { //Inet4Address address= (Inet4Address) Inet4Address.getLocalHost(); InetAddress address = InetAddress.getLocalHost(); System.out.println(address);//獲取計算機名稱和ip地址 String hostAddress = address.getHostAddress(); System.out.println(hostAddress);//獲取ip地址 String hostName = address.getHostName(); System.out.println(hostName);//獲取計算機名稱 } }
2、封裝方法。
public static String getLocalIp() { Enumeration netInterfaces = null; try { netInterfaces = NetworkInterface.getNetworkInterfaces(); while (netInterfaces.hasMoreElements()) { NetworkInterface nif = netInterfaces.nextElement(); Enumeration InetAddress = nif.getInetAddresses(); while (InetAddress.hasMoreElements()) { String ip = InetAddress.nextElement().getHostAddress(); if (ip.startsWith("192.168")) { return ip; } } } } catch (SocketException e) { } return "127.0.0.1"; }『叄』 java如何查詢本機ip地址和mac地址
Java中可以使用程序來獲取本地ip地址和mac地址,使用InetAddress這個工具類,示例如下:
importjava.net.*;
publicclassNetInfo{
publicstaticvoidmain(String[]args){
newNetInfo().say();
}
publicvoidsay(){
try{
InetAddressi=InetAddress.getLocalHost();
System.out.println(i);//計算機名稱和IP
System.out.println(i.getHostName());//名稱
System.out.println(i.getHostAddress());//只獲得IP
}
catch(Exceptione){e.printStackTrace();}
}
}
也可以通過命令行窗口來查看本地ip和mac地址,輸入命令:ipconfig。
『肆』 java獲得訪問者ip,為什麼獲得的值是ip "0:0:0:0:0:0:0:1" (id=114)
這代碼的問題只會出現在本機訪問服務,獲取ip時才會出現。
而且如果你本機通過localhost、127.0.0.1和本機真實地址訪問時獲取到的ip也有區別,有興趣可以試試