#include <stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/ioctl.h> #include <net/if.h> static void usage() { printf("usage : ipconfig interface \n"); exit(0); } int main(int argc,char **argv) { struct sockaddr_in *addr; struct ifreq ifr; char *name, *address; int sockfd; if(argc != 2) { usage(); } else { name = argv[1]; } strncpy(ifr.ifr_name, name, IFNAMSIZ-1); sockfd = socket(AF_INET, SOCK_DGRAM, 0); if(sockfd < 0) { perror("socket() error!"); exit(1); } if(ioctl(sockfd, SIOCGIFHWADDR, &ifr)<0) { perror("ioctl error"); exit(1); } printf("HWaddr: %02X:%02X:%02X:%02X:%02X:%02X\n", (unsigned char)ifr.ifr_hwaddr.sa_data[0], (unsigned char)ifr.ifr_hwaddr.sa_data[1], (unsigned char)ifr.ifr_hwaddr.sa_data[2], (unsigned char)ifr.ifr_hwaddr.sa_data[3], (unsigned char)ifr.ifr_hwaddr.sa_data[4], (unsigned char)ifr.ifr_hwaddr.sa_data[5]); if(ioctl(sockfd, SIOCGIFADDR, &ifr) == -1) { perror("ioctl error"); exit(1); } addr = (struct sockaddr_in *)&(ifr.ifr_addr); address = inet_ntoa(addr->sin_addr); printf("inet addr: %s ",address); if(ioctl(sockfd, SIOCGIFBRDADDR, &ifr) == -1) { perror("ioctl error"); exit(1); } addr = (struct sockaddr_in *)&ifr.ifr_broadaddr; address = inet_ntoa(addr->sin_addr); printf("broad addr: %s ",address); if(ioctl(sockfd, SIOCGIFNETMASK, &ifr) == -1) { perror("ioctl error"); exit(1); } addr = (struct sockaddr_in *)&ifr.ifr_addr; address = inet_ntoa(addr->sin_addr); printf("inet mask: %s ",address); printf("\n"); close(sockfd); exit(0); }
时间: 2024-10-27 02:56:19