#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;
}
linux获取指定接口的IP
最新推荐文章于 2024-05-19 16:29:06 发布