精华内容
下载资源
问答
  • 安卓获取以太网IP地址

    千次阅读 2013-12-05 21:54:35
    闲话不说,直接上代码: public static String getLocalIpAddress() {  try {  for (Enumeration en = NetworkInterface  .getNetworkInterfaces(); en.hasMoreElements();) {

    闲话不说,直接上代码:

    public static String getLocalIpAddress() {  
            try {  
                for (Enumeration<NetworkInterface> en = NetworkInterface  
                        .getNetworkInterfaces(); en.hasMoreElements();) {  
                    NetworkInterface intf = en.nextElement();  
                    for (Enumeration<InetAddress> enumIpAddr = intf  
                            .getInetAddresses(); enumIpAddr.hasMoreElements();) {  
                        InetAddress inetAddress = enumIpAddr.nextElement();  
                        if (!inetAddress.isLoopbackAddress()) {
                        ipAddress = inetAddress.getHostAddress().toString();
                        if(!ipAddress.contains("::"))
                        return inetAddress.getHostAddress().toString();
                        }else
                        continue;
                    }  
                }  
            } catch (SocketException ex) {  
                Log.e(LOGTAG, ex.toString());  
            }  
            return "GetHostIP Fail,Please clear the shareReference";  
        }


    continue 很重要,不然会获得一个IPV6的地址,通过“::”将IPV6地址过滤掉。

    展开全文
  • MAC: private void setEthernetMac() { ... } } private boolean isUsingStaticIp() { return Settings.System.getInt(getContentResolver(), Settings.System.ETHERNET_USE_STATIC_IP, 0) == 1 ? true : false; }

    MAC:

    private void setEthernetMac() {

    BufferedReader reader = null;

    String ethernetMac = getResources()

    .getString(R.string.text_default_mac);

    try {

    reader = new BufferedReader(new FileReader(

    "sys/class/net/eth0/address"));

    ethernetMac = reader.readLine();

    Log.v(TAG, "ethernetMac: " + ethernetMac);

    if (ethernetMac == null || ethernetMac.trim().length() == 0) {

    ethernetMac = getResources().getString(

    R.string.text_default_mac);

    textMac.setTextColor(Color.parseColor("#ff0000"));

    } else {

    ethernetMac = ethernetMac

    + getResources().getString(R.string.text_normal);

    textMac.setTextColor(Color.parseColor("#00ff00"));

    }

    textMac.setText(ethernetMac);

    } catch (Exception e) {

    Log.e(TAG, "open sys/class/net/eth0/address failed : " + e);

    } finally {

    try {

    if (reader != null)

    reader.close();

    } catch (IOException e) {

    Log.e(TAG, "close sys/class/net/eth0/address failed : " + e);

    }

    }

    }

    IP:

    private String getEthernetIp() {

    String mEthIpAddress;

    if (!isUsingStaticIp()) {

    EthernetManager mEthManager = (EthernetManager) getSystemService(Context.ETHERNET_SERVICE);

    String tempIpInfo;

    String iface = mEthManager.getEthernetIfaceName();

    tempIpInfo = SystemProperties.get("dhcp." + iface + ".ipaddress");

    if ((tempIpInfo != null) && (!tempIpInfo.equals(""))) {

    mEthIpAddress = tempIpInfo;

    } else {

    mEthIpAddress = getResources().getString(

    R.string.text_default_ip);

    }

    return mEthIpAddress;

    } else {

    return Settings.System.getString(getContentResolver(),

    Settings.System.ETHERNET_STATIC_IP);

    }

    }

    private boolean isUsingStaticIp() {

    return Settings.System.getInt(getContentResolver(),

    Settings.System.ETHERNET_USE_STATIC_IP, 0) == 1 ? true : false;

    }

    展开全文
  • C#获取当前电脑的ARP表,然后筛选出以太网的ARP表(通过以太网IP地址和掩码来计算),即通过以太网访问的设备IP和MAC地址。 完整的C#代码,vs2008工程,可编译和测试。注意:测试电脑只有一个以太网卡,如果电脑有多...
  • Android 获取以太网Mac地址和IP地址

    万次阅读 2016-01-29 16:11:57
    tempIpInfo = SystemProperties.get("dhcp." + iface + ".ipaddress"); if ((tempIpInfo != null) && (!tempIpInfo.equals(""))) { mEthIpAddress = tempIpInfo; } else { mEthIpAddress = ...

    MAC:

    private void setEthernetMac() {
    		BufferedReader reader = null;
    		String ethernetMac = getResources()
    				.getString(R.string.text_default_mac);
    		try {
    			reader = new BufferedReader(new FileReader(
    					"sys/class/net/eth0/address"));
    			ethernetMac = reader.readLine();
    			Log.v(TAG, "ethernetMac: " + ethernetMac);
    			if (ethernetMac == null || ethernetMac.trim().length() == 0) {
    				ethernetMac = getResources().getString(
    						R.string.text_default_mac);
    				textMac.setTextColor(Color.parseColor("#ff0000"));
    			} else {
    				ethernetMac = ethernetMac
    						+ getResources().getString(R.string.text_normal);
    				textMac.setTextColor(Color.parseColor("#00ff00"));
    			}
    			textMac.setText(ethernetMac);
    		} catch (Exception e) {
    			Log.e(TAG, "open sys/class/net/eth0/address failed : " + e);
    		} finally {
    			try {
    				if (reader != null)
    					reader.close();
    			} catch (IOException e) {
    				Log.e(TAG, "close sys/class/net/eth0/address failed : " + e);
    			}
    		}
    
    	}

    IP:

    private String getEthernetIp() {
    		String mEthIpAddress;
    
    		if (!isUsingStaticIp()) {
    
    			EthernetManager mEthManager = (EthernetManager) getSystemService(Context.ETHERNET_SERVICE);
    
    			String tempIpInfo;
    			String iface = mEthManager.getEthernetIfaceName();
    
    			tempIpInfo = SystemProperties.get("dhcp." + iface + ".ipaddress");
    			if ((tempIpInfo != null) && (!tempIpInfo.equals(""))) {
    				mEthIpAddress = tempIpInfo;
    			} else {
    				mEthIpAddress = getResources().getString(
    						R.string.text_default_ip);
    			}
    			return mEthIpAddress;
    
    		} else {
    			return Settings.System.getString(getContentResolver(),
    					Settings.System.ETHERNET_STATIC_IP);
    		}
    	}
    
    	private boolean isUsingStaticIp() {
    		return Settings.System.getInt(getContentResolver(),
    				Settings.System.ETHERNET_USE_STATIC_IP, 0) == 1 ? true : false;
    	}



    展开全文
  • 判断网络是否可用: 注意!是判断网络是否可用,但网络可用不代表一定能上外网的! public static boolean isNetworkAvailable(Context context) { ConnectivityManager manager = (ConnectivityManager) context...
  • 然后在系统设置页面有个以太网菜单可以进行IP、网关等设置,如下: 二、那怎么通过代码去设置呢? 1、Android系统在Framework层是有提供操作以太网Api的也就是android.net.EthernetManager,但是Google把Api给隐藏...

    一、对于一些工控行业的Android主板一般都会扩展个以太网接口,也就是可以插网线进行上网;然后在系统设置页面有个以太网菜单可以进行IP、网关等设置,如下:

    在这里插入图片描述
    在这里插入图片描述

    二、那怎么通过代码去设置呢?

    1、Android系统在Framework层是有提供操作以太网Api的也就是android.net.EthernetManager,但是Google把Api给隐藏了;所以最终你是调用不了的
    在这里插入图片描述
    2、那需要怎么操作才能调用到隐藏的Api呢?相信你肯定会立马想到使用反射去调用;对,没错!这里我就是使用的这个方式;当然如果你公司系统层也是自己搞的话就更简单了

    三、先假装如果可以调用到android.net.EthernetManager的Api,那么代码应该怎么写呢?

    • 设置静态IP地址, new LinkAddress()报错是因为源码@hide了
      在这里插入图片描述

    • 设置动态ip地址

    在这里插入图片描述

    四、接下来就是通反射去调用了,代码量就比上面多的多了

    /**
     * 文件名:    EthernetUtil
     * 创建时间:  2020/8/21 on 11:22
     * 描述:     TODO 设置以太网静态ip 动态ip地址
     *
     * @author 阿钟
     */
    
    public class EthernetUtil {
    
        /**
         * 设置以太网动态获取IP
         */
        public static boolean setDynamicIp(Context context) {
            try {
                Class<?> ethernetManagerCls = Class.forName("android.net.EthernetManager");
                //获取EthernetManager实例
                Object ethManager = context.getSystemService("ethernet");
                //创建IpConfiguration
                Class<?> ipConfigurationCls = Class.forName("android.net.IpConfiguration");
                Object ipConfiguration = ipConfigurationCls.newInstance();
                //获取ipAssignment、proxySettings的枚举值
                Map<String, Object> ipConfigurationEnum = getIpConfigurationEnum(ipConfigurationCls);
                //设置ipAssignment
                Field ipAssignment = ipConfigurationCls.getField("ipAssignment");
                ipAssignment.set(ipConfiguration, ipConfigurationEnum.get("IpAssignment.DHCP"));
                //设置proxySettings
                Field proxySettings = ipConfigurationCls.getField("proxySettings");
                proxySettings.set(ipConfiguration, ipConfigurationEnum.get("ProxySettings.NONE"));
                //获取EthernetManager的setConfiguration()
                Method setConfigurationMethod = ethernetManagerCls.getDeclaredMethod("setConfiguration", ipConfiguration.getClass());
                //设置动态IP
                setConfigurationMethod.invoke(ethManager, ipConfiguration);
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    
        /**
         * 设置以太网静态IP地址
         *
         * @param address ip地址
         * @param mask    子网掩码
         * @param gate    网关
         * @param dns     dns
         */
        public static boolean setEthernetStaticIp(Context context, String address, String mask, String gate, String dns) {
            try {
                Class<?> ethernetManagerCls = Class.forName("android.net.EthernetManager");
                //获取EthernetManager实例
                Object ethManager = context.getSystemService("ethernet");
                //创建StaticIpConfiguration
                Object staticIpConfiguration = newStaticIpConfiguration(address, gate, mask, dns);
                //创建IpConfiguration
                Object ipConfiguration = newIpConfiguration(staticIpConfiguration);
                //获取EthernetManager的setConfiguration()
                Method setConfigurationMethod = ethernetManagerCls.getDeclaredMethod("setConfiguration", ipConfiguration.getClass());
                //保存静态ip设置
                saveIpSettings(context, address, mask, gate, dns);
                //设置静态IP
                setConfigurationMethod.invoke(ethManager, ipConfiguration);
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }
    
    
        /**
         * 获取StaticIpConfiguration实例
         */
        private static Object newStaticIpConfiguration(String address, String gate, String mask, String dns) throws Exception {
            Class<?> staticIpConfigurationCls = Class.forName("android.net.StaticIpConfiguration");
            //实例化StaticIpConfiguration
            Object staticIpConfiguration = staticIpConfigurationCls.newInstance();
            Field ipAddress = staticIpConfigurationCls.getField("ipAddress");
            Field gateway = staticIpConfigurationCls.getField("gateway");
            Field domains = staticIpConfigurationCls.getField("domains");
            Field dnsServers = staticIpConfigurationCls.getField("dnsServers");
            //设置ipAddress
            ipAddress.set(staticIpConfiguration, newLinkAddress(address, mask));
            //设置网关
            gateway.set(staticIpConfiguration, InetAddress.getByName(gate));
            //设置掩码
            domains.set(staticIpConfiguration, mask);
            //设置dns
            ArrayList<InetAddress> dnsList = (ArrayList<InetAddress>) dnsServers.get(staticIpConfiguration);
            dnsList.add(InetAddress.getByName(dns));
            return staticIpConfiguration;
        }
    
        /**
         * 获取LinkAddress实例
         */
        private static Object newLinkAddress(String address, String mask) throws Exception {
            Class<?> linkAddressCls = Class.forName("android.net.LinkAddress");
            Constructor<?> linkAddressConstructor = linkAddressCls.getDeclaredConstructor(InetAddress.class, int.class);
            return linkAddressConstructor.newInstance(InetAddress.getByName(address), getPrefixLength(mask));
        }
    
        /**
         * 获取IpConfiguration实例
         */
        private static Object newIpConfiguration(Object staticIpConfiguration) throws Exception {
            Class<?> ipConfigurationCls = Class.forName("android.net.IpConfiguration");
            Object ipConfiguration = ipConfigurationCls.newInstance();
            //设置StaticIpConfiguration
            Field staticIpConfigurationField = ipConfigurationCls.getField("staticIpConfiguration");
            staticIpConfigurationField.set(ipConfiguration, staticIpConfiguration);
            //获取ipAssignment、proxySettings的枚举值
            Map<String, Object> ipConfigurationEnum = getIpConfigurationEnum(ipConfigurationCls);
            //设置ipAssignment
            Field ipAssignment = ipConfigurationCls.getField("ipAssignment");
            ipAssignment.set(ipConfiguration, ipConfigurationEnum.get("IpAssignment.STATIC"));
            //设置proxySettings
            Field proxySettings = ipConfigurationCls.getField("proxySettings");
            proxySettings.set(ipConfiguration, ipConfigurationEnum.get("ProxySettings.STATIC"));
            return ipConfiguration;
        }
    
        /**
         * 获取IpConfiguration的枚举值
         */
        private static Map<String, Object> getIpConfigurationEnum(Class<?> ipConfigurationCls) {
            Map<String, Object> enumMap = new HashMap<>();
            Class<?>[] enumClass = ipConfigurationCls.getDeclaredClasses();
            for (Class<?> enumC : enumClass) {
                Object[] enumConstants = enumC.getEnumConstants();
                if (enumConstants == null) continue;
                for (Object enu : enumConstants) {
                    enumMap.put(enumC.getSimpleName() + "." + enu.toString(), enu);
                }
            }
            return enumMap;
        }
    
        /**
         * 保存静态ip设置
         */
        private static void saveIpSettings(Context context, String address, String mask, String gate, String dns) {
            ContentResolver contentResolver = context.getContentResolver();
            Settings.Global.putString(contentResolver, "ethernet_static_ip", address);
            Settings.Global.putString(contentResolver, "ethernet_static_mask", mask);
            Settings.Global.putString(contentResolver, "ethernet_static_gateway", gate);
            Settings.Global.putString(contentResolver, "ethernet_static_dns1", dns);
        }
    
        /**
         * 获取长度
         */
        private static int getPrefixLength(String mask) {
            String[] strs = mask.split("\\.");
            int count = 0;
            for (String str : strs) {
                if (str.equals("255")) {
                    ++count;
                }
            }
            return count * 8;
        }
    }
    
    • 使用只需调用方法即可:
    //设置静态ip
    EthernetUtil.setEthernetStaticIp(context, "192.168.5.33", "255.255.255.0", "192.168.5.1", "8.8.8.8");
    //设置动态获取ip
    EthernetUtil.setDynamicIp(context)
    

    最后:这个代码本人在Android7.0的原生系统验证是可以使用的,有需要的可以使用试试EthernetUtil源码下载地址

    展开全文
  • 互联层通过IP地址指定报文的始发地和目的地 低层物理网络使用物理地址表达帧的源和宿 地址解析协议ARP 以太网使用ARP将IP地址与MAC地址进行动态映射 以太网具有固定长度的MAC地址和广播能力
  • 局域网的配置,之前查找了很多方法都是关于EthernetManager(已隐藏,无法...获取以太网的连接信息 1.获取所有有效网关 /** * @return 获取所有有效的网卡 */ public static String[] getAllNetInterface() { ...
  • 施耐德Quantum、Premium/Twido和M340系列PLC的以太网端口如果没有配置IP地址,那么该设备的缺省IP可以通过MAC地址转化得到。 例如,如果以太网端口的MAC地址为00.00.54.10.11.12,那么这三种PLC的以太网端口的缺省...
  • 代码下载地址:https://pan.baidu.com/s/15-LLGdTA46jgDyqQcx6SUA  上次写过一遍这一篇的,复制粘贴时studio,有背景色,好... 1:开机自启,每30秒去检测当前的网络状态 ,因为我的需求是以太网,所有其他的网络...
  • HELLO,我在调试安卓设备时发现当路由器重启后,设备获取不到IP地址(使用的DHCP),通过抓包工具发现,安卓设备的discover包在路由器还没有完全起来之前就已经发送完毕,并且后续一直都没有discover包发出

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 546
精华内容 218
关键字:

以太网ip地址获取