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;}