Как получить IP-адрес системы после подключения USB-телефона?


Я разрабатываю мобильное приложение на Android.
Здесь я хочу, чтобы определить IP-адрес компьютера, системы и т. Д. После подключения USB любого телефона Android
Я не могу найти решение.
Если я поставлю следующий код, то он берет только 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.


Я использую Android 1.6.


В системе Windows XP есть приложение на стороне сервера. Это приложение является службой Windows, разработанной C#.net.
Эта служба Windows прослушивает некоторый порт, такой как 234 и т. Д. Если некоторые данные поступают на порт, то они обрабатывают данные и отправляют ответ через этот порт.


В андроиде приложение для андроид отправляет данные в службу windows через сокет.
Телефон Android подключен к системе, в которой запущена служба Windows, через USB. Система предполагает, что телефон Android является модемом, и для системы генерируется дополнительный IP-адрес. Этот ip-адрес генерируется динамически при подключении телефона Android.
Для передачи данных с мобильного телефона в систему через сокет. Мне нужно будет указать ip-адрес системы (после привязки) в моем коде Android.
Если есть какой-либо метод в Android-кодировании, чтобы получить этот IP-адрес.
Все, пожалуйста, дайте свои идеи по этому поводу.

2 ответа

Решение

Невозможно найти IP-адрес, созданный в ПК от Android после привязки. Нет API или другого способа найти его.

Если вы используете InetAddress, он вернет 192.168.42.129 - это адрес DHCP, созданный с помощью USB Tethering. Это не поможет вам общаться.

Другой способ - отсканировать список IP. USB Tethering создаст IP в диапазоне от 192.168.42.1 до 192.168.42.255 . Вы можете написать простой сканер, чтобы найти, какой из них активен. Но это займет некоторое время.

Благодаря "Плавай N Плавай" выше. Я нашел код на Получить IP и MAC-адреса из /proc/net/arp (Android)

и немного изменил, чтобы получить первый IP-адрес, имеющий действительный MAC-адрес. Прекрасно работает при разработке в качестве одного пользователя на вашем компьютере с привязкой. Вы можете перейти по ссылке выше для получения дополнительных 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;
}

Обратите внимание, что каждый раз, когда вы привязываетесь к другому пользователю, вы должны запускать apache или другие процессы на ПК, чтобы новые IP вступили в силу. Это то, что я испытал.

Другие вопросы по тегам