Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically getting the gateway and subnet mask details

How can I get gateway and subnet mask details in Android?

like image 441
Arun Abraham Avatar asked Mar 22 '11 05:03

Arun Abraham


People also ask

What is subnet mask default gateway and DNS?

The subnet mask splits the IP address into the host and network addresses, thereby defining which part of the IP address belongs to the device and which part belongs to the network. The device called a gateway or default gateway connects local devices to other networks.

What is the subnet mask of your network default gateway?

The gateway can really be any unique address within the subnet itself, but most network administrators designate the first number of the subnet as the gateway. Therefore, 192.168. 99.1 would be the default gateway of our source device given the fact that we have a 255.255. 255.0 subnet mask.


4 Answers

I have found a class called DhcpInfo within the android.net package. It has some public variables that stores the values of current Network parameters. But the problem is they return the value in integer converted from 8Bit shifted binary.

Sample Image Describing thee Scenario:

enter image description here

****Here is a sample code:**

**java file:****

package com.schogini.dhcp;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import android.net.*;
import android.net.wifi.WifiManager;

public class dhcpInfo extends Activity {
    public String   s_dns1 ;
    public String   s_dns2;     
    public String   s_gateway;  
    public String   s_ipAddress;    
    public String   s_leaseDuration;    
    public String   s_netmask;  
    public String   s_serverAddress;
    TextView info;
    DhcpInfo d;
    WifiManager wifii;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        wifii= (WifiManager) getSystemService(Context.WIFI_SERVICE);
        d=wifii.getDhcpInfo();

        s_dns1="DNS 1: "+String.valueOf(d.dns1);
        s_dns2="DNS 2: "+String.valueOf(d.dns2);    
        s_gateway="Default Gateway: "+String.valueOf(d.gateway);    
        s_ipAddress="IP Address: "+String.valueOf(d.ipAddress); 
        s_leaseDuration="Lease Time: "+String.valueOf(d.leaseDuration);     
        s_netmask="Subnet Mask: "+String.valueOf(d.netmask);    
        s_serverAddress="Server IP: "+String.valueOf(d.serverAddress);

        //dispaly them
        info= (TextView) findViewById(R.id.infolbl);
        info.setText("Network Info\n"+s_dns1+"\n"+s_dns2+"\n"+s_gateway+"\n"+s_ipAddress+"\n"+s_leaseDuration+"\n"+s_netmask+"\n"+s_serverAddress);
    }
}

xml Coding:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.schogini.dhcp"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="4" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".dhcpInfo"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
</manifest>

I tried converting the integer value to its equivalent but i couldn't. If you do so you can post back.. Bye..

UPDATE: Some how managed to convert the IP to v4 Format from the integer form Conversion to IPv4 Format:

public String intToIp(int i) {

   return ((i >> 24 ) & 0xFF ) + "." +
               ((i >> 16 ) & 0xFF) + "." +
               ((i >> 8 ) & 0xFF) + "." +
               ( i & 0xFF) ;
}

IMAGE Courtesy: http://www.bennadel.com/blog/1830-Converting-IP-Addresses-To-And-From-Integer-Values-With-ColdFusion.htm

like image 159
Anoop Chandrika HarisudhanNair Avatar answered Oct 27 '22 05:10

Anoop Chandrika HarisudhanNair


Formatter.formatIpAddress(int) is deprecated, and we dont want to use deprecated methods do we?

AndroidKid's version of this is somehow reversed, but this should fix it:

public String intToIp(int addr) {
    return  ((addr & 0xFF) + "." + 
            ((addr >>>= 8) & 0xFF) + "." + 
            ((addr >>>= 8) & 0xFF) + "." + 
            ((addr >>>= 8) & 0xFF));
}

Source: http://www.devdaily.com/java/jwarehouse/android/core/java/android/net/DhcpInfo.java.shtml

like image 35
rtc11 Avatar answered Oct 27 '22 06:10

rtc11


to format the ip, try using:

import android.text.format.Formatter;

public String FormatIP(int IpAddress)
{
    return Formatter.formatIpAddress(IpAddress);
}
like image 5
Goldeneye Avatar answered Oct 27 '22 06:10

Goldeneye


Use Formatter.formatIpAddress(mask); mask is your int.

String maskk = Formatter.formatIpAddress(mask);
like image 4
Balflear Avatar answered Oct 27 '22 04:10

Balflear