java - 如何在jsp页面中显示客户端ip?

标签 java linux jsp

我正在尝试获取查看我的jsp页面的系统的IP。当客户端系统是 Windows 时它工作正常。但在 Linux 中它不起作用。我使用以下代码来执行此操作。任何人都可以建议我解决我的问题

代码:

Mac.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="mc" method="post">
<input type="submit" value="Send">
 <p>Your IP address is: ${pageContext.request.remoteAddr}</p> 
<% String ipAddress = request.getHeader("X-FORWARDED-FOR");
String is="";
if (ipAddress == null) {
    is = request.getRemoteAddr();
}
String OS="";
String userAgent = request.getHeader("User-Agent");
if((userAgent.toLowerCase().indexOf("windows") >= 0)){
    OS="windows";
}
else if((userAgent.toLowerCase().indexOf("linux") >= 0)){
    OS="linux";
}

%>


<p>address:<%=is%>  <%=userAgent%></p>
<input type="text" value="<%=is%>" name="ip">
<input type="text" value="<%=OS%>" name="os">
</form>

</body>
</html>

findMac.java

package checkingfiles;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class mc
 */
@WebServlet("/mc")
public class mc extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public mc() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        PrintWriter out=response.getWriter();

        Pattern macpt = null;
        String c="";

         String ip=request.getParameter("ip");
         String OS=request.getParameter("os");
            System.out.println(ip);

            System.out.println(OS);
            String[] cmd={};
            if (OS.contains("win")) {
                // Windows
                macpt = Pattern
                        .compile("[0-9a-f]+-[0-9a-f]+-[0-9a-f]+-[0-9a-f]+-[0-9a-f]+-[0-9a-f]+");
                String[] a = { "arp", "-a", ip };

                cmd = a;
            } else {
                // Mac OS X, Linux

                macpt = Pattern.compile("[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+");

              //String ping="ping"+ip;
                String ping="ping 192.168.1.136";

              try {

                  Process p = Runtime.getRuntime().exec(ping);
                  BufferedReader inputStream = new BufferedReader(new InputStreamReader(p.getInputStream()));
                  String s = "";
                  inputStream.close();
                  p.destroy();

                  } catch (Exception e) {
                  e.printStackTrace();
                  }

                 c="ifconfig -a";
               System.out.println(ip);
            }

            try {
                // Run command
                Process p=null;
                if(OS.contains("win")){
                 p = Runtime.getRuntime().exec(cmd);
                }
                else{
                    p = Runtime.getRuntime().exec(c);
                }
                p.waitFor();

                // read output with BufferedReader
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        p.getInputStream()));
                String line = reader.readLine();
                System.out.println("command"+line);
                // Loop trough lines
                while (line != null) {
                    Matcher m = macpt.matcher(line);

                    // when Matcher finds a Line then return it as result
                    if (m.find()) {
                        System.out.println("Found");
                        System.out.println("MAC: " + m.group(0));
                       // return m.group(0);
                    }

                    line = reader.readLine();

                }

            } catch (IOException e1) {
                e1.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

    }

}

输出 您的IP地址是:127.0.0.1

地址:127.0.0.1 Mozilla/5.0(X11;Ubuntu;Linux i686;rv:36.0)Gecko/20100101 Firefox/36.0

如何在jsp页面中显示linux系统ip

最佳答案

根据评论中的讨论,服务器和客户端都在同一个系统中

本地主机的IP地址是127.0.0.1

因此您得到的输出是 127.0.0.1

关于java - 如何在jsp页面中显示客户端ip?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33996350/

相关文章:

java - 如何将apollographographll客户端实现到Maven项目中以激活订阅?

linux - 将 "read"用于变量中未知数量的输入

android - 已 Root 的 Android 设备抛出 EACCES : permission denied exception when I try to get CPU's temperature

java - 如何使用 session 从一个jsp页面访问另一个jsp页面的输入值?

java - 如何在Java中定义自定义异常类,最简单的方法?

java - 如何检查2个类实例是否相同

java - JavaFX InvokingTargetException 和 NullPointerException

c - 如何解释此 PMAP 输出?

java - 如何一次打印一行值,如何在 JSTL 中迭代列表

java - 如何让 Tomcat 接受 URL 中未转义的括号?