IP로 MacAddress아는방법...
arp테이블에 없는것은 어떻게 맥어드레스를 확인해야하나요.
ping을 날리고 나서 하면 arp테이블에 올라오니까 확인해서 읽어오는데 arp테이블에 없을경우에는 맥어드레스를 읽어오는 것을 실패합니다.
테스트 소스
int sockfd=0;
char macaddress[50];
struct sockaddr_in sin = { 0 };
struct arpreq myarp = { { 0 } };
unsigned char *ptr=0;
sin.sin_family = AF_INET;
if (inet_aton (ip, &sin.sin_addr) == 0) {
return -1;
}
memcpy (&myarp.arp_pa, &sin, sizeof myarp.arp_pa);
strcpy (myarp.arp_dev, "eth0");
if ((sockfd = socket (AF_INET, SOCK_DGRAM, 0)) == -1) {
return 0;
}
if (ioctl(sockfd, SIOCGARP, &myarp) == -1) {
close(sockfd);
return -1;
}
ptr = &myarp.arp_ha.sa_data [0];
sprintf(macaddress,"%x:%x:%x:%x:%x:%x\n",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));
MAC address를 알고자 하는 IP에 ARP Request 패킷을
MAC address를 알고자 하는 IP에 ARP Request 패킷을 만들어서 쏜 후, ARP Reply를 받아서 확인해 보세요. 소스는 arping 프로그램을 참조하시면 됩니다.
어두운 밤에 움직이지 않는 꽃과 개와 물,
어두운 밤에 꽃과 짖는개와 물.
감사합니다.
우선은 system함수를 이용해서 이렇게 임의로 command를 만들어 ping을 날려 작업은 했습니다.
snprintf(cmd, sizeof(cmd), "ping -c 1 %s", ip);
system(cmd);
다시한번 답변 감사합니다.
댓글 달기