Изменить диапазон WiFi-Direct IP? Force IPv6 в Android WiFi-Direct?

У меня есть два телефона Android KitKat, оба работают с группами WiFi-Direct в качестве владельцев групп, назовем их GO1 и GO2

Мне удалось подключить GO1 как устаревший клиент к GO2 без нарушения каких-либо (ранее установленных) wifi-direct групп.

Проблема в том, что, как вы знаете, IP-адрес GO жестко закодирован в Android-источнике и установлен в 192.168.49.1

Поэтому оба моих устройства GO1 и GO2 имеют одинаковый IP-адрес (**) … каждый в своей локальной сети.

Мое приложение одновременно является клиентом и сервером. Но обе сети используют один и тот же диапазон IP (192.168.49.XXX), который, по-видимому, я не могу изменить.

В результате я не могу создать TCP-соединение между ними, если они оба размещают WiFi-Direct Group, поскольку любое устройство будет подключаться к самому себе при попытке подключения к 192.168.49.1

Поэтому вопросы:

  • Есть ли способ изменить диапазон IP, используемый в Wifi-Direct?
  • Есть ли способ использовать IPv6 вместо IPv4 в Wifi-Direct?
  • Можно ли это сделать без укорачивания телефона?
  • Любое другое предложение?

**: Фактически, поскольку GO1 подключается как старый клиент к GO2, тогда GO1 известен как 192.168.49.227 (например) для GO2, а GO2 известен как 192.168.49.1 по GO1. Но поскольку GO1 ТАКЖЕ GO, он также известен как 192.168.49.1 своим клиентам (и сам по себе).

Невозможно изменить диапазон IP, потому что, как вы правильно указали, он жестко закодирован в системной службе Android Wi-Fi Direct. Лично я не знаю, что IPv6 включен на интерфейсе Wi-Fi P2P, и даже если бы это было так, это был бы жесткий адрес IPv6.

Если GO1 и GO2 должны быть подключены друг к другу, в то время как оба в режиме GO, то, возможно, посмотрите на использование Bluetooth или какой-либо другой транспорт, чтобы они могли общаться. Если связь между GO1 и GO2 может быть отложена, то кешируйте любую информацию, которую нужно обменять, и отправляйте ее между этими двумя устройствами, когда вы можете быть клиентом другого, например, когда GO1 может перестать быть GO и может быть клиентом GO2.

Способ обойти это без использования телефона – отправить свои пакеты через многоадресный UDP *. Эти пакеты сделают это от GO1 до GO2.

Есть некоторые побочные эффекты:

  • Чтобы использовать это для работы в сети, вы должны выполнить инкапсуляцию и маршрутизацию на уровне приложений OSI (неэффективно).

  • Вам также необходимо будет маршрутизировать на основе MAC-адресов, поскольку каждое устройство имеет тот же адрес 192.168.49.1.

  • «Важно отметить, что многоадресный сокет инкапсулирует одноадресную одноадресную связь и, в результате этого, не может полностью использовать общую доступную пропускную способность WiFi и WiFi Direct» *

Что-то еще стоит отметить:

  • Когда вы увеличиваете количество GO, вы столкнетесь с проблемой всех узлов, работающих на одном и том же канале wifi. Это не проблема с несколькими устройствами, но с сотнями устройств это будет огромной проблемой.

* Этот метод был упомянут в документах Colin Funai, Cristiano Tapparello и Wendi Heinzelman, озаглавленном «Поддержка многопроцессорных сетей Device-to-Device через сеть Wi-Fi Direct Multi-group Networking»: https://arxiv.org/pdf/1601.00028 .pdf