在Port Forwarding之后,如何在Java中获取我的外部IP?

时间:2010-03-30 14:20:12

标签: java external ip

我设置了一个静态IP,并在我的笔记本上进行了端口转发,现在我有一个静态IP地址,但它相对静态,每次重新启动机器,我得到另一个地址,因为我有一个“静态”IP我现在可以做Paypal IPN消息传递。但是如何从我的Java程序中获取这个静态IP?我可以想到的一种方法是访问:http://portforward.com/并在该页面上告诉我我的外部IP是什么,所以我可以用Java代码提取它,我可以用我的Java代码做任何其他方式获取此信息?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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']?>

答案 2 :(得分:0)

我看到三种方法:

  1. 正如您所发现的,查询外部服务器您显然连接的IP。这很简单,但您需要提供这样的服务,通常情况下,没有透明代理会对您的结果感到困惑。
  2. IGD,UPnP的子协议可以很容易地为您提供结果,如果您的端口转发设备支持它(许多)。 Google“IGD JAVA”用于图书馆和样本。
  3. 注册动态DNS服务,然后查找自己的DNS名称。

答案 3 :(得分: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());
  }
}

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