Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Java获取计算机的广域网IP地址?_Java_Sockets_Ip Address_Wan - Fatal编程技术网

如何用Java获取计算机的广域网IP地址?

如何用Java获取计算机的广域网IP地址?,java,sockets,ip-address,wan,Java,Sockets,Ip Address,Wan,如何使用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.

如何使用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
然后我试着用这个:

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地址


如何获取广域网IP地址?如注释中所述,如118.137.43.219,如果您在执行NAT的路由器后面,您的计算机将不知道其WAN地址

更复杂的情况是,您位于NAT池后面。如果这是真的,那么您的WAN地址可能会定期更改,可能一天更改一次或更频繁


或者某些类型的通信可能会通过代理强制进行。这可能会使出站HTTP请求来自不同于SSH或其他任意协议的WAN地址。

如注释中所述,如果您位于正在执行NAT的路由器后面,您的计算机将不知道其WAN地址

更复杂的情况是,您位于NAT池后面。如果这是真的,那么您的WAN地址可能会定期更改,可能一天更改一次或更频繁

或者某些类型的通信可能会通过代理强制进行。这可能会使出站HTTP请求来自不同于SSH或其他任意协议的WAN地址。

您可以从中获得它。您可以打开到该站点的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();
        }

    }

}
引用自:

你可以从我这里得到它。您可以打开到该站点的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();
        }

    }

}
引用自:


一般来说,任何依赖于此的代码都有一个设计错误——您能否详细说明为什么需要获取NAT路由器的出口IP地址


出口IP地址根本不会帮助您创建回接,因为路由器通常不会将其转发到相应的内部主机。

通常,任何依赖于此的代码都有设计错误-您能否详细说明为什么需要获取其NAT路由器的出口IP地址


出口IP地址根本不会帮助您创建回接,因为路由器通常不会将其转发到相应的内部主机。

如果您最终使用的远程服务使用您的外部IP地址进行回复,请参阅其他答案以了解其定义,请不要使用免费的匿名服务。部署您自己的。您不能构建依赖于某人的Acme what is My IP 3000的应用程序,该应用程序可能会在没有通知您或任何其他不幸用户的情况下随时消失。

如果您最终使用的远程服务以您的外部IP地址回复,请参阅其他答案以了解其定义,不要使用免费的匿名软件。部署您自己的。您不能构建依赖于某人的Acme What is My IP 3000的应用程序,该应用程序可能会在任何时候消失,并且不会通知您或任何其他不幸的用户。

要获取计算机主界面的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());
    }
}

要获取Internet上的其他计算机会看到来自您计算机的连接的IP地址,请使用YoK的答案。

要获取计算机主接口的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());
    }
}

要获取Internet上的其他计算机会看到来自您计算机的连接的IP地址,请使用YoK的答案。

如果您连接到路由器,您的计算机没有WAN IP地址。您可以向发出HTTP请求,它将返回分配给internet连接调制解调器的IP地址。哦,我明白了,所以我只能依靠外部服务器了解我的IP。我可以使用我自己的web服务器中的PHP脚本或ASP吗?我有一个正在运行的apache web服务器或另一个java程序?是的,您可以:echo$\u server['REMOTE\u ADDR';嗯,如果您连接到路由器,您的计算机没有WAN IP地址。您可以向发出HTTP请求,它将返回分配给internet连接调制解调器的IP地址。哦,我明白了,所以我只能依靠外部服务器了解我的IP。我可以使用我自己的web服务器中的PHP脚本或ASP吗?我有一个正在运行的apache web服务器或另一个java程序?是的,您可以:echo$\u server['REMOTE\u ADDR';好的,那么我将租一个免费的网络主机,然后放置php脚本:DA免费托管服务与上面提到的匿名外部托管php脚本一样糟糕。我的观点是,不要开发任何依赖于资源的关键业务流程,这些资源可以在没有通知的情况下消失。好的,那么我将租用一个免费的网络主机,然后放置php脚本:DA免费托管服务与上面提到的无名外部托管php脚本一样糟糕。我的观点是,不要开发任何依赖于资源的关键业务流程,这些资源可能会在没有通知的情况下消失。这只是为了用户,所以它看起来像是:在端口5555上的xxx.xx.xxx.xxx上创建服务器,然后
现在,您可以在该ip上访问此服务器或服务器套接字对象,这只针对用户,因此它看起来像:在端口5555上的xxx.xx.xxx.xxx上创建服务器,然后您可以在该ip上访问此服务器或服务器套接字对象