如下图所示:
通过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… 这些变量还原成对应的结构体的 , 可以讲解一下思路吗