Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

API for configuring static IP addresses in an Android application

Is it possible to set the IP address of an interface in Android within an application?

I can query the available interfaces and their current addresses using java.net.NetworkInterface, but this doesn't provide a facility to change these. Did I just miss something somewhere, or is it not allowed?

I was hoping to be able to make my application either change or add an alias to one or more of the existing interfaces at runtime on an "off the shelf" device. (2.1/2.2). Ideally I'd like to do this for both IPv4 and IPv6 addresses.

like image 919
Flexo Avatar asked May 27 '10 15:05

Flexo


1 Answers

Settings.System includes several flags you can use for this:

  • WIFI_USE_STATIC_IP
  • WIFI_STATIC_IP
  • WIFI_STATIC_NETMASK
  • WIFI_STATIC_GATEWAY
  • WIFI_STATIC_DNS1 and WIFI_STATIC_DNS2

You'll also need the android.permission.WRITE_SETTINGS permission declared for your application.

Then in your activity:

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

If you want to change the IP address of the carrier's 3G/4G,etc interface, I do not believe this is possible - as it is connected to the carrier and uses their DHCP/security for enabling you to connect and use their services (sort of like changing the external IP of your cable modem without the consent of your ISP).

like image 121
CrackerJack9 Avatar answered Oct 19 '22 09:10

CrackerJack9