#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
原文地址:http://howard0217.blog.51cto.com/6646854/1413896