用Java獲取本機(jī)IP或者請求用戶的真正IP地址

一、在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();

? ? ? ? }

? ? ? ? }

個(gè)人博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容