wake-up-neo.com

Programmgesteuertes Abrufen der Gateway- und Subnetzmaskendetails

Wie kann ich in Android Details zu Gateway und Subnetzmaske abrufen?

37
Arun Abraham

Ich habe eine Klasse namens DhcpInfo im Paket Android.net Gefunden. Es hat einige öffentliche Variablen, die die Werte der aktuellen Netzwerkparameter speichern. Das Problem ist jedoch, dass sie den Wert in Ganzzahl zurückgeben, der aus 8-Bit-verschobenen Binärdaten konvertiert wurde.

Beispielbild, das das Szenario beschreibt:

enter image description here

**** Hier ist ein Beispielcode: **

** Java-Datei: ****

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-Codierung:

<?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>

Ich habe versucht, den ganzzahligen Wert in den entsprechenden Wert umzuwandeln, konnte dies jedoch nicht. Wenn Sie dies tun, können Sie zurück posten .. Tschüss ..

UPDATE: Einige Möglichkeiten zum Konvertieren der IP in das v4-Format aus der Ganzzahlform Konvertierung in das 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

76
Anoop CH

Formatter.formatIpAddress (int) ist veraltet und wir möchten keine veralteten Methoden verwenden, oder?

Die Version von AndroidKid ist irgendwie umgekehrt, aber dies sollte das Problem beheben:

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

Quelle: http://www.devdaily.com/Java/jwarehouse/Android/core/Java/Android/net/DhcpInfo.Java.shtml

11
rtc11

versuchen Sie zum Formatieren der IP Folgendes:

import Android.text.format.Formatter;

public String FormatIP(int IpAddress)
{
    return Formatter.formatIpAddress(IpAddress);
}
5
Goldeneye

Benutze Formatter.formatIpAddress(mask); mask ist dein Int.

String maskk = Formatter.formatIpAddress(mask);
3
Balflear

Anstatt 255.255.255.0 zu erhalten, ändern Sie einfach die Reihenfolge im Gegenzug;) Damit Sie in der Lage sind, die richtige Reihenfolge zu erhalten ...

public String intToIp(int i) {

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

Dies ist ein alter Thread, aber ich habe die offizielle Funktion gefunden, die von Android API (package Android.net.NetworkUtils) Verwendet wird:

/**
 * Convert a IPv4 address from an integer to an InetAddress.
 * @param hostAddress an int corresponding to the IPv4 address in network byte order
 */
public static InetAddress intToInetAddress(int hostAddress) {
    byte[] addressBytes = { (byte)(0xff & hostAddress),
                            (byte)(0xff & (hostAddress >> 8)),
                            (byte)(0xff & (hostAddress >> 16)),
                            (byte)(0xff & (hostAddress >> 24)) };

    try {
       return InetAddress.getByAddress(addressBytes);
    } catch (UnknownHostException e) {
       throw new AssertionError();
    }
}

Und sobald Sie InetAddress haben, können Sie den formatierten String folgendermaßen erhalten:

intToInetAddress(d.gateway).getHostAddress()

0
M1n1_Z