一、在Web請求中獲取請求用戶的IP地址
publicstaticString getUserRealIP(HttpServletRequest request)throws UnknownHostException {
? ? ? ? String ip = "";
? ? ? ? // 有的user可能使用代理,為處理用戶使用代理的情況,使用x-forwarded-forif(request.getHeader("x-forwarded-for") ==null)? {
? ? ? ? ip = request.getRemoteAddr();
? ? ? ? }? else? {
? ? ? ? ip = request.getHeader("x-forwarded-for");
? ? ? ? }
? ? ? ? if("127.0.0.1".equals(ip))? {
? ? ? ? // 獲取本機(jī)真正的ip地址? ? ? ? ip = InetAddress.getLocalHost().getHostAddress();
? ? ? ? }
? ? ? ? return ip;
? ? ? ? }
二、獲取本機(jī)IP地址和主機(jī)名
importjava.util.*;
? ? ? ? importjava.net.*;publicclass getMyIP
{
? ? publicstaticvoid main(String[] args) {
? ? ? ? String ip =null;
? ? ? ? String host =null;
? ? ? ? try{
? ? ? ? ? ? InetAddress ia = InetAddress.getLocalHost();
? ? ? ? ? ? host = ia.getHostName();//獲取計(jì)算機(jī)名字? ? ? ? ? ? ip = ia.getHostAddress();//獲取IP? ? ? ? } catch(UnknownHostException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? System.out.println(host);
? ? ? ? System.out.println(IP);
? ? }
}
三、網(wǎng)上搜索的方法
import javax.servlet.http.HttpServletRequest;/** * 自定義訪問對象工具類
*
* 獲取對象的IP地址等信息
* @author X-rapido
*
*/publicclass CusAccessObjectUtil {
? ? /**? ? * 獲取用戶真實(shí)IP地址,不使用request.getRemoteAddr();的原因是有可能用戶使用了代理軟件方式避免真實(shí)IP地址,
? ? *
? ? * 可是,如果通過了多級反向代理的話,X-Forwarded-For的值并不止一個(gè),而是一串IP值,究竟哪個(gè)才是真正的用戶端的真實(shí)IP呢?
? ? * 答案是取X-Forwarded-For中第一個(gè)非unknown的有效IP字符串。
? ? *
? ? * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130,
? ? * 192.168.1.100
? ? *
? ? * 用戶真實(shí)IP為: 192.168.1.110
? ? *
? ? * @param request
? ? * @return*/publicstatic String getIpAddress(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.getHeader("HTTP_CLIENT_IP");
? ? ? ? }
? ? ? ? if(ip ==null|| ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
? ? ? ? ? ? ip = request.getHeader("HTTP_X_FORWARDED_FOR");
? ? ? ? }
? ? ? ? if(ip ==null|| ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
? ? ? ? ? ? ip = request.getRemoteAddr();
? ? ? ? ? ? if("127.0.0.1".equals(ip)||"0:0:0:0:0:0:0:1".equals(ip)){
? ? ? ? ? ? ? ? //根據(jù)網(wǎng)卡取本機(jī)配置的IPInetAddress inet=null;
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? inet = InetAddress.getLocalHost();
? ? ? ? ? ? ? ? } catch (UnknownHostException e) {
? ? ? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ip= inet.getHostAddress();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return ip;
? ? }
}
四、擴(kuò)展知識
Java獲取客戶端請求電腦IP,操作系統(tǒng)等等各種信息
HttpServletRequest request = ServletActionContext.getRequest();
? ? ? ? System.out.println("瀏覽器基本信息:"+request.getHeader("user-agent"));
? ? ? ? System.out.println("客戶端系統(tǒng)名稱:"+System.getProperty("os.name"));
? ? ? ? System.out.println("客戶端系統(tǒng)版本:"+System.getProperty("os.version"));
? ? ? ? System.out.println("客戶端操作系統(tǒng)位數(shù):"+System.getProperty("os.arch"));
? ? ? ? System.out.println("HTTP協(xié)議版本:"+request.getProtocol());
? ? ? ? System.out.println("請求編碼格式:"+request.getCharacterEncoding());
? ? ? ? System.out.println("Accept:"+request.getHeader("Accept"));
? ? ? ? System.out.println("Accept-語言:"+request.getHeader("Accept-Language"));
? ? ? ? System.out.println("Accept-編碼:"+request.getHeader("Accept-Encoding"));
? ? ? ? System.out.println("Connection:"+request.getHeader("Connection"));
? ? ? ? System.out.println("Cookie:"+request.getHeader("Cookie"));
? ? ? ? System.out.println("客戶端發(fā)出請求時(shí)的完整URL"+request.getRequestURL());
? ? ? ? System.out.println("請求行中的資源名部分"+request.getRequestURI());
? ? ? ? System.out.println("請求行中的參數(shù)部分"+request.getRemoteAddr());
? ? ? ? System.out.println("客戶機(jī)所使用的網(wǎng)絡(luò)端口號"+request.getRemotePort());
? ? ? ? System.out.println("WEB服務(wù)器的IP地址"+request.getLocalAddr());
? ? ? ? System.out.println("WEB服務(wù)器的主機(jī)名"+request.getLocalName());
? ? ? ? System.out.println("客戶機(jī)請求方式"+request.getMethod());
? ? ? ? System.out.println("請求的文件的路徑"+request.getServerName());
? ? ? ? System.out.println("請求體的數(shù)據(jù)流"+request.getReader());
? ? ? ? BufferedReader br=request.getReader();
? ? ? ? String res = "";
? ? ? ? while((res = br.readLine()) !=null) {
? ? ? ? System.out.println("request body:" + res);
? ? ? ? }
? ? ? ? System.out.println("請求所使用的協(xié)議名稱"+request.getProtocol());
? ? ? ? System.out.println("請求中所有參數(shù)的名字"+request.getParameterNames());
? ? ? ? Enumeration enumNames= request.getParameterNames();
? ? ? ? while (enumNames.hasMoreElements()) {
? ? ? ? String key = (String) enumNames.nextElement();
? ? ? ? System.out.println("參數(shù)名稱:"+key);
? ? ? ? }
五、在本機(jī)上獲取計(jì)算機(jī)信息
publicvoid getIP(){
? ? ? ? try {
? ? ? ? InetAddress address = InetAddress.getLocalHost();
? ? ? ? String ip = address.getHostAddress().toString();//獲取本機(jī)IPString hostName = address.getHostName().toString();//獲取本機(jī)計(jì)算機(jī)名稱System.out.println("ip is:"+ip);
? ? ? ? System.out.println("host name is:"+hostName);
? ? ? ? } catch (UnknownHostException e) {
? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? }