本文的目的是介绍查询ARP缓存以获取MACID的详细情况,特别关注如何查询arp缓存表的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解查询ARP缓存以获取MACID的
本文的目的是介绍查询ARP缓存以获取MAC ID的详细情况,特别关注如何查询arp缓存表的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解查询ARP缓存以获取MAC ID的机会,同时也不会遗漏关于android 获取mac地址、Android 获取MAC地址最靠谱的方法。、Android查询phonenumber以获取rawcontactID、APICloud 获取缓存以及清除缓存(常用第三方方法)的知识。
本文目录一览:- 查询ARP缓存以获取MAC ID(如何查询arp缓存表)
- android 获取mac地址
- Android 获取MAC地址最靠谱的方法。
- Android查询phonenumber以获取rawcontactID
- APICloud 获取缓存以及清除缓存(常用第三方方法)
查询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地址的两种方式,适用于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地址最靠谱的方法。
众所周知在安卓开发中,我们经常使用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
我唯一知道的联系是给定的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 获取缓存以及清除缓存(常用第三方方法)
一、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 获取缓存以及清除缓存(常用第三方方法)的相关信息,可以在本站进行搜索。
本文标签: