java如何获取本机IP?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何获取本机IP?相关的知识,希望对你有一定的参考价值。

电脑的ip地址怎么查

参考技术A
import java.net.*;

public class Test6 

public static void main(String[] args) 
// TODO Auto-generated method stub
InetAddress ia=null;
try 
ia=ia.getLocalHost();

String localname=ia.getHostName();
String localip=ia.getHostAddress();
System.out.println("本机名称是:"+ localname);
System.out.println("本机的ip是 :"+localip);
 catch (Exception e) 
// TODO Auto-generated catch block
e.printStackTrace();



参考技术B InetAddress addr = InetAddress.getLocalHost();
  ip=addr.getHostAddress().toString;//获得本机IP
  address=addr.getHostName()toString;//获得本机名称本回答被提问者采纳
参考技术C 貌似这个很爽
import java.net.InetAddress;
import java.net.UnknownHostException;

class Demo
public static void main(String[] args) throws UnknownHostException
InetAddress ip = InetAddress.getLocalHost();

System.out.println("本机的IP : " + ip.getHostAddress());
System.out.println("本机的计算机名 :" + ip.getHostName());



===============下面这个也可以==================
import java.io.IOException;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
class Demo
public static void main(String[] args) throws IOException
Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
while (allNetInterfaces.hasMoreElements())
NetworkInterface netInterface = (NetworkInterface)allNetInterfaces.nextElement();
// System.out.println(netInterface.getName());
Enumeration<InetAddress> addresses = netInterface.getInetAddresses();
while (addresses.hasMoreElements())
ip = (InetAddress) addresses.nextElement();
if (ip != null && ip instanceof Inet4Address)
System.out.println("本机的IP = " + ip.getHostAddress());






==============
偶是菜,纯粹复制转载的,抛异常导下包,弄个泛型,注释了一行而已____异常貌似抛错了.求指教,是否需要try catch环绕

=================

试了一下环绕

import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
class Demo
public static void main(String[] args)
Enumeration<NetworkInterface> allNetInterfaces = null;
try
allNetInterfaces = NetworkInterface
.getNetworkInterfaces();
catch (SocketException e)
e.printStackTrace();

InetAddress ip = null;
while (allNetInterfaces.hasMoreElements())
NetworkInterface netInterface = (NetworkInterface) allNetInterfaces
.nextElement();
// System.out.println(netInterface.getName());
Enumeration<InetAddress> addresses = netInterface
.getInetAddresses();
while (addresses.hasMoreElements())
ip = (InetAddress) addresses.nextElement();
if (ip != null && ip instanceof Inet4Address)
System.out.println("本机的IP = " + ip.getHostAddress());






继续求指教
参考技术D 就是刚才那高手回答的 能给你解决问题

[转] JAVA从本机获取IP地址

[From] https://www.cnblogs.com/xiaoBlog2016/p/7076230.html

 

论述:

  此篇博客是在工作的时候,需要获得当前网络下面正确的ip地址,在网上查阅很多博客,网上一个比较普遍的说法是通过InetAddress.getLocalHost().getHostAddress()获取,但只能够获取简单网络环境下的Ip地址,则忽略IP地址在现在的网络环境更加复杂,比如有Lan,WIFI,蓝牙热点,虚拟机网卡...
即存在很多的网络接口(network interfaces),每个网络接口就包含一个IP地址,并不是所有的IP地址能被外部或局域网访问,比如说虚拟机网卡地址等等。
也就是说InetAddress.getLocalHost().getHostAddress()的IP不一定是正确的IP。因此,公司的大神,自己编写测试,并写成博客:http://www.cnblogs.com/starcrm/p/7071227.html;而此篇博客只是在此前提下整理而来

1.明确当前网络的一些规则:

  1.1、127.xxx.xxx.xxx 属于"loopback" 地址,即只能你自己的本机可见,就是本机地址,比较常见的有127.0.0.1;
  1.2、192.168.xxx.xxx 属于private 私有地址(site local address),属于本地组织内部访问,只能在本地局域网可见。同样10.xxx.xxx.xxx、从172.16.xxx.xxx 到 172.31.xxx.xxx都是私有地址,也是属于组织内部访问;

  1.3、169.254.xxx.xxx 属于连接本地地址(link local IP),在单独网段可用

  1.4、从224.xxx.xxx.xxx 到 239.xxx.xxx.xxx 属于组播地址

  1.5、比较特殊的255.255.255.255 属于广播地址

  1.6、除此之外的地址就是点对点的可用的公开IPv4地址

2.简单情况下获得ip地址:

        首先,当你在"百度"或者"bing"中搜索"JAVA获取本机ip地址";一般情况下,我们搜索到的文章或者博客,只能在单一情况下准确获取本机IP地址。例如:例如以下几种情况,即可在下面的博客中获取:

  2.1:只使用WIFI情况;
  2.2:只使用网线的情况

  网址:http://www.cnblogs.com/zrui-xyu/p/5039551.html

3.获取复杂网络环境下的Ip地址

  源码如下所示:

获得当前网络输口的ip地址

public InetAddress getLocalHostLANAddress() throws Exception {
    try {
        InetAddress candidateAddress = null;
        // 遍历所有的网络接口
        for (Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); ifaces.hasMoreElements(); ) {
            NetworkInterface iface = (NetworkInterface) ifaces.nextElement();
            // 在所有的接口下再遍历IP
            for (Enumeration inetAddrs = iface.getInetAddresses(); inetAddrs.hasMoreElements(); ) {
                InetAddress inetAddr = (InetAddress) inetAddrs.nextElement();
                if (!inetAddr.isLoopbackAddress()) {// 排除loopback类型地址
                    if (inetAddr.isSiteLocalAddress()) {
                        // 如果是site-local地址,就是它了
                        return inetAddr;
                    } else if (candidateAddress == null) {
                        // site-local类型的地址未被发现,先记录候选地址
                        candidateAddress = inetAddr;
                    }
                }
            }
        }
        if (candidateAddress != null) {
            return candidateAddress;
        }
        // 如果没有发现 non-loopback地址.只能用最次选的方案
        InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
        return jdkSuppliedAddress;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

以上是关于java如何获取本机IP?的主要内容,如果未能解决你的问题,请参考以下文章

java中如何获取到本机的外网ip地址?

如何在Node.js中获取本机本地IP地址

java 怎么获取本机ip地址

请问如何用java获取公网IP?

java如何获取当前登录ip

java如何获取当前时间,java如何获取ip地址