C程序中根据ifconfig命令的过程获取Linux本地ip

    Ifreq结构用来配置ip地址、获取ip、获取MTU等等关于网卡的信息,Linux下可以使用ioctl()函数以及结构体struct ifreq来获取网卡的各种信息。

    在Linux系统中获取IP地址通常都是通过ifconfig命令来实现的,然而ifconfig命令实际是通过ioctl接口与内核通信。

    ioctl( Sock, SIOCGIFCONF, &ifr),第二个参数则对应下面的功能。

 

SIOCSIFBRDADDR

SIOCGIFBRDADDR

SIOCSIFNETMASK

SIOCGIFNETMASK

SIOCSIFADDR

设置广播地址

获取广播地址

设置子网掩码 

获取子网掩码

获取接口地址

 

实例:

//获取本地ip

struct in_addr GetLocalIp(char *pNetworkCard)
{
    char device[32];     // 网卡设备
    int fd_arp;           
    struct ifreq ifr;    // ifreq结构体
    struct sockaddr_in *ptr;
    struct in_addr myself;  //IP地址

    strcpy(device, pNetworkCard);

    strcpy(ifr.ifr_name, device);
    
    if ((fd_arp = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
          exit(1);
    }
    
    if (ioctl(fd_arp, SIOCGIFADDR, &ifr) < 0)
    {
        printf("ioctl siocgifaddr error");
    }
    
    ptr= (struct sockaddr_in *)&ifr.ifr_addr;
    myself = ptr->sin_addr;
    
    close(fd_arp);
    return myself;     //返回IP地址
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值