API для настройки статических IP-адресов в приложении для Android

Можно ли установить IP-адрес интерфейса в Android в приложении?

Я могу запросить доступные интерфейсы и их текущие адреса, используя java.net.NetworkInterface, но это не дает возможности изменить их. Я что-то пропустил где-то, или это не разрешено?

Я надеялся, что мое приложение либо изменит, либо добавит псевдоним к одному или нескольким из существующих интерфейсов во время выполнения на устройстве "с полки". (2,1/2,2). В идеале я хотел бы сделать это для IPv4 и IPv6.

Ответ 1

Settings.System содержит несколько флагов, которые вы можете использовать для этого:

  • WIFI_USE_STATIC_IP
  • WIFI_STATIC_IP
  • WIFI_STATIC_NETMASK
  • WIFI_STATIC_GATEWAY
  • WIFI_STATIC_DNS1 и WIFI_STATIC_DNS2

Вам также потребуется разрешение android.permission.WRITE_SETTINGS, объявленное для вашего приложения.

Затем в вашей деятельности:

final ContentResolver cr = getContentResolver();
Settings.System.putInt(cr, Settings.System.WIFI_USE_STATIC_IP, 1);
Settings.System.putString(cr, Settings.System.WIFI_STATIC_IP, "you.re.ip.addr");
// call putString() for each value to set for your interface

Если вы хотите изменить IP-адрес интерфейса оператора 3G/4G и т.д., я не считаю, что это возможно - поскольку оно подключено к перевозчику и использует их DHCP/security, чтобы вы могли подключаться и использовать их (вроде как изменение внешнего IP-кабеля вашего кабельного модема без согласия вашего интернет-провайдера).