码迷,mamicode.com
首页 > 其他好文 > 详细

ioctl函数,可以获取ip地址,修改ip地址,网卡地址等

时间:2017-01-09 19:53:22      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:int   stream   har   style   signed   printf   cgi   cad   mask   

#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 );

ioctl函数,可以获取ip地址,修改ip地址,网卡地址等

标签:int   stream   har   style   signed   printf   cgi   cad   mask   

原文地址:http://www.cnblogs.com/zhangxuan/p/6266137.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!