Привет многоуважаемый ALL!
У меня стоит задача узнать свой IP адрес как можно проще в C++ под линух. Использование gethostbyname не катит так же как и любой способ с использованием DNS. Консоль и конфиги не катят. HELP!
>Привет многоуважаемый ALL!
>У меня стоит задача узнать свой IP адрес как можно проще в
>C++ под линух. Использование gethostbyname не катит так же как и
>любой способ с использованием DNS. Консоль и конфиги не катят. HELP!
>Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.
>Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
>Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.А можно простенький примерчик?
>>Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
>>Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.
>
>А можно простенький примерчик?Конечно, исходные тексты ifconfig(8)
>>>Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
>>>Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.
>>
>>А можно простенький примерчик?
>
>Конечно, исходные тексты ifconfig(8)и еще:
man ioctl
man ioctl_list
Стивенс "UNIX. Разработка сетевых приложений" http://www.ozon.ru/context/detail/id/1390985/По простому в системно-зависимых областях редко бывает.
Совсем простой пример (без всяких проверок и т.п.), чисто для идеи...
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <arpa/inet.h>int main()
{
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, "eth0");int s = socket(AF_INET, SOCK_DGRAM, 0);
ioctl(s, SIOCGIFADDR, &ifr);
close(s);struct sockaddr_in *sa = (struct sockaddr_in*)&ifr.ifr_addr;
printf("addr = %s\n", inet_ntoa(sa->sin_addr));
return 0;
}ЗЫ. Если не секрет, почему popen + ifconfig не катит? ;) Всем почему-то катит, а вам нет..
>>>Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
>>>Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.
>>
>>А можно простенький примерчик?
>
>Конечно, исходные тексты ifconfig(8)Ok, но теперь я не могу найти это исходник. find | grep ifconfig результата не дает в каталоге с исходниками. Где мне его искать?
>>>>Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
>>>>Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.
>>>
>>>А можно простенький примерчик?
>>
>>Конечно, исходные тексты ifconfig(8)
>
>Ok, но теперь я не могу найти это исходник. find | grep
>ifconfig результата не дает в каталоге с исходниками. Где мне его
>искать?
ээ.. сорри. Предидущее сооббщение пропустил не обновил форум
vic благодарствую! То что надо :)