2010-03-30 49 views
0

我设置了一个静态IP并在我的笔记本上做了端口转发,现在我有一个静态IP地址,但它相对静态,每当我重新启动机器,我得到另一个地址,并且由于我有一个“静态“IP我现在可以做PayPal IPN消息。但是我怎样才能从我的Java程序中获得这个静态IP?我能想到的一种方式是访问:http://portforward.com/,并在该页面上告诉我我的外部IP是什么,所以我可以使用Java代码提取它,是否有任何其他方式可以在我的Java代码中获得此信息?端口转发后,如何让我的外部IP在Java?

回答

1

最好的解决办法可能是dynamic DNS。本质上,您在计算机(或路由器)上运行程序,以便在IP更改时通知DNS服务器。然后,你可以告诉PayPal域名。

0

我看到这样的三种方式:

  1. 当你发现,查询什么IP你显然是从连接外部服务器。这很简单,但您需要这样的服务才能使用,并且通常情况下,没有透明的代理会混淆您的结果。
  2. IGD是UPnP的一个子协议,如果你的端口转发设备支持它,很容易给你结果(很多)。谷歌“IGD JAVA”用于图书馆和样品。
  3. 注册一个动态DNS服务,然后查找您自己的DNS名称。
+0

如何“注册动态DNS服务”?我需要打电话给我的ISP,安装一个程序,它是免费的吗? – Frank 2010-03-30 15:04:30

+0

最简单的方法是,您只需注册一个动态DNS服务(例如http://www.dyndns.com/services/dns/dyndns/)并使用他们必须更新您的真实IP的任何机制。大多数(如果不是全部的话)服务提供了一个小工具,您可以运行它来自动更新您的动态DNS名称。 DynDNS的服务最多可免费使用5个主机名称。 – 2010-03-30 15:16:01

+0

@Matt:谢谢,非常有帮助!我有点困惑,因此我甚至不需要建立一个静态IP并进行端口转发,只需转到dyndns.com/services/dns/dyndns并注册他们的服务并运行它们软件,它会自动发送我的动态地址到我的注册名称?设置静态IP并将其转发给我自己的目的是什么? – Frank 2010-03-30 16:00:05

0

可以使用NetworkInterface类:

Enumeration<NetworkInterface> ifcs = NetworkInterface.getNetworkInterfaces(); 
while(ifcs.hasMoreElements()){ 
    NetworkInterface ifc = ifcs.nextElement(); 
    System.out.println("Adresses of: "+ifc.getDisplayName()); 
    Enumeration<InetAddress> adresses = ifc.getInetAddresses(); 
    while(adresses.hasMoreElements()){ 
    System.out.println(adresses.nextElement().getHostAddress()); 
    } 
} 

这个片段将显示所有接口,并绑定到这些综合方案的。您需要查看列表以查找适当的接口(另请参阅NetworkInterface.getByName(String name))然后查看该接口的地址。一旦找到合适的InetAdress,就可以使用它来获取字符串或字节表示。

+1

这将返回本地地址,而不是公共地址。 – 2010-07-12 05:36:07

1

有一个公共服务,您可以通过脚本调用以检索您的外部IP地址。请记住,他们已经改变了链接位置一次。如果你控制自己的服务器,你应该编写你自己的PHP脚本来简单地将调用者的地址返回给脚本。

http://www.whatismyip.com/faq/automation.asp - 按照开发商联系,他们提供

import java.net.*; 
import java.io.*; 

URL myExternalIP = new URL("PUT THE LINK HERE"); 
BufferedReader in = new BufferedReader(new InputStreamReader(
       myExternalIP.openStream())); 

String ip = in.readLine(); //you get the IP as a String 
System.out.println(ip); 

自己的服务器脚本是一个简单的一行。创建一个名为whatismyip.php的文件,这里是内容。

<? echo $_SERVER['REMOTE_ADDR']?>