2012-11-23 37 views
1

人们我创建了一个Java小程序来获取本地IP,在网页中输入这个小程序,但它只返回给我的IP 127.0.0.1。
我测试了一些在stackoverflow上找到的答案,但都没有成功。
有什么办法让IP本地真实?
我见过它在一些网站上运行。
下面是我做的代码:Java小程序只返回127.0.0.1

import java.net.InetAddress; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.UnknownHostException; 
import javax.swing.JApplet; 
public class PegaIP extends JApplet { 
    @Override 
    public void init() { 
     try { 
      getAppletContext().showDocument (new URL("javascript:UpdateIP(\"" + InetAddress.getLocalHost().getHostAddress() + "\")")); 
     } catch (UnknownHostException | MalformedURLException e) { 
      System.err.println("Ocorreu erro na criação da GUI"); 
     } 
    } 
} 
+0

不应该*“创建GUI时发生错误”* be *“我们试图在您的位置上探听失败,并且我们不会显示GUI”*?这些操作提供给最终用户的是什么功能?终端用户是否有足够的动力来拥有该功能,以便他们可以a)允许受信任的代码支持该功能? b)准确回答问题? –

+0

[IP Address With Java]的可能重复(http://stackoverflow.com/questions/11941059/ip-address-with-java) –

+0

如果您连接到(同一个来源)服务器,那将能够告诉您客户端的IP地址,尽管它可能已经穿过NAT。 –

回答

1

我的猜测是,你需要让具体操作的工作,因为你是一个小程序里面,文件规定:

如果存在安全管理器,它的checkConnect方法用本地主机名和-1作为它的参数来调用,以查看操作是否被允许。如果操作不被允许,则返回代表回送地址的InetAddress。

要测试它是否属实,您应该在普通的Java应用程序中尝试它,如果127.0.0.1未返回,则问题存在于安全管理器中。你可以通过调用

public void checkConnect(String host, int port) 
当前安全管理的

,看它是否引起了SecurityException也试试。

阅读here了解更多关于applet及其权限的信息。