当前位置: 首页 > 知识库问答 >
问题:

使用java获取本地网络的IP地址

姬念
2023-03-14

我希望在连接到wifi网络时,在运行我的应用程序的手机上获取用户的本地IPv4地址。使用以下代码:

  WifiManager wm = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
                    String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
                    hostname = ip;

我可以得到一些接近IPv4地址的信息,但与命令行中的IPv4地址相比,它并不完全相同。有更好的办法吗?我知道formatIpAddress已被弃用,但在我找到获取IPv4地址的方法之前,我暂时不太担心这个问题。

编辑:

我发现手机wifi设置中的ip地址是我在使用建议的解决方案获取ip地址时得到的。有没有办法在ip配置客户端获取ip地址?

共有2个答案

林雅畅
2023-03-14

下面的代码遍历它拥有的所有接口,然后打印接口的IPv4、IPv6和mac地址。对于局域网IP地址,你可以使用一个函数,如果IP地址是本地地址,它将返回true。

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
public class App{

public static void main(String[] args)throws Exception {
    // getting the list of interfaces in the local machine
    Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
    while( n.hasMoreElements()){ //for each interface
        System.out.println("----------------------------------------------------");
        NetworkInterface e = n.nextElement();
    //name of the interface
        System.out.println("Interface Name: " + e.getName());
    /* A interface may be binded to many IP addresses like IPv4 and IPv6
        hence getting the Enumeration of list of IP addresses  */
        Enumeration<InetAddress> a = e.getInetAddresses();
        while( a.hasMoreElements()){
            InetAddress addr = a.nextElement();
            String add = addr.getHostAddress().toString();
            if( add.length() < 17 )
                System.out.println("IPv4 Address: " + add);
            else
                System.out.println("IPv6 Address: " + add);
        }
        if(e.getHardwareAddress() != null){
                    // getting the mac address of the particular network interface
            byte[] mac = e.getHardwareAddress();
                    // properly formatting the mac address
            StringBuilder macAddress = new StringBuilder();
            for(int i =0; i < mac.length; i++){
                macAddress.append(String.format("%03X%s", mac[i],(i < mac.length -1) ? "-":""));
            }
            System.out.println("Hardware adrress: " + macAddress.toString());
        }
        System.out.println("----------------------------------------------------");
    }
}

}

kali linux 2.0中代码的输出为:
----------------------------------------------------
接口名:wlan0
IPv6地址:fe80:0:0:0:1992:d9bc:7d8c:d85b%wlan0
IPv4 Address: 192.168.1.137
Hardware adrress: 078-0E4-000-0E7-0B0-046
----------------------------------------------------
----------------------------------------------------
Interface Name: lo
IPv6 Address: 0:0:0:0:0:0:0:1%lo
IPv4 Address: 127.0.0.1
----------------------------------------------------

全昊焜
2023-03-14

代码打印运行Android或java应用程序的设备的本地IPv4地址。

 try {
        Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces();  // gets All networkInterfaces of your device
        while (networkInterfaces.hasMoreElements()) {
            NetworkInterface inet = (NetworkInterface) networkInterfaces.nextElement();
            Enumeration address = inet.getInetAddresses();
            while (address.hasMoreElements()) {
                InetAddress inetAddress = (InetAddress) address.nextElement();
                if (inetAddress.isSiteLocalAddress()) {
                    System.out.println("Your ip: " + inetAddress.getHostAddress());  /// gives ip address of your device
                }
            }
        }
    } catch (Exception e) {
        // Handle Exception
    }
 类似资料:
  • 问题内容: 如何仅使用 proc 获得所有网络接口的(IPv4)地址?经过广泛的调查,我发现了以下内容: 使用,需要打开套接字并充分了解所有接口名称。在Linux上的任何手册页中也没有记录。 包含,但这是接口统计信息的列表。 包含,这正是我需要的,但需要IPv6。 通常,在中很容易找到接口,但是很少使用实际地址,除非在某些连接中有明确的一部分。 有一个名为的系统调用,这是Windows所期望的非常

  • 本文向大家介绍Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP,包括了Shell脚本获取本地网卡IP、mac地址、子网掩码、dns IP、外网IP的使用技巧和注意事项,需要的朋友参考一下

  • 我有一个物联网设备,我知道该设备的Mac地址。我的物联网设备连接到我的wifi,我想知道有什么方法可以使用该设备的mac地址来了解其本地ip地址?我的要求是将android应用程序连接到同一个wifi,使用Mac地址搜索设备的ip地址,并建立TCP连接。到目前为止,我一直在搜索这个问题,我没有得到这个问题的完美答案,这真的需要< code>ssdp扫描,或者有任何其他方法可以做到这一点。 RARP

  • 问题内容: 我的机器上运行了一个简单的node.js程序,我想获取运行该程序的PC的本地IP地址。如何使用node.js获得它? 问题答案:

  • 问题内容: 我正在尝试使用Java获取我的Internet IP地址,但是当我的IP地址为192.168.0.xxx时,我一直在获取本地地址(即:127.0.0.1) 我正在使用该行: 这似乎是获取IP地址的标准方法,但这不是我想要的。每个教程都说要使用此行,所以我有些困惑。 有人可以让我知道如何获取正确的IP地址吗? 我在连接到WiFi的设备上运行,但未使用任何电缆。我正在使用ifconfig

  • 我想向本地网络中设备上运行的RestApi发出get请求,以检索设备生成的JSON数据。 RestApi正确响应来自网络中每个其他设备的浏览器调用。但是,当我试图通过dart的http访问数据时,Bash的curl也可以工作。get程序无法检索JSON数据-我得到的是状态码400。 修改URL以确保其正确写入, 在flutter应用程序中,我可以很容易地通过http.get连接到Firebase上