如何在程序中实现对端口读写从而直接获取MAC地址?

来源:百度文库 编辑:神马文学网 时间:2024/03/29 15:50:10
输入IP地址,返回MAC地址:
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
int main(int argc, char **argv)
{
int sockfd;
char *ptr;
struct arpreq arp;
struct sockaddr_in *arptr;
sockfd = socket(AF_INET, SOCK_STREAM, 0); //create any type of socket
arptr = (struct sockaddr_in *)&arp.arp_pa;
bzero(arptr, sizeof(struct sockaddr_in));
arptr->;sin_family = AF_INET;
arptr->;sin_addr.s_addr = inet_addr(argv[1]);
ioctl(sockfd, SIOCGARP, &arp);
printf("addr = %s, arp mac = %x %x %x %x %x %x %x %x\n", inet_ntoa(arptr->;sin_addr), arp.arp_ha.sa_data[0], arp.arp_ha.sa_da
ta[1], arp.arp_ha.sa_data[2], arp.arp_ha.sa_data[3], arp.arp_ha.sa_data[4], arp.arp_ha.sa_data[5], arp.arp_ha.sa_data[6], arp.arp_ha
.sa_data[7], arp.arp_ha.sa_data[8]);
ptr = arp.arp_ha.sa_data;
printf("mac = %x:%x:%x:%x:%x:%x\n", *(ptr)&0xff, *(ptr+1)&0xff, *(ptr+2)&0xff, *(ptr+3)&0xff, *(ptr+4)&0xff, *(ptr+5)&0xff);
}