URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5500
[ Назад ]

Исходное сообщение
"Как по-проще узнать свой IP в C++ в Linux? "

Отправлено ufobject , 15-Июн-06 15:52 
Привет многоуважаемый ALL!
У меня стоит задача узнать свой IP адрес как можно проще в C++ под линух. Использование gethostbyname не катит так же как и любой способ с использованием DNS. Консоль и конфиги не катят. HELP!

Содержание

Сообщения в этом обсуждении
"Как по-проще узнать свой IP в C++ в Linux? "
Отправлено vic , 15-Июн-06 16:59 
>Привет многоуважаемый ALL!
>У меня стоит задача узнать свой IP адрес как можно проще в
>C++ под линух. Использование gethostbyname не катит так же как и
>любой способ с использованием DNS. Консоль и конфиги не катят. HELP!
>

Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.


"Как по-проще узнать свой IP в C++ в Linux? "
Отправлено ufobject , 16-Июн-06 14:45 
>Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
>Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.

А можно простенький примерчик?


"Как по-проще узнать свой IP в C++ в Linux? "
Отправлено chip , 16-Июн-06 16:23 
>>Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
>>Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.
>
>А можно простенький примерчик?

Конечно, исходные тексты ifconfig(8)



"Как по-проще узнать свой IP в C++ в Linux? "
Отправлено vic , 16-Июн-06 17:05 
>>>Адреса назначаются интерфейсам, у интерфейса может быть 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 не катит? ;) Всем почему-то катит, а вам нет..


"Как по-проще узнать свой IP в C++ в Linux? "
Отправлено ufobject , 16-Июн-06 17:14 
>>>Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
>>>Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.
>>
>>А можно простенький примерчик?
>
>Конечно, исходные тексты ifconfig(8)

Ok, но теперь я не могу найти это исходник. find | grep ifconfig результата не дает в каталоге с исходниками. Где мне его искать?


"Как по-проще узнать свой IP в C++ в Linux? "
Отправлено ufobject , 16-Июн-06 17:25 
>>>>Адреса назначаются интерфейсам, у интерфейса может быть 0 и более адресов.
>>>>Системный вызов ioctl() позволяет получить список интерфейсов и их адреса.
>>>
>>>А можно простенький примерчик?
>>
>>Конечно, исходные тексты ifconfig(8)
>
>Ok, но теперь я не могу найти это исходник. find | grep
>ifconfig результата не дает в каталоге с исходниками. Где мне его
>искать?
ээ.. сорри. Предидущее сооббщение пропустил не обновил форум


"Как по-проще узнать свой IP в C++ в Linux? "
Отправлено ufobject , 16-Июн-06 17:31 
vic благодарствую! То что надо :)