linuxOS_AP06/app/lvgl_demo/rk_demo/local_ip.c
2025-06-03 12:28:32 +08:00

49 lines
1.3 KiB
C

#include <sys/ioctl.h>
#include <net/if.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char *get_local_ip(void)
{
int fd, intrface, retn = 0;
struct ifreq buf[INET_ADDRSTRLEN];
struct ifconf ifc;
char ip[INET_ADDRSTRLEN];
char *ip_out = NULL;
if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0)
{
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = (caddr_t)buf;
if (!ioctl(fd, SIOCGIFCONF, (char *)&ifc))
{
intrface = ifc.ifc_len / sizeof(struct ifreq);
ip_out = calloc(intrface, 20);
snprintf(ip_out, intrface * 20, "IP:");
while (intrface-- > 0)
{
if (!(ioctl(fd, SIOCGIFADDR, (char *)&buf[intrface])))
{
inet_ntop(AF_INET,
&((struct sockaddr_in *)(&buf[intrface].ifr_addr))->sin_addr,
ip, INET_ADDRSTRLEN);
if (strcmp(ip, "127.0.0.1") != 0)
{
strcat(ip_out, ip);
if (intrface > 1)
strcat(ip_out, ",");
}
}
}
}
close(fd);
}
return ip_out;
}