我需要找到一个解决方案,如何从WiFi网络中的其他设备获取MAC地址.有一个很好的方法如何为IPv4执行此操作(iOS应用程序如何获取MAC地址?),但如何为IPv6执行此操作?由于ARP被NDP(邻居发现协议)取代,后一种方法不起作用.如果有人能帮助我,我将不胜感激.
我是iPhone开发的新手,我想在我的应用程序中集成wake-on-lan而不会挤压我的用户在知道IP时输入计算机MAC地址.我用谷歌搜索了几个小时,拿了一个ARP工具的源代码,但我不知道如何在iPhone上管理它.
好的 - 我正在Objective C中编写一个守护进程,它每5秒检查一次连接的路由器mac地址.
我对目标C完全不熟悉,我正在寻找一种更好的方法来做我已经在做的事情.
我正在调用"arp -a"并通过"Task"解析结果:
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath: @"/usr/sbin/arp"];
NSArray *arguments;
arguments = [NSArray arrayWithObjects: @"-a", nil];
[task setArguments: arguments];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
Run Code Online (Sandbox Code Playgroud)
我担心这不是很有效率.
有什么建议?我每5秒运行一次这个代码块.
我想在我的iPad上获取ARP条目,就像这里一样.
当编译代码在我的iPad上运行(所以不是模拟器)时,我会丢失标题错误消息.到您在此提到的本地项目,你可以通过复制的头文件解决这些问题后.
问题在于线
sdl =(struct sockaddr_dl*)(sin + 1);
在这段代码中:
-(NSString*) ip2mac: (char*) ip
{
int expire_time, flags, export_only, doing_proxy, found_entry;
NSString *mAddr = nil;
u_long addr = inet_addr(ip);
int mib[6];
size_t needed;
char *host, *lim, *buf, *next;
struct rt_msghdr *rtm;
struct sockaddr_inarp *sin;
struct sockaddr_dl *sdl;
extern int h_errno;
struct hostent *hp;
mib[0] = CTL_NET;
mib[1] = PF_ROUTE;
mib[2] = 0;
mib[3] = AF_INET;
mib[4] = NET_RT_FLAGS;
mib[5] = RTF_LLINFO;
if (sysctl(mib, 6, NULL, &needed, NULL, …Run Code Online (Sandbox Code Playgroud) 我正在扫描我的本地网络,我正在获取他们的 IP 和 MAC 地址,但我还想要设备名称,例如“Hassan's Iphone”和设备类型,所以请帮助我如何获取此信息。
提前致谢
ios ×4
mac-address ×3
arp ×2
iphone ×2
objective-c ×2
xcode ×2
bash ×1
ip-address ×1
ipv6 ×1
macos ×1
tvos ×1