求助大佬们, 关于获取mac地址的问题

如下图所示:

通过IDA反编译后的伪代码, 有前辈能看懂是什么意思吗, 这种通过socket(17,3,0) 经过write, read 函数 , 是如何得到mac地址的, 希望前辈指点一下

路由套接字?

好像是的…

没记错的话, 这是抖音吧

http://man7.org/linux/man-pages/man2/socket.2.html

你要是会查下文档, 就能知道取值的意思

socket(AF_ROUTE, SOCK_RAW, 0)

拿关键字再搜一下

https://www.freebsd.org/cgi/man.cgi?query=route&sektion=4&manpath=netbsd
https://stackoverflow.com/questions/41283688/mac-addresses-in-ios-10-2

int sockfd;
unsigned char buf[BUFLEN];
unsigned char buf2[BUFLEN];
ssize_t n;
struct rt_msghdr *rtm;
memset(buf,0,sizeof(buf));
memset(buf2,0,sizeof(buf2));
sockfd = socket(AF_ROUTE, SOCK_RAW, 0);
rtm = (struct rt_msghdr *) buf;
rtm->rtm_msglen = sizeof(struct rt_msghdr) + sizeof(struct sockaddr_in);
rtm->rtm_version = RTM_VERSION;
rtm->rtm_type = RTM_GET;
rtm->rtm_addrs = 33;

write(sockfd, rtm, rtm->rtm_msglen);

do {
    n = read(sockfd, buf2, BUFLEN);
} while (rtm->rtm_type != RTM_GET);


int i =0;
while (i<BUFLEN)
{
    if(buf2[i]==101&&buf2[i+1]==110&&buf2[i+2]==48)
    {
        NSLog(@"-----index:%d-----",i+2);
        NSLog(@"---orig--sk-:: %0.2X:%0.2X:%0.2X:%0.2X:%0.2X:%0.2X",buf2[i+3], buf2[i+4], buf2[i+5], buf2[i+6], buf2[i+7],buf2[i+8]);
        buf2[i+3] = 0x33;
        NSLog(@"---new--sk---:: %0.2X:%0.2X:%0.2X:%0.2X:%0.2X:%0.2X",buf2[i+3], buf2[i+4], buf2[i+5], buf2[i+6], buf2[i+7],buf2[i+8]);
    }
    i++;
}

前辈, 我按照文章 发现他封装的函数 -(void) jan_mac_addr_test:(const char*) host , 这个host我传了本机局域网ip(192.168.xx.xx) 或者 127.0.0.1 或者外网ip , 都得到的结果是 00:00:00:00:00:00 , 是我host没传对吗, 还是什么问题

前辈, 你封装的这个函数可以得到准确mac地址。但是我比较了一下, 你的read函数第三个参数传的字节数632 , 可以通过这样的while循环拿到mac地址, 但是上图伪代码read函数的第三个参数是604, 通过这样的循环却拿不到mac地址, 这是为什么呢

我不懂,我就是看上面的伪代码写的。

前辈, 你是怎么把v20,v136… 这些变量还原成对应的结构体的 , 可以讲解一下思路吗