JAVA获取服务器IP地址和端口

合集下载

java获取当前接口请求路径的几种方法

java获取当前接口请求路径的几种方法

java获取当前接口请求路径的几种方法在Java开发中,有时候我们需要获取当前接口的请求路径,以便进行一些处理。

下面我将介绍几种常用的方法来获取当前接口的请求路径。

1. 使用HttpServletRequest对象在Servlet或者Spring MVC中,我们可以通过HttpServletRequest对象获取当前请求的路径。

可以使用如下代码来获取:```HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();String requestUrl = request.getRequestURL().toString();String queryString = request.getQueryString();String fullPath = requestUrl + (queryString != null ? "?" + queryString : "");```通过`getRequestURL()`方法获取请求的URL,再使用`getQueryString()`方法获取请求URL中的查询参数。

最后将二者拼接起来,即可得到完整的请求路径。

2. 使用HttpRequestUtils工具类如果项目中没有使用Servlet或Spring MVC框架,我们可以自己编写一个HttpRequestUtils工具类,代码如下:```import javax.servlet.http.HttpServletRequest;public class HttpRequestUtils {public static String getRequestUrl(HttpServletRequest request) {StringBuffer requestUrl = request.getRequestURL();String queryString = request.getQueryString();String fullPath = requestUrl + (queryString != null ? "?" + queryString : "");return fullPath;}}```在需要获取请求路径的地方,如下调用该工具类的方法即可:```HttpServletRequest request = ...;String requestUrl = HttpRequestUtils.getRequestUrl(request);```3. 使用JAX-RS的UriInfo对象如果你在使用JAX-RS开发RESTful服务,可以使用UriInfo对象获取请求路径。

Java获取客户端IP、端口等信息

Java获取客户端IP、端口等信息

Java获取客户端IP、端口等信息.txt花前月下,不如花钱“日”下。

叶子的离开,是因为风的追求还是树的不挽留?干掉熊猫,我就是国宝!别和我谈理想,戒了!Java获取客户端IP、端口等信息String agent = request.getHeader("user-agent");System.out.println(agent);StringTokenizer st = new StringTokenizer(agent,";");st.nextToken();//得到用户的浏览器名String userbrowser = st.nextToken();System.out.println(userbrowser);//得到用户的操作系统名String useros = st.nextToken();System.out.println(useros);//取得本机的信息也可以这样://操作系统信息System.out.println(System.getProperty("")); //win2003竟然是win xp?System.out.println(System.getProperty("os.version"));System.out.println(System.getProperty("os.arch"));//瀏覽器:System.out.println(request.getHeader("user-agent"));//再送个红包System.out.println(request.getHeader("user-agent")); //返回客户端浏览器的版本号、类型System.out.println(request.getMethod()); //:获得客户端向服务器端传送数据的方法有get、post、put等类型System.out.println(request.getRequestURI()); //:获得发出请求字符串的客户端地址System.out.println(request.getServletPath()); //:获得客户端所请求的脚本文件的文件路径System.out.println(request.getServerName()); //:获得服务器的名字System.out.println(request.getServerPort()); //:获得服务器的端口号System.out.println(request.getRemoteAddr()); //:获得客户端的ip地址System.out.println(request.getRemoteHost()); //:获得客户端电脑的名字,若失败,则返回客户端电脑的ip地址System.out.println(request.getProtocol()); //:System.out.println(request.getHeaderNames()); //:返回所有request header的名字,结果集是一个enumeration(枚举)类的实例System.out.println("Protocol: " + request.getProtocol());System.out.println("Scheme: " + request.getScheme());System.out.println("Server Name: " + request.getServerName() );System.out.println("Server Port: " + request.getServerPort());System.out.println("Protocol: " + request.getProtocol());System.out.println("Server Info: " +getServletConfig().getServletContext().getServerInfo());System.out.println("Remote Addr: " + request.getRemoteAddr());System.out.println("Remote Host: " + request.getRemoteHost());System.out.println("Character Encoding: " + request.getCharacterEncoding());System.out.println("Content Length: " + request.getContentLength());System.out.println("Content Type: "+ request.getContentType());System.out.println("Auth Type: " + request.getAuthType());System.out.println("HTTP Method: " + request.getMethod());System.out.println("Path Info: " + request.getPathInfo());System.out.println("Path Trans: " + request.getPathTranslated());System.out.println("Query String: " + request.getQueryString());System.out.println("Remote User: " + request.getRemoteUser());System.out.println("Session Id: " + request.getRequestedSessionId());System.out.println("Request URI: " + request.getRequestURI());System.out.println("Servlet Path: " + request.getServletPath());System.out.println("Accept: " + request.getHeader("Accept"));System.out.println("Host: " + request.getHeader("Host"));System.out.println("Referer : " + request.getHeader("Referer"));System.out.println("Accept-Language : " + request.getHeader("Accept-Language"));System.out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding"));System.out.println("User-Agent : " + request.getHeader("User-Agent"));System.out.println("Connection : " + request.getHeader("Connection"));System.out.println("Cookie : " + request.getHeader("Cookie"));System.out.println("Created : " + session.getCreationTime());。

java获取linux服务器上的IP操作

java获取linux服务器上的IP操作

java获取linux服务器上的IP操作在编码过程中需要获取本地IP地址,⾸先使⽤的是下⾯的⽅法,在Windows环境正常,但是linux服务器上就获取不到,public static String getIpAddress() {String hostAddress = "";try {InetAddress address = InetAddress.getLocalHost();hostAddress = address.getHostAddress();} catch (UnknownHostException e) {e.printStackTrace();}return hostAddress;}这样在linux上依然获取到的是127.0.0.1,查询服务器上⾯IP发现:[mm_cbms1@localhost ~]$ ip address1:lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWNlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2:eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000link/ether 00:50:56:a2:0d:1b brd ff:ff:ff:ff:ff:ffinet 10.12.8.243/24 brd 10.12.8.255 scope global eth0inet6 fe80::250:56ff:fea2:d1b/64 scope linkvalid_lft forever preferred_lft forever这⾥⾸先要了解上⾯列出的接⼝中的含义:1、linux的⽹络接⼝之扫盲(1) ⽹络接⼝的命名这⾥并不存在⼀定的命名规范,但⽹络接⼝名字的定义⼀般都是要有意义的。

JAVA如何获取客户端IP地址和MAC地址

JAVA如何获取客户端IP地址和MAC地址

JAVA如何获取客户端IP地址和MAC地址本⽂介绍了JAVA如何获取客户端IP地址和MAC地址,分享给⼤家,具体如下:1.获取客户端IP地址public String getIp(HttpServletRequest request) throws Exception {String ip = request.getHeader("X-Forwarded-For");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {int index = ip.indexOf(",");if (index != -1) {return ip.substring(0, index);} else {return ip;}}}ip = request.getHeader("X-Real-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}return request.getRemoteAddr();}为什么不直接使⽤request.getRemoteAddr();⽽要在之前判断两个请求头"X-Forwarded-For"和"X-Real-IP"X-Forwarded-For: client1, proxy1, proxy2, proxy3其中的值通过⼀个逗号+空格把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到⼀个请求,就把请求来源IP地址添加到右边。

所有我们只取第⼀个IP地址X-Real-IP,⼀般只记录真实发出请求的客户端IP解决⽤localhost访问ip为0:0:0:0:0:0:0:1的问题public String getIp(HttpServletRequest request) throws Exception {String ip = request.getHeader("X-Forwarded-For");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {int index = ip.indexOf(",");if (index != -1) {return ip.substring(0, index);} else {return ip;}}}ip = request.getHeader("X-Real-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}ip = request.getHeader("Proxy-Client-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}ip = request.getHeader("WL-Proxy-Client-IP");if (ip != null) {if (!ip.isEmpty() && !"unKnown".equalsIgnoreCase(ip)) {return ip;}}ip = request.getRemoteAddr();return ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;}2.获取客户端MAC地址UdpGetClientMacAddr umac = new UdpGetClientMacAddr(sip);String smac = umac.GetRemoteMacAddr();添加⼀个获取MAC的时间限制final UdpGetClientMacAddr umac = new UdpGetClientMacAddr(sip);//---长时间获取不到MAC地址则放弃ExecutorService exec = Executors.newFixedThreadPool(1);Callable<String> call = new Callable<String>() {public String call() throws Exception {return umac.GetRemoteMacAddr();}};try {Future<String> future = exec.submit(call);String smac = future.get(1000 * 1, LISECONDS);loginMonitor.setMacAddress(smac);} catch (TimeoutException ex) {loginMonitor.setMacAddress("获取失败");("获取MAC地址超时");}// 关闭线程池exec.shutdown();//---需要先获取IP地址作为参数构造⼀个UdpGetClientMacAddrUdpGetClientMacAddr.javapackage monsys.security.controller;import java.io.IOException;import .DatagramPacket;import .DatagramSocket;import .InetAddress;/*** 主机A向主机B发送“UDP-NetBIOS-NS”询问包,即向主机B的137端⼝,发Query包来询问主机B的NetBIOS Names信息。

Java获取服务器IP及端口的方法实例分析

Java获取服务器IP及端口的方法实例分析

Java获取服务器IP及端⼝的⽅法实例分析本⽂实例讲述了Java获取服务器IP及端⼝的⽅法。

分享给⼤家供⼤家参考,具体如下:前⼏天写过⼀个获取远程服务器的IP和端⼝的程序,从⽹上查了⼀些资料顺便加⼀些⾃⼰的理解,希望对⼤家有所帮助:struts2 获取requestHttpServletRequest requet=ServletActionContext.getRequest();requet.getScheme()+"://"+requet.getServerName()+":"+requet.getServerPort()request.getHeader("User-Agent"); //就是取得客户端的系统版本request.getRemoteAddr(); //取得客户端的IPrequest.getRemoteHost() //取得客户端的主机名request.getRemotePort(); //取得客户端的端⼝request.getRemoteUser(); //取得客户端的⽤户request.getLocalAddr(); //取得服务器IPrequest.getLocalPort(); //取得服务器端⼝1、JSP中获得当前应⽤的相对路径和绝对路径根⽬录所对应的绝对路径:request.getRequestURI()⽂件的绝对路径 :application.getRealPath(request.getRequestURI());当前web应⽤的绝对路径 :application.getRealPath("/");取得请求⽂件的上层⽬录:new File(application.getRealPath(request.getRequestURI())).getParent()2 Servlet中获得当前应⽤的相对路径和绝对路径根⽬录所对应的绝对路径:request.getServletPath();⽂件的绝对路径 :request.getSession().getServletContext().getRealPath(request.getRequestURI())当前web应⽤的绝对路径 :servletConfig.getServletContext().getRealPath("/");ServletContext对象获得⼏种⽅式:javax.servlet.http.HttpSession.getServletContext()javax.servlet.jsp.PageContext.getServletContext()javax.servlet.ServletConfig.getServletContext()3.Java类中获得绝对路径根据java.io.File的Doc⽂挡,可知: 默认情况下new File("/")代表的⽬录为:System.getProperty("user.dir")。

java中连接服务器用法

java中连接服务器用法

java中连接服务器用法在Java中,连接服务器通常使用Socket类。

Socket类提供了一种客户端和服务器之间进行通信的机制。

首先,客户端需要创建一个Socket对象来连接服务器。

可以通过指定服务器的IP地址和端口号来创建Socket对象。

例如,以下代码创建一个Socket对象并连接到本地主机的80端口:```javaString serverIP = "127.0.0.1";int serverPort = 80;Socket socket = new Socket(serverIP, serverPort);```在连接服务器之后,客户端可以使用Socket对象的输入输出流进行数据的发送和接收。

可以通过getInputStream()方法获取输入流,通过getOutputStream()方法获取输出流。

例如,以下代码从服务器接收数据并发送数据给服务器:```java// 从服务器接收数据InputStream inputStream = socket.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));String response = reader.readLine();System.out.println("服务器响应:" + response);// 发送数据给服务器OutputStream outputStream = socket.getOutputStream();PrintWriter writer = new PrintWriter(outputStream, true);writer.println("Hello Server");```在与服务器通信完成后,客户端可以关闭Socket连接。

JAVA获得域名IP地址的方法

JAVA获得域名IP地址的方法
这篇文章主要介绍了java获取当前时间并格式化代码实例中通过示例代码介绍的非常详细对大家的学习或者工作具有一定的参考学习价值需要的朋友可以参考下
JAVA获得域名 IP地址的方法
本文实例讲述了JAVA获得域名IP地址的方法。分享给大家供大家参考。具体如下:
import .InetAddress; import .UnknownHostException; public class TestInetAddress { InetAddress myIpAddress = null; InetAddress[] myServer = null; public static void main(String args[]) { TestInetAddress address = new TestInetAddress(); System.out.println("Your host IP is: " + address.getLocalhostIP()); String domain = ; System.out.println("The server domain name is: " + domain); InetAddress[] array = address.getServerIP(domain); int count=0; for(int i=1; i<array.length; i++){ System.out.println("ip "+ i +" "+ address.getServerIP(domain)[i-1]); count++; } System.out.println("IP address total: "+count); } /** * 获得 localhost 的IP地址 * @return */ public InetAddress getLocalhostIP() { try { myIpAddress = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } return (myIpAddress); } /** * 获得某域名的IP地址 * @param domain 域名 * @return */ public InetAddress[] getServerIP(String domain) { try { myServer = InetAddress.getAllByName(domain); } catch (UnknownHostException e) { e.printStackTrace(); } return (myServer); } }

如何在logback日志配置里获取服务器ip和端口

如何在logback日志配置里获取服务器ip和端口

如何在logback⽇志配置⾥获取服务器ip和端⼝⽬录logback⽇志配置获取服务器ip和端⼝1、新建⼀个类继承ClassicConverter2、在配置⽂件logback.xml增加如下配置3、在需要⽤到ip的位置这样写: %ip4、获取端⼝号,同理让Logback⽇志中显⽰主机名与IP地址及⼀切你想显⽰的1、创建2、重新⽅法3、配置logback.xmllogback⽇志配置获取服务器ip和端⼝1、新建⼀个类继承ClassicConverter在⽅法中获取服务器ippackage mon;import ch.qos.logback.classic.pattern.ClassicConverter;import ch.qos.logback.classic.spi.ILoggingEvent;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import .InetAddress;import .UnknownHostException;/*** @author xiaoming* @date 2019/5/14 11:37* @description*/public class LogIpConfig extends ClassicConverter {private static final Logger logger = LoggerFactory.getLogger(LogIpConfig .class);private static String webIP;static {try {webIP = InetAddress.getLocalHost().getHostAddress();} catch (UnknownHostException e) {logger.error("获取⽇志Ip异常", e);webIP = null;}}@Overridepublic String convert(ILoggingEvent event) {return webIP;}}2、在配置⽂件logback.xml增加如下配置<conversionRule conversionWord="ip" converterClass="mon.LogIpConfig" />3、在需要⽤到ip的位置这样写: %ip"host": "%ip" 这样写,本地⽇志输⼊的时候内容是: "host": "127.0.0.1"4、获取端⼝号,同理package mon;import ch.qos.logback.classic.pattern.ClassicConverter;import ch.qos.logback.classic.spi.ILoggingEvent;import ng3.ObjectUtils;import ng3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.management.MBeanServer;import javax.management.MBeanServerFactory;import javax.management.ObjectName;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Set;/*** @author xiaoming* @date 2019/5/14 11:37* @description*/public class LogPortConfig extends ClassicConverter {private static final Logger logger = LoggerFactory.getLogger(LogPortConfig.class);private static String webPort;static {try {List<MBeanServer> serverList = MBeanServerFactory.findMBeanServer(null);for (MBeanServer server : serverList) {Set<ObjectName> names = new HashSet<ObjectName>();names.addAll(server.queryNames(new ObjectName("Catalina:type=Connector,*"), null));Iterator<ObjectName> it = names.iterator();while (it.hasNext()) {ObjectName oName = (ObjectName) it.next();String pValue = (String) server.getAttribute(oName, "protocol");if (StringUtils.equals("HTTP/1.1", pValue)) {webPort = ObjectUtils.toString(server.getAttribute(oName, "port"));}}}} catch (Exception e) {logger.error("获取port失败,影响logback的⽂件拼接", e);webPort = null;}}@Overridepublic String convert(ILoggingEvent event) {return webPort;}}<conversionRule conversionWord="port" converterClass="mon.LogPortConfig" />%ip:%port让Logback⽇志中显⽰主机名与IP地址及⼀切你想显⽰的1、创建⼀个类继承⾃ch.qos.logback.classic.pattern.ClassicConverter2、重新⽅法@Overridepublic String convert(ILoggingEvent event) {}3、配置logback.xml<conversionRule conversionWord="sulong" converterClass="SulongClass" /><!--配置⽇志的格式--><property name="CONSOLE_LOG_PATTERN" value="%sulong %date{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %yellow(%thread) | %green(%logger) | %msg%n"/>以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

java获取ip的方法

java获取ip的方法

(原创实用版4篇)编制人员:_______________审核人员:_______________审批人员:_______________编制单位:_______________编制时间:____年___月___日序言下面是本店铺为大家精心编写的4篇《java获取ip的方法》,供大家借鉴与参考。

下载后,可根据实际需要进行调整和使用,希望能够帮助到大家,谢射!(4篇)《java获取ip的方法》篇1在 Java 中,获取 IP 地址的方法因场景而异。

如果你是在服务器端获取客户端的 IP 地址,可以使用 request.getRemoteAddr() 方法。

但是如果客户端通过代理服务器访问,这个方法获取到的可能是代理服务器的 IP 地址。

此时可以使用 request.getHeader("X-Forwarded-For") 方法获取客户端真实的 IP 地址。

如果客户端未通过代理服务器访问,则可以直接使用request.getRemoteAddr() 方法获取客户端的 IP 地址。

如果你是在客户端获取自己的 IP 地址,可以使用 NetworkInterface 类和InetAddress 类。

首先获取网络接口列表,然后遍历列表中的每一个网络接口,使用 InetAddress 类获取该网络接口的 IP 地址。

最后将获取到的 IP 地址打印出来即可。

《java获取ip的方法》篇2在 Java 中,获取 IP 地址的方法因场景而异。

如果你是在服务器端获取客户端的 IP 地址,可以使用 request.getRemoteAddr() 方法。

但是如果客户端通过代理服务器访问,这个方法返回的将是代理服务器的 IP 地址。

此时可以使用 request.getHeader("X-Forwarded-For") 方法获取客户端真实的 IP 地址。

如果客户端未通过代理服务器访问,则可以直接使用 request.getRemoteAddr() 方法获取客户端的 IP 地址。

java 获取本机ip的方法

java 获取本机ip的方法

java 获取本机ip的方法Java 获取本机IP的方法介绍在开发Java应用程序时,有时候需要获取本机的IP地址。

本文将介绍几种获取本机IP的方法。

方法一:通过InetAddress类获取使用Java的InetAddress类可以获取到本机的IP地址。

以下是获取本机IP的代码片段:import ;import ;public class IPAddressExample {public static void main(String[] args) {try {InetAddress address = ();("IP Address: " + ());} catch (UnknownHostException e) {();}}}方法二:通过NetworkInterface类获取另一种获取本机IP地址的方法是使用Java的NetworkInterface 类。

以下是具体的代码示例:import ;import ;import ;import ;public class IPAddressExample {public static void main(String[] args) {try {Enumeration<NetworkInterface> networkInterfa ces = ();while (()) {NetworkInterface networkInterface = (); Enumeration<InetAddress> inetAddresses = ();while (()) {InetAddress address = ();if (!() && ()) {("IP Address: " + ());}}}} catch (SocketException e) {();}}}方法三:通过System类获取Java的System类提供了一个systemProperties变量,它包含一些系统相关的属性,其中就包括本机的IP地址。

Java获取IP地址(request.getRemoteAddr())

Java获取IP地址(request.getRemoteAddr())

Java获取IP地址:request.getRemoteAddr()警惕项目中需要和第三方平台接口,加了来源IP鉴权功能,测试时发现没有问题,但是部署以后发现存在问题,一直鉴权不通过,一群人抓瞎。

我找到那块的代码,跟了一遍流程发现逻辑没有啥问题,但是最终的结果却还是鉴权不通过,实在有些诡异。

其基本逻辑为先取得配置的IP列表,然后通过request.getRemoteAddr()取得客户端的IP地址,做鉴权和校验,逻辑没问题,那么肯定是request.getRemoteAddr()出了问题,google下,发现有人遇到类似的问题。

最终定位为request.getRemoteAddr()这种方法在大部分情况下都是有效的。

但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。

如果使用了反向代理软件,将http://192.168.1.110:2046/的URL反向代理为/ 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。

但是在转发请求的HTTP 头信息中,增加了X-FORWARDED-FOR信息用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。

原来如此,我们的项目中正好是有前置apache,将一些请求转发给后端的weblogic,看来就是这样导致的咯。

给出一份还算靠谱的代码,如下:Java代码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;}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; }如果有人遇到类似问题,请多加留意,呵呵。

java ipv6 获取方法

java ipv6 获取方法

java ipv6 获取方法在Java中获取IPv6地址的方法非常简单,可以使用`Inet6Address`类来实现。

IPv6地址是128位长的地址,通常由8个16位的块组成,每个块用冒号分隔开。

在Java中,可以使用以下方法获取IPv6地址:java.import .Inet6Address;import .InetAddress;import workInterface;import java.util.Enumeration;public class IPv6Example {。

public static void main(String[] args) {。

try {。

Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();while (networkInterfaces.hasMoreElements()) {。

NetworkInterface networkInterface = networkInterfaces.nextElement();Enumeration<InetAddress> inetAddresses= networkInterface.getInetAddresses();while (inetAddresses.hasMoreElements()) {。

InetAddress address = inetAddresses.nextElement();if (address instanceof Inet6Address) {。

System.out.println("IPv6 Address: " + address.getHostAddress());}。

}。

}。

} catch (Exception e) {。

Java获取IP地址(request.getRemoteAddr())

Java获取IP地址(request.getRemoteAddr())

Java获取IP地址:request.getRemoteAddr()警惕项目中需要和第三方平台接口,加了来源IP鉴权功能,测试时发现没有问题,但是部署以后发现存在问题,一直鉴权不通过,一群人抓瞎。

我找到那块的代码,跟了一遍流程发现逻辑没有啥问题,但是最终的结果却还是鉴权不通过,实在有些诡异。

其基本逻辑为先取得配置的IP列表,然后通过request.getRemoteAddr()取得客户端的IP地址,做鉴权和校验,逻辑没问题,那么肯定是request.getRemoteAddr()出了问题,google下,发现有人遇到类似的问题。

最终定位为request.getRemoteAddr()这种方法在大部分情况下都是有效的。

但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。

如果使用了反向代理软件,将http://192.168.1.110:2046/的URL反向代理为/ 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。

但是在转发请求的HTTP 头信息中,增加了X-FORWARDED-FOR信息用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。

原来如此,我们的项目中正好是有前置apache,将一些请求转发给后端的weblogic,看来就是这样导致的咯。

给出一份还算靠谱的代码,如下:Java代码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;}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; }如果有人遇到类似问题,请多加留意,呵呵。

java中获取当前服务器的Ip地址的方法

java中获取当前服务器的Ip地址的方法

java中获取当前服务器的Ip地址的⽅法1、tomcat是⼀款免费的开源Web服务器,如果部署在本地,那么对应的那么为localhost,对应地址为127.0.0.1。

如果部署在服务器(linux)系统类,则需要通过服务器的Ip地址进⾏访问。

2、下⾯说说怎么获取Ip地址:获取本地的Ip地址:public static void main(String[] args) { try {InetAddress address = InetAddress.getLocalHost();//获取的是本地的IP地址 //PC-20140317PXKX/192.168.0.121String hostAddress = address.getHostAddress());//192.168.0.121InetAddress address1 = InetAddress.getByName("");//获取的是该⽹站的ip地址,⽐如我们所有的请求都通过nginx的,所以这⾥获取到的其实是nginx服务器的IP地 String hostAddress1 = address1.getHostAddress());//124.237.121.122InetAddress[] addresses = InetAddress.getAllByName("");//根据主机名返回其可能的所有InetAddress对象for(InetAddress addr:addresses){System.out.println(addr);///14.215.177.38///14.215.177.37}} catch (UnknownHostException e) {e.printStackTrace();}}获取服务器的Ip地址(其他⼈写的)/*** 获取服务器IP地址* @return*/@SuppressWarnings("unchecked")public static String getServerIp(){String SERVER_IP = null;try {Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces();InetAddress ip = null;while (netInterfaces.hasMoreElements()) {NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement();ip = (InetAddress) ni.getInetAddresses().nextElement();SERVER_IP = ip.getHostAddress();if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress()&& ip.getHostAddress().indexOf(":") == -1) {SERVER_IP = ip.getHostAddress();break;} else {ip = null;}}} catch (SocketException e) {// TODO Auto-generated catch blocke.printStackTrace();}return SERVER_IP;}}基于SSM框架的农业物联⽹智能养殖系统中的养殖⽇志要求上传⼀张图⽚到服务器中。

java 获取服务端的端口方法

java 获取服务端的端口方法

java 获取服务端的端口方法以Java获取服务端的端口方法为标题,本文将介绍如何使用Java 编程语言获取服务器端口的方法。

在进行网络编程时,我们经常需要获取服务器端口来进行一些操作,比如确定服务器是否正在监听某个特定端口,或者在客户端与服务器进行通信时需要知道服务器的端口号。

下面将介绍几种常用的方法来获取服务器端口。

1. 使用Socket对象获取服务器端口通过创建一个Socket对象来连接服务器,我们可以使用getLocalPort()方法获取与服务器连接的本地端口号。

具体代码如下:```javaimport java.io.IOException;import .Socket;public class GetServerPort {public static void main(String[] args) {try {Socket socket = new Socket("服务端IP地址", 服务端端口号);int localPort = socket.getLocalPort();System.out.println("服务器端口号:" + localPort);socket.close();} catch (IOException e) {e.printStackTrace();}}}```在上述代码中,我们创建了一个Socket对象,并指定了服务器的IP地址和端口号。

然后通过调用getLocalPort()方法获取与服务器连接的本地端口号,并将其打印出来。

2. 使用ServerSocket对象获取监听端口如果我们是在服务器端编程,可以使用ServerSocket对象来监听指定端口。

在创建ServerSocket对象时,可以通过getLocalPort()方法获取监听的本地端口号。

具体代码如下:```javaimport java.io.IOException;import .ServerSocket;public class GetServerPort {public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(服务端端口号);int localPort = serverSocket.getLocalPort();System.out.println("服务器监听端口号:" + localPort); serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}```在上述代码中,我们创建了一个ServerSocket对象,并指定了要监听的端口号。

java获取客户端ip的方法

java获取客户端ip的方法

(实用版4篇)编写人员:_______________审核人员:_______________审批人员:_______________编写单位:_______________编写时间:____年___月___日序言Download Note: This document is original and carefully arranged by our store. After downloading, you can adjust and use it according to your actual needs. We hope that this can help you, thank you!(4篇)《java获取客户端ip的方法》篇1在Java中,可以通过以下几种方式获取客户端的IP地址:1. 使用HttpServletRequest对象获取客户端IP地址```javapublic String getClientIp(HttpServletRequest request) {String ipAddress = request.getHeader("X-Forwarded-For");if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("Proxy-Client-IP");}if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("WL-Proxy-Client-IP");}if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getRemoteAddr();}return ipAddress;}```这个方法会首先尝试从X-Forwarded-For头部获取客户端IP地址,如果获取不到,则尝试从Proxy-Client-IP和WL-Proxy-Client-IP头部获取,最后如果还是获取不到,则返回request.getRemoteAddr()方法获取的IP地址。

JAVA如何获取客户端IP地址和MAC地址

JAVA如何获取客户端IP地址和MAC地址

JAVA如何获取客户端IP地址和MAC地址在Java中,可以通过以下几种方式来获取客户端的IP地址和MAC地址:1. 通过Socket获取IP地址:Java中的Socket类提供了获取IP地址的方法。

可以使用以下代码来获取客户端的IP地址:```javapublic class IPAddressExamplepublic static void main(String[] args)tryInetAddress address = InetAddress.getLocalHost(;System.out.println("IP Address: " + address.getHostAddress();} catch (UnknownHostException ex)System.out.println("Could not find IP address of the localhost");}}```这个程序中,我们使用了`InetAddress.getLocalHost(`方法来获取本地主机的信息,并使用`getHostAddress(`方法来获取IP地址。

2. 通过NetworkInterface获取MAC地址:要获取客户端的MAC地址,可以使用Java中的NetworkInterface类。

下面是一个示例代码,用于获取本地主机的MAC地址:```javaimport java.util.*;public class MACAddressExamplepublic static void main(String[] args)tryInetAddress address = InetAddress.getLocalHost(;NetworkInterface networkInterface =NetworkInterface.getByInetAddress(address);byte[] mac = networkInterface.getHardwareAddress(;StringBuilder macAddress = new StringBuilder(;for (int i = 0; i < mac.length; i++)macAddress.append(String.format("%02X%s", mac[i], (i <mac.length - 1) ? "-" : ""));}System.out.println("MAC Address: " + macAddress.toString();} catch (SocketException , UnknownHostException ex)System.out.println("Could not find MAC address of the localhost");}}```在这个示例中,我们首先获取本地主机的InetAddress对象,然后使用`NetworkInterface.getByInetAddress(`方法获取对应的NetworkInterface对象。

java中怎么获取客户端的真实的IP

java中怎么获取客户端的真实的IP

java中怎么获取客户端的真实的IP服务器A被服务器B代理的,怎么能获取客户段的真实IP地址,现在在服务器A上获取的IP地址全是代理服务器B的IP地址,怎么样能获取真实的客户端的IP地址?在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。

但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。

如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为 / 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或192.168.1.110,而并不是客户端的真实IP。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。

但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。

用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。

当我们访问 /index.jsp/ 时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问http://192.168.1.110:2046/index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。

于是可得出获得客户端真实IP地址的方法一:Java代码1.public String getRemortIP(HttpServletRequest request) {2. if (request.getHeader("x-forwarded-for") == null) {3. return request.getRemoteAddr();4. }5. return request.getHeader("x-forwarded-for");6. }可是当我访问 /index.jsp/ 时,返回的IP地址始终是unknown,也并不是如上所示的127.0.0.1 或192.168.1.110了,而我访问http://192.168.1.110:2046/index.jsp 时,则能返回客户端的真实IP地址,写了个方法去验证。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档