Gethostbyname c не работает

gethostbyname() не работает

Я пытаюсь найти исходный IP-адрес, но он не будет работать.

Результат, который я получаю, — «Исходный macbook неизвестен».

Как я уже говорил в комментариях к этому вопросу, у вас есть несколько проблем. Во-первых, это то, что результаты не передаются обратно вызывающей функции. Для этого вам нужно использовать двойной указатель.

Затем значение, возвращаемое из gethostbyname , выделяется в статической памяти, поэтому его можно перезаписать при следующем вызове функции. Вам нужно скопировать результат в свою собственную память. Это нетривиально, потому что вам нужно глубоко скопировать его, а не только malloc(sizeof(struct hosting)) . Сложность этого заключается в том, почему gethostbyname обесценивается. В зависимости от вашей целевой платформы есть намного лучшие возможности для поиска DNS.

Даже если поиск выполнится в вашем коде, вы получите SEGFAULT. Вы передаете значение NULL для ipStruct а затем пытаетесь разыменовать и писать на него. Если вы разыщите указатель NULL, у вас будет плохое время. Вы должны потратить некоторое время, чтобы понять управление памятью на C, используя malloc и free .

Не видя больше кода, я не уверен, что вы пытаетесь сделать со своей struct ip . Похоже, вы пытаетесь получить один или несколько IP-адресов хоста в качестве char * , но вы пропустили эту цель на значительную сумму. Я могу предложить немного больше помощи, если вы сможете уточнить намерения.

Этот последний фрагмент является стилистическим, но выполнение присвоений в операторах if является склонным к ошибкам и вообще плохой идеей. Вы должны выйти из привычки делать это.

Источник

Gethostbyname c не работает

1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
FAQ Раздела Обновления для FAQ Раздела Поиск по Разделу MSDN Library Online

Читайте также:  Сломалась пластиковая дверь не закрывается

Видимо зыбыл проинициализировать сокеты:
WSADATA wsa;
WSAStartup(MAKEWORD(2,0), &wsa);

И закрыть:
WSACleanup();

Если это поле равно NULL — это значит список альтернативных адресов отсутствует — только и всего

Добавлено 14.06.07, 21:05

Видимо зыбыл проинициализировать сокеты:
WSADATA wsa;
WSAStartup(MAKEWORD(2,0), &wsa);

И закрыть:
WSACleanup();

Нет я это не забыл.

Но почему послу перезашрузки они появляются?

Источник

Gethostbyname c не работает

1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
FAQ Раздела Обновления для FAQ Раздела Поиск по Разделу MSDN Library Online

Видимо зыбыл проинициализировать сокеты:
WSADATA wsa;
WSAStartup(MAKEWORD(2,0), &wsa);

И закрыть:
WSACleanup();

Oleg2004

Если это поле равно NULL — это значит список альтернативных адресов отсутствует — только и всего

Добавлено 14.06.07, 21:05

Видимо зыбыл проинициализировать сокеты:
WSADATA wsa;
WSAStartup(MAKEWORD(2,0), &wsa);

И закрыть:
WSACleanup();

Нет я это не забыл.

Но почему послу перезашрузки они появляются?

Источник

Dns. Get Host ByName(String) Метод

Определение

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

GetHostByName is obsoleted for this type, please use GetHostEntry instead. https://go.microsoft.com/fwlink/?linkid=14202

GetHostByName has been deprecated. Use GetHostEntry instead.

GetHostByName is obsoleted for this type, please use GetHostEntry instead. http://go.microsoft.com/fwlink/?linkid=14202

Use GetHostEntry instead

Возвращает сведения DNS для указанного DNS-имени узла.

Параметры

Возвращаемое значение

Объект IPHostEntry, содержащий сведения об узле для адреса, указанного в hostName .

Исключения

hostName имеет значение null .

Длина hostName превышает 255 символов.

При разрешении hostName возникает ошибка.

Примеры

В следующем примере используется GetHostByName метод для получения сведений DNS для указанного имени узла DNS.

Комментарии

GetHostByNameМетод запрашивает у DNS-сервера Интернет сведения об узле. Если в качестве имени узла передается пустая строка, этот метод получает стандартное имя узла для локального компьютера.

Для асинхронного доступа к сведениям DNS используйте BeginGetHostByName EndGetHostByName методы и.

Если Ipv6Element.Enabled свойство имеет значение true , Aliases IPHostEntry возвращаемое свойство экземпляра не заполняется этим методом и всегда будет пустым.

Этот элемент выдает сведения о трассировке при включении трассировки сети в приложении. дополнительные сведения см. в разделе сетевая трассировка в платформа .NET Framework.

Источник

Gethostbyname c не работает

Функция gethostbyaddr() возвращает структуру типа hostent указанному адресу машины addr, длина которого равна len, а тип адреса равен type. В данный момент типом адреса может быть только AF_INET .

Функция sethostent() (если значение stayopen истинно (1)) указывает, что соединенный сокет TCP должен быть использован для отправки запросов серверу имен, а также то, что соединение должно оставаться открытым во время последующих запросов. В противном случае для отправки серверу имен запросов будут использоваться датаграммы UDP.

Функция endhostent() закрывает соединение TCP для запроса сервера имен.

Функция error() (устаревшая) выводит сообщение об ошибке, связанное с текущим значением h_errno в стандартном потоке вывода ошибок.

Функция hstrerror() (устаревшая) в качестве параметра использует номер ошибки (обычно h_errno ) и возвращает соответствующую строку сообщения.

Запросы имени домена, производимые функциями gethostbyname() и gethostbyaddr(), используют комбинацию данных любых или всех серверов имен named (8), записи из файла /etc/hosts и комбинацию данных сетевой информационной службы (NIS или YP) в зависимости от порядка строк файла /etc/host.conf (см. resolv+ (8). По умолчанию производится опрос named (8), затем /etc/hosts .

Структура hostent определена в следующим образом:

Полями структуры hostent являются: h_name (официальное имя машины); h_aliases (оканчивающийся нулем массив альтернативных имен машины); h_addrtype (тип адреса; в настоящее время всегда AF_INET ); h_length (длина адреса в байтах); h_addr_list (оканчивающийся нулем массив сетевых адресов машины в сетевом порядке байтов); h_addr (первый адрес в h_addr_list определен для совместимости с более ранними версиями).

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ


НАЙДЕННЫЕ ОШИБКИ


ФАЙЛЫ


СООТВЕТСТВИЕ СТАНДАРТАМ


ЗАМЕЧАНИЯ

Функции gethostbyname () и gethostbyaddr () могут возвращать указатели на статические данные, которые могут быть перезаписаны более поздними вызовами. Простого копирования структуры struct hostent недостаточно, так как эта структура содержит указатели — небоходимо глубокое копирование.

В glibc2 имеется также функция gethostbyname2() работающая как gethostbyname() , но позволяющая обозначать семейство, к которому должен принадлежать адрес.

Кроме того, glibc2 содержит реентрантные версии gethostbyname_r() и gethostbyname2_r() . Эти функции возвращают 0 при успешном завершении и ненулевое значение при ошибке. Результат вызова заносится в структуру с адресом ret . После вызова * result может быть NULL при ошибке или указывать на результат при успешном завершении. Вспомогательные данные заносятся в буфер buf длиной buflen . (Если буфер слишком мал, то функция вернет ERANGE .) Глобальная переменная h_errno не изменяется, но в h_errnop передается адрес переменной, в которую будет занесен код ошибки.

POSIX 1003.1-2001 заменяет gethostbyaddr() на gethostbyname() .

Источник

Оцените статью
Oleg2004