如何使用Java获取计算机的广域网? 我试着用这个:
ServerSocket ss = new ServerSocket(port);
System.out.println(ss.getInetAddress().getHostAddress());
//wich return 0.0.0.0
然后我尝试这个:
System.out.println(InetAddress.getLocalHost().toString());
//which return keenan-a658368c/192.168.1.100 < yes it is connected to router
像函数说的那样,它返回我的本地IP地址
如何获取WAN IP地址?例如118.137.43.219
答案 0 :(得分:2)
您可以从http://whatismyip.com/automation/n09230945.asp获取。您可以打开此站点的HttpURLConnection并解析输出。
本程序应该有所帮助:
import java.net.HttpURLConnection;
public class GetExternalIp {
public static void main(String args[]) {
try {
java.net.URL url = new java.net.URL(
"http://whatismyip.com/automation/n09230945.asp");
java.net.HttpURLConnection con = (HttpURLConnection) url
.openConnection();
java.io.InputStream stream = con.getInputStream();
java.io.InputStreamReader reader = new java.io.InputStreamReader(
stream);
java.io.BufferedReader bReader = new java.io.BufferedReader(reader);
System.out.print("Your IP address is " + bReader.readLine());
} catch (Exception e) {
e.printStackTrace();
}
}
}
参考:
http://www.daniweb.com/forums/thread192872.html
http://www.coderanch.com/t/411356/java/java/Public-IP-Address-time-limit
答案 1 :(得分:2)
如果您最终使用的是使用“外部IP地址”回复的远程服务(请参阅其他答案以了解其可能的定义),请不要使用其中一个免费的无名称服务。部署自己的。您不得构建依赖于某人的 Acme Whats-My-IP 3000 的应用程序,该应用程序可能随时消失而不通知您或任何其他不幸的用户。
答案 2 :(得分:1)
如评论中所述,如果您在执行NAT的路由器后面,您的机器将不知道其WAN地址。
更复杂的情况是您在NAT池后面。如果这是真的,那么您的WAN地址可能会定期更改,可能每天更换一次或更频繁。
或者某些类型的流量可能会被强制通过代理。这可能会使出站HTTP请求来自与SSH或其他任意协议不同的WAN地址。
答案 3 :(得分:0)
一般来说,任何依赖于此操作的代码都有设计错误 - 您能详细说明为什么需要获取其NAT路由器的出口IP地址吗?
出口IP地址根本不会帮助您创建连接,因为路由器通常不会将其转发到相应的内部主机。
答案 4 :(得分:0)
获取计算机主接口的IP地址:
InetAddress.getLocalHost().getHostAddress()
获取所有接口的IP地址:
List<InetAddress> addresses = new LinkedList<InetAddress>();
Enumeration<NetworkInterface> ifcs = NetworkInterface.getNetworkInterfaces();
while (ifcs.hasMoreElements()) {
NetworkInterface ifc = ifcs.nextElement();
for (InterfaceAddress ifcAddr : ifc.getInterfaceAddresses()) {
addresses.add(ifcAddr.getAddress());
}
}
要获取互联网上其他计算机可以看到来自您计算机的连接的IP地址,请使用YoK的答案。