linux获取指定接口的IP

来源:互联网 发布:北航网络教育负责人 编辑:程序博客网 时间:2024/05/20 13:06
#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <string.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <net/if.h>#define NIPQUAD(addr) \    ((unsigned char *)&addr)[0], \    ((unsigned char *)&addr)[1], \    ((unsigned char *)&addr)[2], \    ((unsigned char *)&addr)[3]#define NIPQUAD_FMT "%u.%u.%u.%u"uint32_t obtain_ip(const char *dev){    int fd = -1;    struct ifreq ifr;    struct sockaddr_in *addr;    strncpy(ifr.ifr_name, dev, IFNAMSIZ);    fd = socket(AF_INET, SOCK_DGRAM, 0);    if (fd < 0)    {        perror("socket()");        return 0;    }    if (ioctl(fd, SIOCGIFADDR, &ifr))    {        perror("ioctl()");        close(fd);        return 0;    }    close(fd);    addr = (struct sockaddr_in *)&(ifr.ifr_addr);    return addr->sin_addr.s_addr;}int main(int argc, char **argv){    uint32_t ip = obtain_ip(argv[1]);    if (ip)        printf("ip: %u.%u.%u.%u\n", NIPQUAD(ip));    return 0;}

原创粉丝点击