Android 獲取Ethernet IP、mask、dns、gw、mac

package android.net.ethernet;

import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.util.Enumeration;
import java.util.List;
import android.net.ConnectivityManager;

public class EthernetInfo {
final String TAG = "EthernetInfo";
public String ipAddress = null;
public String maskAddress = null;
public String gatewayAddress = null;
public String dns1Address = null;
public String dns2Address = null;


public void getInfo(ConnectivityManager mConnectivityManager) {
ipAddress = null;
maskAddress = null;
gatewayAddress = null;
dns1Address = null;
dns2Address = null;
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
List<InterfaceAddress> mList = intf.getInterfaceAddresses();
for (InterfaceAddress l : mList) {
InetAddress inetAddress = l.getAddress();
if (!inetAddress.isLoopbackAddress()) {
String hostAddress = inetAddress.getHostAddress();
if (hostAddress.indexOf(":") > 0) {
// case : ipv6
continue;
} else {

ipAddress = hostAddress;
if(ipAddress ==null){
ipAddress = "";
}
maskAddress = calcMaskByPrefixLength(l
.getNetworkPrefixLength());
if(maskAddress == null){
maskAddress = "";
}
String mGW = mConnectivityManager
.getLinkProperties(
ConnectivityManager.TYPE_ETHERNET)
.getRoutes().toString();
if (mGW.contains(">")) {
gatewayAddress = mGW.substring(
mGW.lastIndexOf('>') + 2,
mGW.length() - 1);
}
if(gatewayAddress == null){
gatewayAddress = "";
}
String mDNS = mConnectivityManager
.getLinkProperties(
ConnectivityManager.TYPE_ETHERNET)
.getDnses().toString();
// Log.e(TAG, "dns=" + mDNS);
if (mDNS.contains(",")) {
dns1Address = mDNS.substring(2,
mDNS.lastIndexOf(","));
dns2Address = mDNS.substring(
mDNS.lastIndexOf(",") + 3,
mDNS.length() - 1);
}
if(dns1Address ==null || dns2Address == null){
dns1Address = "";
dns2Address = "";

}
// Log.e(TAG, "dns1=" + dns1Address);
// Log.e(TAG, "dns2=" + dns2Address);

}
}
}
}
} catch (Exception e) {
}
}


private String calcMaskByPrefixLength(int length) {
int mask = -1 << (32 - length);
int partsNum = 4;
int bitsOfPart = 8;
int maskParts[] = new int[partsNum];
int selector = 0x000000ff;


for (int i = 0; i < maskParts.length; i++) {
int pos = maskParts.length - 1 - i;
maskParts[pos] = (mask >> (i * bitsOfPart)) & selector;
}


String result = "";
result = result + maskParts[0];
for (int i = 1; i < maskParts.length; i++) {
result = result + "." + maskParts[i];
}
return result;
}

}


2、需要獲取MAC地址的話,在底層發現了這個:

IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
        mNMService = INetworkManagementService.Stub.asInterface(b);
try{
InterfaceConfiguration config = mNMService.getInterfaceConfig("eth0");  //這個eth0是網口端號,實際上也可以用代碼來獲取;
mHwAddr = config.getHardwareAddress(); //mHwAddr  String類型
}catch (RemoteException e) {
             Slog.v(TAG, "Could not get list of interfaces " + e);
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章