#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <string.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
unsigned char g_eth_name[16];
unsigned char g_macaddr[6];
unsigned int g_broadcast_addr;
int main()
{
    int i;
	    int rv;
	    int fd;
	    struct ifreq ifr;
	    struct sockaddr_in sin;
	    char ipaddr[50];
	    fd = socket(AF_INET, SOCK_STREAM, 0);
	    if (-1 == fd)
	    {
		        return;
	    }
	    strcpy(g_eth_name, "eth0");
	    strcpy(ifr.ifr_name, g_eth_name);
	    if ( ioctl(fd, SIOCGIFHWADDR, &ifr) < 0)
	    {
		        close( fd );
		        return;
	    }
	    memcpy(g_macaddr, ifr.ifr_hwaddr.sa_data, sizeof(g_macaddr));
	    printf("local mac:");
	    for(i=0;i<sizeof(g_macaddr)-1;i++)
	    {
		        printf("%.2x:", g_macaddr[i]);
	    }
	    printf("%.2x\n", g_macaddr[i]);
	    //get the broadcast addr
	    if ( ioctl(fd, SIOCGIFBRDADDR, &ifr) < 0)
	    {
		        close( fd );
		        return;
	    }
	    memcpy(&sin, &ifr.ifr_addr, sizeof(sin));
	    g_broadcast_addr = sin.sin_addr.s_addr;
	    printf("broadcast is :%s\n", inet_ntoa(sin.sin_addr));
	    //set the mask
	
	
close( fd );
原文:http://www.cnblogs.com/zhangxuan/p/6266137.html