如何获取android手机的USB绑定后的系统IP地址?

时间:2012-07-16 14:11:57

标签: android networking usb mobile-application android-1.6-donut


我在android中开发移动应用程序。   
这里我要检测任何Android手机的usb网络共享后的计算机,系统等的IP地址   
我找不到解决办法。   
如果我输入以下代码,那么它只需要手机的IP地址,我需要系统的IP地址

以下是代码

  ArrayList<InetAddress> arrayList=new ArrayList<InetAddress>();

        try {
            for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
                NetworkInterface intf = en.nextElement();
                for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                    InetAddress inetAddress = enumIpAddr.nextElement();
                    arrayList.add(inetAddress);
                    inetAddress=null;
                }
            }
        } catch (SocketException ex) {
            Log.e("SALMAN", ex.toString());
        }
        return arrayList;


请帮助我获取系统的IP地址,如果我们无法获得方法,请提及我。因为我是新手。


我使用的是Android 1.6。


在windows xp系统中有服务器端应用程序。该应用程序是由C#.net开发的Windows服务。
那个窗口服务监听某些端口,如234等。如果有一些数据进入端口,那么它将处理数据并通过该端口发送响应。


在android中,android应用程序通过socket将数据发送到windows服务。
Android手机是USB连接到运行Windows服务的系统。然后系统假设android手机是调制解调器,并为系统生成额外的IP地址。这个IP地址是在Android手机被连接时动态生成的。
对于通过套接字从移动到系统的数据传输。我需要在我的android编码中给出系统的ip地址(在系留之后)。
如果android编码中有任何方法来获取此IP地址。
请大家就此提出自己的想法。

2 个答案:

答案 0 :(得分:7)

在网络共享后,无法在Android中找到在PC中创建的IP地址。没有API或其他方法可以找到它。

如果您使用InetAddress,它将返回192.168.42.129 - 这是由USB Tethering创建的DHCP地址。它不会帮助你沟通。

另一种方法是扫描IP列表。 USB Tethering将创建ip范围为192.168.42.1到192.168.42.255。您可以编写一个简单的扫描仪来查找哪个是活动的。但这需要一些时间。

答案 1 :(得分:2)

感谢上面'游泳N游泳'。我找到了一个代码 Retrieve IP and MAC addresses from /proc/net/arp (Android)

并修改了一下以获得具有有效mac地址的第一个IP。在使用系留的PC上作为单个用户进行开发时,效果很好。您可以根据公司名称等按照上述链接获取更多选择性IP。

public static String getUSBThetheredIP() {

    BufferedReader bufferedReader = null;
    String ips="";

    try {
        bufferedReader = new BufferedReader(new FileReader("/proc/net/arp"));

        String line;
        while ((line = bufferedReader.readLine()) != null) {
            String[] splitted = line.split(" +");
            if (splitted != null && splitted.length >= 4) {
                String ip = splitted[0];
                String mac = splitted[3];
                if (mac.matches("..:..:..:..:..:..")) {
                    if (mac.matches("00:00:00:00:00:00")) {
                        //Log.d("DEBUG", "Wrong:" + mac + ":" + ip);
                    } else {
                        //Log.d("DEBUG", "Correct:" + mac + ":" + ip);
                        ips = ip;
                        break;
                    }
                }
            }
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally{
        try {
            bufferedReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return ips;
}

请注意,每次在untether之后系绳时,您必须在PC上启动Apache或其他进程以使新IP生效。这就是我的经历。