您的位置:首页 > 运维架构 > Linux

linux获取指定接口的IP

2012-08-26 17:23 323 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: