端口转发后,如何在Java中获取我的外部IP?
我在我的笔记本上设置了一个静态IP并进行了端口转发,现在我有了一个静态IP地址,但它是相对静态的,每次我重新启动机器,我都会得到另一个地址,因为我有一个“静态”IP,我现在可以进行Paypal IPN消息传递。但是如何从Java程序中获得这个静态IP呢?我能想到的一种方法是访问:在那个页面上,它告诉我我的外部IP是什么,所以我可以用Java代码提取它,我可以用Java代码中的其他方法来获取这些信息吗?最好的解决方案可能是。基本上,您在计算机(或路由器)上运行一个程序,当您的IP发生变化时通知DNS服务器。然后,你可以告诉PayPal域名。我看到三种方法:端口转发后,如何在Java中获取我的外部IP?,java,external,ip,Java,External,Ip,我在我的笔记本上设置了一个静态IP并进行了端口转发,现在我有了一个静态IP地址,但它是相对静态的,每次我重新启动机器,我都会得到另一个地址,因为我有一个“静态”IP,我现在可以进行Paypal IPN消息传递。但是如何从Java程序中获得这个静态IP呢?我能想到的一种方法是访问:在那个页面上,它告诉我我的外部IP是什么,所以我可以用Java代码提取它,我可以用Java代码中的其他方法来获取这些信息吗?最好的解决方案可能是。基本上,您在计算机(或路由器)上运行一个程序,当您的IP发生变化时通知DN
您可以使用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());
}
}
枚举ifcs=NetworkInterface.getNetworkInterfaces();
while(ifcs.hasMoreElements()){
NetworkInterface ifc=ifcs.nextElement();
System.out.println(“地址:“+ifc.getDisplayName());
枚举地址=ifc.getInetAddresses();
while(address.hasMoreElements()){
System.out.println(address.nextElement().getHostAddress());
}
}
此代码段将向您显示所有接口以及绑定到它们的IP。您需要在列表中查找适当的接口(另请参见NetworkInterface.getByName(字符串名称)),然后查看该接口的地址。找到适当的inetAddress后,您可以使用它来获取字符串或字节表示。您可以使用脚本调用公共服务来检索外部IP地址。请记住,他们曾经更改过链接位置。如果您控制自己的服务器,您可能应该编写自己的PHP脚本,只需将调用方的地址返回到脚本 -遵循他们提供的开发人员链接
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']?>
如何“注册动态DNS服务”?我是否需要打电话给我的ISP,安装一个程序,它是免费的吗?最简单的说,你只需注册一个动态DNS服务(例如),并使用他们所拥有的任何机制来更新你的真实IP。大多数(如果不是全部的话)服务都提供了一个小工具,您可以运行它来自动用真实IP更新动态DNS名称。DynDNS的服务对最多5个主机名是免费的。@Matt:谢谢,非常有帮助!不过我有点困惑,所以我真的不需要设置静态IP并进行端口转发,只要转到dyndns.com/services/dns/dyndns并注册他们的服务并运行他们的软件,它就会自动将我的动态地址发送到我注册的名称吗?设置静态IP并自己转发它有什么意义?这将返回本地地址,而不是公共地址。