GVKun编程网logo

查询ARP缓存以获取MAC ID(如何查询arp缓存表)

15

本文的目的是介绍查询ARP缓存以获取MACID的详细情况,特别关注如何查询arp缓存表的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解查询ARP缓存以获取MACID的

本文的目的是介绍查询ARP缓存以获取MAC ID的详细情况,特别关注如何查询arp缓存表的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解查询ARP缓存以获取MAC ID的机会,同时也不会遗漏关于android 获取mac地址、Android 获取MAC地址最靠谱的方法。、Android查询phonenumber以获取rawcontactID、APICloud 获取缓存以及清除缓存(常用第三方方法)的知识。

本文目录一览:

查询ARP缓存以获取MAC ID(如何查询arp缓存表)

查询ARP缓存以获取MAC ID(如何查询arp缓存表)

我需要获取网络中主机的MAC ID。为此,如果我ping通该IP并查询ARP缓存arp -a,则可以获取MAC
ID。我只是想知道是否可以获取任何API来查询ARP并获取MAC ID。

另外,如果有更好的方法可以从IP地址获取MAC ID,请提出建议。

PS:我在JAVA工作。

谢谢。

答案1

小编典典

Java没有提供直接的方法来查询网络中主机的MAC地址,因为Java的套接字库已将其抽象出来。

从某种意义上说,这很有意义,因为主机的MAC地址实际上很少说。没有诸如主机的“ the” MAC地址之类的东西。

  • 许多主机将具有多个NIC,所有NIC都具有单独的MAC地址,通过它们它们可以连接到网络。目前,我使用的计算机具有有线以太网适配器,WiFi适配器和Firewire适配器,并且它们都有自己的MAC地址。这意味着主机没有确定的MAC地址。
  • 如果主机位于其他子网中,则ARP实际上会为您提供数据包经过的最后一个路由器的MAC地址,而不是您正在扫描的主机的MAC地址。

将这两个问题放在一起,这意味着一台主机可能具有许多不同的MAC地址(如果它具有多个NIC),而一台MAC地址可能代表了许多不同的主机(如果流量通过路由器)。

假设您了解所有这些信息,并且仍然需要获取主机的MAC地址,那么在Java中做到这一点的唯一方法是“本地化”:

  • 本机运行程序的客户端:
    • 您可以启动ARP命令行工具并解析其输出。
    • 您可以使用某种JNI调用。不过,我对JNI不太熟悉,因此我无法为您提供帮助。
    • 编写一个单独的小型本机应用程序,您可以通过Telnet或某些此类协议从Java访问该应用程序,该应用程序将为您运行ARP命令。
  • 本机到您要扫描的主机:
    • 您可以使用SNMP,如对该线程的其他一些答案所建议。我遵照这些答案为您工作。SNMP是一个很棒的协议,但是请注意,SNMP的OID既可以依赖于平台,也可以依赖于供应商。适用于Windows的OID并不总是适用于Linux,反之亦然。
    • 如果您知道主机运行Windows,则可以使用WMI。该Win32_NetworkAdapter类拥有你想要的信息,但要注意,这将返回 所有 的主机网卡,即使是那些视窗组成。另外,它还需要您要扫描的主机的管理员凭据。Google会告诉您如何从Java连接到WMI。
    • 如果知道主机运行OS X,则可以通过SSH进入计算机并解析system_profile命令的输出。
    • 对于Linux,system_profile可能存在类似于OS X的工具。

android 获取mac地址

android 获取mac地址

android获取Mac地址的两种方式,适用于6.0版本以下

public static String tryGetWifiMac(Context context) {
    WifiManager wm = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    WifiInfo wi = wm.getConnectionInfo();
    if (wi == null || wi.getMacAddress() == null) {
        return null;
    }
    if ("02:00:00:00:00:00".equals(wi.getMacAddress().trim())) {
        return null;
    } else {
        return wi.getMacAddress().trim();
    }
}

public static String getMac() {
    String mac = null;
    StringBuffer fileData = new StringBuffer(16);

    try {
        BufferedReader reader;
        reader = new BufferedReader(new FileReader("/sys/class/net/wlan0/address"));

        char[] buf = new char[16];
        boolean var5 = false;

        int numRead;
        while ((numRead = reader.read(buf)) != -1) {
            String readData = String.valueOf(buf, 0, numRead);
            fileData.append(readData);
        }

        reader.close();
        mac = fileData.toString();
    } catch (FileNotFoundException var7) {
        var7.printStackTrace();
    } catch (IOException var8) {
        var8.printStackTrace();
    }
    if (TextUtils.isEmpty(mac)) {
        return "uy0iTYfVGkhpC3yi";
    } else {
        mac = mac.replaceAll("\\\\n", "").replaceAll("\\n", "").trim();
        return mac;
    }
}

Android 获取MAC地址最靠谱的方法。

Android 获取MAC地址最靠谱的方法。

       众所周知在安卓开发中,我们经常使用WifiManager获取MAC地址做设备映射,但会出现这样那样的问题,比如说开了WIFI获取不到地址了、不开WIFI获取不到地址了、刚开机获取不到地址了、网卡未启动获取不到地址了。综上所述最靠谱的方法还是直接用busybox读取系统文件中的MAC地址比较稳妥。

   public String getMacAddress() {
        String result = "";
        String Mac = "";
        result = callCmd("busybox ifconfig", "HWaddr");

        if (result == null) {
            return "网络出错,请检查网络";
        }
        if (result.length() > 0 && result.contains("HWaddr")) {
            Mac = result.substring(result.indexOf("HWaddr") + 6, result.length() - 1);
            if (Mac.length() > 1) {
                result = Mac.toLowerCase();
            }
        }
        return result.trim();
    }

Android查询phonenumber以获取rawcontactID

Android查询phonenumber以获取rawcontactID

我想查询phonenumber以获取rawcontactID.

我唯一知道的联系是给定的phonenumber,但对于我的功能,我需要有rawcontactID.我有一个工作代码,但现在我确实使用了2个单独的查询.我想要的是1个查询,可以同时保存一些查询时间.

我的代码:

Uri uri = Uri.withAppendedpath(Phone.CONTENT_FILTER_URI,Uri.encode(phoneNumber));       
    String[] columns = new String[]{Phone.CONTACT_ID,Phone.disPLAY_NAME,Phone.NUMBER,Phone._ID };     
    Cursor cursor = contentResolver.query(uri,columns,null,null); 

if(cursor!=null) { 
    int clenght = cursor.getCount();
    while(cursor.movetoNext()){ 
     //contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.disPLAY_NAME)); 
     id = cursor.getString(cursor.getColumnIndex(Phone.CONTACT_ID)); 

    } 
    cursor.close(); 
}

Cursor pCur = contentResolver.query(ContactsContract.Data.CONTENT_URI,new String[]{ContactsContract.Data.RAW_CONTACT_ID},ContactsContract.Data.CONTACT_ID+" = "+ id,null); 
if(pCur!=null) { 
    int clenght = pCur.getCount();
    while(pCur.movetoNext()){ 
     //contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.disPLAY_NAME)); 
     id = pCur.getString(pCur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)); 

    } 
    pCur.close(); 
}

提前致谢

编辑:

我上面的代码工作正常,但我仍在寻找大量联系人的增加速度.因此,如果有人提供解决方案来结合我的查询,我会给予赏金.

解决方法

private String[] getRawContactIdFromNumber(String givennumber){
        List<String> rawIds = new ArrayList<String>();
        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,new String[]{ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID},ContactsContract.CommonDataKinds.Phone.NUMBER + "=''"+ givennumber +"''",ContactsContract.CommonDataKinds.Phone.NUMBER);

        while (phones.movetoNext())
        {
          rawIds.add( phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID)));
          Log.v("contacts","Given Number: " + givennumber + "Raw ID: " +rawIds.get(rawIds.size() - 1));
        }
        phones.close();
        String[] ret = new String[0];

        return rawIds.toArray(ret);
    }

编辑为仅包含光标中的原始id以提高效率.如果多个联系人具有相同的号码,也会将返回类型更改为数组.

APICloud 获取缓存以及清除缓存(常用第三方方法)

APICloud 获取缓存以及清除缓存(常用第三方方法)

一、app中经常会有缓存的清除这个操作,具体如下

1、获取缓存大小

apiready = function() {
        api.getCacheSize(function(ret, err) {
            //size:        //缓存大小,单位为Byte,数字类型。(-1:无存储设备、-2:正在准备USB存储设备、-3:无法访问存储设备)
            var size = parseInt(ret.size/1024) + ''KB'';
            var cacheSize = $api.byId(''cacheSize'');
            cacheSize.innerHTML = size;

        });
    };

2、清除缓存方法

function clearnCach(){
        api.clearCache(function() {
            api.toast({
                msg: ''清除完成''
            });
        });
        api.getCacheSize(function(ret, err) {
            var size = parseInt(ret.size/1024) + ''KB'';
            var cacheSize = $api.byId(''cacheSize'');
            cacheSize.innerHTML = size;
        });
    };

 二、拨打电话

//拨打电话
    function takePhone() {
        api.call({
            number:''029-83670111''
        });
    };

 三、检测版本更新

//版本更新
    function fnCheckUpdate () {
        var mam = api.require(''mam'');
        mam.checkUpdate(function(ret, err){
            if (ret && ret.status) {
                if(!ret.result.update){
                    api.alert({
                        title: ''版本更新'', 
                        msg: ''当前已是最新版本,版本号:'' + api.appVersion
                    });
                } else {
                    api.confirm({
                        title: ''有新版本'',
                        msg: ''已发布最新版本,建议您尽快更新。版本号:'' + ret.result.version,
                        buttons:[''马上更新'', ''以后再说'']
                    },function(ret,err){
                        if(ret.buttonIndex == 1){
                            alert(''点击了马上更新'');
                        }
                    });
                }
            }
        });
    }

 

我们今天的关于查询ARP缓存以获取MAC ID如何查询arp缓存表的分享就到这里,谢谢您的阅读,如果想了解更多关于android 获取mac地址、Android 获取MAC地址最靠谱的方法。、Android查询phonenumber以获取rawcontactID、APICloud 获取缓存以及清除缓存(常用第三方方法)的相关信息,可以在本站进行搜索。

本文标签: