我有一种新的原始套接字,我试图按照this教程。 我可以看到用wireshark传输的数据包很棒。通过原始套接字发送源MAC和IP
但是,该教程中的源mac和源ip缺失,并解释了here和here。
的问题是,当我尝试源MAC复制到已知的结构:
ioctl(fd,SIOCGIFINDEX,&ifr) // fd and ifr already defined
ioctl(fd,SIOCGIFHWADDR,&ifr)
const unsigned char* mac=(unsigned char*)ifr.ifr_hwaddr.sa_data;
printf("my MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n", // prints my mac- works fine
mac[0],mac[1],mac[2],mac[3],mac[4],mac[5]);
memcpy(&req.arp_sha, mac, sizeof(req.arp_sha)); // req is already defined
当我调试代码,mac
包含了实际MAC地址和req.arp_sha
含有别的东西。
我也试过这种方式复制:
req.arp_sha[0] = mac[0];
req.arp_sha[1] = mac[1];
编辑 在Mac IM期待是:08:00:27:E7:56:0B
我得到的MAC是:00:00:0a:00:02:0f
当我与IP相同地址,它工作得很好,我可以在wireshark上看到。
这是IP代码:
ioctl(fd,SIOCGIFADDR,&ifr);
struct sockaddr_in* ipaddr = (struct sockaddr_in*)&ifr.ifr_addr;
const char * myIp = inet_ntoa(ipaddr->sin_addr);
printf("my IP address: %s\n", myIp);
memcpy(&req.arp_spa,&ipaddr->sin_addr,sizeof(req.arp_spa));
我不明白,如果IM在这里做得不对。我会很乐意提供指导。
谢谢。
你期望什么值?你认为哪些值? – Downvoter
我编辑了我的问题..谢谢 – user1673206
不知何故,你的代码是复制一个IP地址到MAC地址插槽,特别是10.0.2.15。你能发布给你麻烦的完整代码片段吗? –