Мне надо определить свой ip адресс в сети исползуя C
Я вот что-то наваял да только определяется всегда только 127.0.0.1
#include <stdio.h>
#include <netdb.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
struct hostent *h;
struct in_addr add;
long int *hip;
char localhost[129];
if (gethostname(localhost, 128) < 0)
return 1;
if ((h = gethostbyname(localhost)) != NULL)
{
hip = (long int*)h->h_addr_list[0];
while (*hip != 0)
{
printf("%ld\n", *hip);
add.s_addr = *hip;
printf("%s\n", inet_ntoa(add));
hip++;
}
}
return 0;
}
Определение своего ip средствами C
Модератор: Модераторы разделов
-
ilich
- Сообщения: 156
Re: Определение своего ip средствами C
Ты вместо localhost указывай имя своего компьютера, имхо с именем localhost связан адрес 127.0.0.1.
!!! БЕРИ ОТ ЖИЗНИ ВСЕ !!!
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Определение своего ip средствами C
(h8u @ Пятница, 08 Июля 2005, 0:59) писал(а):Мне надо определить свой ip адресс в сети исползуя C
немного дополнительной информации для понимания всей сложности данного вопроса:
1. ip-адрес может быть канонический ipv4, может быть ipv6
2. ip-адресов на _одном_ интерфейсе может быть наконфигурировано произвольное кол-во (верхн. предел, кажется ~32768)
3. интерфейсов тоже может быть произвольное кол-во (есть, конечно, верхняя граница, но, думаю, тоже где-то в районе 32768)
вот и подумай, что тебе, собственно говоря, нужно (:
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
h8u
- Сообщения: 6
Re: Определение своего ip средствами C
Ну и где-же взять имя своего компа? gethostname - Разве не это делает?
А IP адрес мне нужен для icq-клиента(я его пытаусь написать, там в login-пакете надо отослать свой ip).
Подскажите как его узнать с помощью С.
А IP адрес мне нужен для icq-клиента(я его пытаусь написать, там в login-пакете надо отослать свой ip).
Подскажите как его узнать с помощью С.
-
MaGIc laNTern
- Сообщения: 537
- Статус: 人です
- ОС: Gentoo
Re: Определение своего ip средствами C
Хоть Я пока что обсолютно не знаком с C, могу предположить что gethostname выдаёт IP по уже известному хосту (в Вашем случае - localhost).
-
h8u
- Сообщения: 6
Re: Определение своего ip средствами C
Ну вот если не знаком напиши "man gethostname".
А ip Выдаёт gethostbyname("има_хоста");
да и то не в чистом виде а ссылкой на структуру.
А ip Выдаёт gethostbyname("има_хоста");
да и то не в чистом виде а ссылкой на структуру.
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: Определение своего ip средствами C
(h8u @ Суббота, 09 Июля 2005, 1:39) писал(а):Ну вот если не знаком напиши "man gethostname".
А ip Выдаёт gethostbyname("има_хоста");
да и то не в чистом виде а ссылкой на структуру.
берёшь gethostname(hostname.domainname)
и пытаешься получить... :-)
и там разве это обязательно?
-
h8u
- Сообщения: 6
Re: Определение своего ip средствами C
Синтаксис функции
int gethostname(char *name, size_t len);
а не то что вы пишете.
И всё время эта функция возвращает "localhost" - который связан с 127.0.0.1
int gethostname(char *name, size_t len);
а не то что вы пишете.
И всё время эта функция возвращает "localhost" - который связан с 127.0.0.1
-
MaGIc laNTern
- Сообщения: 537
- Статус: 人です
- ОС: Gentoo
Re: Определение своего ip средствами C
(h8u @ Суббота, 09 Июля 2005, 2:39) писал(а):Ну вот если не знаком напиши "man gethostname".
А ip Выдаёт gethostbyname("има_хоста");
да и то не в чистом виде а ссылкой на структуру.
А ну собственно Я хорошо (учусь до профессионального уровня) знаком с PHP, там тоже есть gethostbyname который это и делает, просто Я думал что gethostname в C идентичен gethostbyname в PHP, оказалось нет.
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: Определение своего ip средствами C
(h8u @ Суббота, 09 Июля 2005, 13:06) писал(а):Синтаксис функции
int gethostname(char *name, size_t len);
а не то что вы пишете.
И всё время эта функция возвращает "localhost" - который связан с 127.0.0.1
зайди в консоль и набери:
hostname
и
domainname
они по хорошему должны резолвиться... правда у меня они стоят на 127.0.0.1
но может повезёт
вариант 2: берёшь вывод /sbin/route
берёшь интерфейс, через который идёт нужный трафик, смотришь ip этого интерфейса... только там вроде пофиг какой ip :-)
-
h8u
- Сообщения: 6
Re: Определение своего ip средствами C
Мне надо узнать свой ip только средствами C, без всяких консольных команд.
Используя системные вызовы.
Если такими метедами то можно и ifconfig, и в /proc посмореть...
Используя системные вызовы.
Если такими метедами то можно и ifconfig, и в /proc посмореть...
-
grooz
- Сообщения: 11
Re: Определение своего ip средствами C
h8u, для того, чтобы получить имя хоста при помощи gethostname, надо его сначала задать при помощи sethostname, увы.
В зависимости от дистрибутива, нужно прописать его либо в /etc/hostname, либо где-то ещё. Либо просто сделать из-под рута hostname blablabla.
-
d_Sun
- Сообщения: 291
Re: Определение своего ip средствами C
(grooz @ Пятница, 05 Августа 2005, 23:19) писал(а):h8u, для того, чтобы получить имя хоста при помощи gethostname, надо его сначала задать при помощи sethostname, увы.В зависимости от дистрибутива, нужно прописать его либо в /etc/hostname, либо где-то ещё. Либо просто сделать из-под рута hostname blablabla.
Ф десятку :thumbsup: Вообще если это приложение собираться стать клиентом/сервером tcp/udp то лучше ip и номер порта передавать через список аргументов командной строки.
Моя подпись сильно длинная :)
-
Ananas
- Сообщения: 64
Re: Определение своего ip средствами C
man gethostent (кстати тот-же ман, что и для gethostbyname)