返回访问Web应用程序的机器的ip的方法

时间:2013-01-28 04:46:09

标签: java jsp

我在localhost托管的计算机上托管了一个jsp Web应用程序。

我可以从LAN上的其他计算机访问此Web应用程序。  我在这里做的是我创建了一个bean类,它有一个返回访问Web应用程序的机器IP的方法。  但当我从另一台机器访问时,我获得了托管机器的IP本身。  有谁能说出它为什么会发生?告诉我如何获取访问本地主机托管的Web应用程序的另一台计算机的IP。

3 个答案:

答案 0 :(得分:0)

你可以尝试

  

的getRemoteAddr

ServletRequest的方法。有关详细信息,请参阅Documentation

答案 1 :(得分:0)

您无法可靠地执行此操作,但如果您可以控制所有客户端和服务器之间的网络,并且您愿意接受恶意请求可能会向您提供错误信息,那么可以使用{{3这将为您提供该类型的信息。重申一下,它绝不保证是最初发送请求的机器的地址,并且它也保证以任何方式是真实的。鉴于正确(或错误的)网络条件,很容易欺骗这条信息。

答案 2 :(得分:0)

这是使用网络服务来获取IP地址 看看

package ipInfo;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class ExternalIp {
    private static String URL = "http://api-sth01.exip.org/?call=ip";

    public static void main(String[] args) {
        ExternalIp ipGetter = new ExternalIp();
        ipGetter.getExternalIp();
    }

    public void getExternalIp() 
    {
        BufferedReader reader = null;
        String line = "";
        int tries = 0;
        do {    
            try {
                reader = read(URL);
                /*while(reader.readLine() != null)
                {
                    line = line + reader.readLine();
                }*/
                line = reader.readLine();
            }
            catch (FileNotFoundException fne) {
                System.out.println("File not found for url: " + URL);
                System.out.println("Check your typing");
                System.out.println();
                return;
            }
            catch (IOException ioe) {
                System.out.println("Got IO Exception, tries = " + (tries + 1));
                System.out.println("Message: " + ioe.getMessage());
                tries++;
                try {
                    Thread.currentThread().sleep(300000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
                continue;
            }   
            catch (Exception exc) {
                exc.printStackTrace();
            }
        } while (reader == null && tries < 5);

        if (line != null && line.length() > 0) {
            System.out.println("Your external ip address is: " + line);
        }
        else {
            System.out.println("Sorry, couldn't get your ip address");
        }
    }

    public BufferedReader read(String url) throws Exception{
        return new BufferedReader(
            new InputStreamReader(
                new URL(url).openStream()));
    }

}