ZBLOG

在Linux中,怎么用C语言实现获取ens的IP地址,有哪些方法

在Linux中,可以使用C语言来获取网络接口(如ens)的IP地址。以下是一些常用的方法:

  1. 使用getifaddrs函数:通过调用getifaddrs函数,可以获取系统中所有网络接口的信息,包括IP地址。示例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main() {
    struct ifaddrs *interfaces, *ifa;
    
    if (getifaddrs(&interfaces) == -1) {
        perror("getifaddrs");
        return -1;
    }
    
    for (ifa = interfaces; ifa != NULL; ifa = ifa->ifa_next) {
        if (ifa->ifa_addr == NULL || !(ifa->ifa_flags & IFF_UP))
            continue;

        // IPv4地址
        if (ifa->ifa_addr->sa_family == AF_INET) {
            struct sockaddr_in *addr = (struct sockaddr_in *)ifa->ifa_addr;
            char ip[INET_ADDRSTRLEN];
            inet_ntop(AF_INET, &(addr->sin_addr), ip, INET_ADDRSTRLEN);
            printf("%s: %s\n", ifa->ifa_name, ip);
        }
        
        // IPv6地址
        else if (ifa->ifa_addr->sa_family == AF_INET6) {
            struct sockaddr_in6 *addr = (struct sockaddr_in6 *)ifa->ifa_addr;
            char ip[INET6_ADDRSTRLEN];
            inet_ntop(AF_INET6, &(addr->sin6_addr), ip, INET6_ADDRSTRLEN);
            printf("%s: %s\n", ifa->ifa_name, ip);
        }
    }
    
    freeifaddrs(interfaces);
    
    return 0;
}
  1. 使用ioctl函数和SIOCGIFADDR标志:可以使用ioctl函数与SIOCGIFADDR标志来获取指定接口的IP地址。示例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main() {
    int fd;
    struct ifreq ifr;

    memset(&ifr, 0, sizeof(ifr));
    strcpy(ifr.ifr_name, "ens");

    fd = socket(AF_INET, SOCK_DGRAM, 0);
    if (fd == -1) {
        perror("socket");
        return -1;
    }

    if (ioctl(fd, SIOCGIFADDR, &ifr) == -1) {
        perror("ioctl");
        close(fd);
        return -1;
    }

    close(fd);

    char ip[INET_ADDRSTRLEN];
    struct sockaddr_in *addr = (struct sockaddr_in *)&(ifr.ifr_addr);
    inet_ntop(AF_INET, &(addr->sin_addr), ip, INET_ADDRSTRLEN);

    printf("IP address: %s\n", ip);

    return 0;
}

请注意,上述代码中的”ens”需要替换为你要获取IP地址的网络接口名字(如”eth0”、”wlan0”等)。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=2140

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?