LINUX.ORG.RU

Определение IP Адреса


0

0

У меня такой вопрос.Пишу для Linux Embedded.Приложение работает с DHCP сервером.Но после того, как DHCP выдаёт IP адрес,мне его нужно определить. Пытаюсь определить вот такой схемой: struct socaddr_in saddr; struct hostent *hp; char hostname[256]; ... gethostname(hostname); hp = gethostbyname(hostname); ...

Но максимум,что получаю это:127.0.0.1 Не подскажите,как мне определить таки правильный адрес,а не адрес localhost или что я не правильно здесь делаю?

Заранее спасибо.


Без перебора интерфейсов задачу решить скорее всего не получиться.
Код заведомо нерабочий, но думаю логика должна быть примерно такой:

/* Get a socket handle. */
sck = socket(AF_INET, SOCK_DGRAM, 0);
 
/* Query available interfaces. */
ifc.ifc_len = sizeof(buf);
ifc.ifc_buf = buf;
ioctl(sck, SIOCGIFCONF, &ifc);
 
/* Iterate through the list of interfaces. */
ifr = ifc.ifc_req;
nInterfaces = ifc.ifc_len / sizeof(struct ifreq);
for(i = 0; i < nInterfaces; i++)
{
  struct ifreq *item = &ifr[i];
 
  /* Show the device name and IP address */
  struct sockaddr *addr = &(item->ifr_addr);
  char ip[INET4_ADDRSTRLEN];

  inet_ntop(AF_INET, addr->sin_addr),
	      ip, INET4_ADDRSTRLEN);

  printf("%s: IP %s", item->ifr_name, ip);
}

vaulter
()
Ответ на: комментарий от Rastafarra

Большое спасибо.Тема закрыта.

rapa
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.