首页 > 代码库 > ioctl使用
ioctl使用
#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); }
本文出自 “Howard” 博客,请务必保留此出处http://howard0217.blog.51cto.com/6646854/1413896
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。