Странный глюк hostname.
Вызов ‘hostname -f’ приводит к зависанию и выводу ‘host name lookup failure’ через некоторое время. Из-за этого запуск X через startx проходит медленно. Контент /etc/hostname: «rmbp». В /etc/hosts ничего необычного. Все остальные хосты резолвятся нормально. Дистрибутив: Gentoo.
Покажи /etc/hosts, /etc/resolv.conf, /etc/conf.d/net и /etc/nsswitch.conf
собственно, а в /etc/hostname что?
Так добавь адрес для хостнейма в /etc/hosts или юзай нормальный fqdn
Информация по тому, как получает имя хоста команда hostname, довольно скудная, и на самом деле файл /etc/
По факту система делает reverse DNS lookup по IP адресу узла, чтобы узнать его имя. Если DNS ничего не находит, то возникает такая задержка. Чтобы этого избежать, можно указать имя хоста в /etc/hosts, тогда до DNS дело не дойдет, имя узла будет взято из этого файла. Собственно, я так понимаю, что это наименее костыльный способ указания имени хоста (помимо записи в DNS сервере). Единственная тонкость: иногда привязка к 127.0.0.1 не работает, тогда надо IP адрес какого-то физического интерфейса указывать.
Источник
С # оператор if не работает
Мой код работает в локальной сети, и я знаю, что он не будет работать за пределами локальной сети, поскольку я использую Dns.GetHostEntry для преобразования IP-адреса в имя хоста, и это нормально .
Но мой оператор if не работает, я получаю сообщение об ошибке «Хост не найден» при попытке разрешить имя хоста из другой подсети.
Я думал, что мой оператор if остановит эту ошибку, но он не работает, может кто-нибудь помочь, пожалуйста, или скажите мне, как это исправить, код ниже .
2 ответа
Если имя хоста не может быть найдено, исключение SocketException возвращается со значением 11001 (ошибка сокетов Windows WSAHOST_NOT_FOUND). Это исключение может быть возвращено, если DNS-сервер не отвечает. Это исключение также может быть возвращено, если имя не является официальным именем хоста или псевдонимом или его нельзя найти в запрашиваемой базе данных (ах).
Поэтому я подозреваю, что ваш код не добрался до третьего условия if , потому что при вызове GetHostEntry() возникает исключение, которое вы видите как ‘ошибку «Хост не найден «сообщение».
Самый простой способ справиться с этим — использовать блок try. catch , чтобы перехватить конкретное исключение и обработать его, например:
Это говорит о том, что если SocketException происходит во время вызова GetHostEntry() , код должен перейти к блоку catch, а не исключение, останавливающее ваше приложение.
Обратите внимание, что здесь предполагается, что любой SocketException означает, что IP-адрес не был найден, но это может означать, что DNS-сервер не может связаться, или какая-то другая ошибка.
В MSDN довольно много говорится об обработке исключений и о том, как работают блоки try. catch .
Надеюсь это поможет
Прежде чем получить значение из словаря, вы должны проверить, содержит ли словарь переданный вами ключ. Этого можно добиться, вызвав метод «Содержит».
Если вы извлекаете содержимое словаря напрямую, а запрашиваемый ключ не существует в парах словарей, словарь не возвращает null. Вместо этого он выдает исключение KeyNotFoundException.
Источник
не хочет hostname выставлять по dhcp
В /etc/conf.d/dhcpcd стоит DHCPCD_ARGS=»-q -e force_hostname=YES», /etc/hostname я удалил, а имя всё равно localhost. По логам dnsmasq отдаёт корректное hostname.
Опытным путём было установлено что при следующем запросе (когда lease time истекает) оно таки выставляет правильный hostname. Вопрос: как сделать так чтобы оно сразу получало по сети нормальное имя?
Каким образом dnsmasq отдаёт hostname клиенту: опцией 12 или реверс-зоной DNS?
эээ, примерно так:
Я думаю это и есть опция 12. Но на всякий случай проверю в выхлопе dnsmasq.
Конкретно так. Смущает что запрос отправляется два раза.
А вот логи с тачки.
Эта машина бутится по сети? Тогда смущать не должно, ибо первый раз адрес получает boot-клиент сетевухи, а второй раз уже ось.
не, примерно вот так:
С пустым файлом /etc/hostname было то же самое?
да, щас создал пустой, ребутнулся, всё равно остаётся localhost
Опытным путём было установлено что при следующем запросе (когда lease time истекает) оно таки выставляет правильный hostname
Наводит на мысль, что при первом запуске оно не считывает указанные опции. Можешь проверить? Ребутнуть и посмотреть c какими параметрами запущен?
Наводит на мысль, что при первом запуске оно не считывает указанные опции.
Обрати внимание в какой момент hostname в логах поменялся. А так же вот на это: dhcpcd[310]: forked to background, child pid 335 . Т.е. это один и тот же dhcpcd.
Утром попробую заменить его на dhclient какой-нить.
Стой, я вспомнил.
Посмотри http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=694541. Там бывали захардкожены опции, надо посмотреть, не тот ли случай, вдруг он при первом запуске игнорит опции?
блин, с dhclient я вообще не вижу чтобы hostname правильно выставлялся.
Теперь, пусть с задержкой в 10 секунд, но хостнейм выставляется сразу. Только бы не забыть багрепорт написать.
Там бывали захардкожены опции, надо посмотреть, не тот ли случай, вдруг он при первом запуске игнорит опции?
А это интересно. Есть такие строчки:
Тут ясно видно что хостнейм сменился на perftest и вдруг внезапно сменился обратно. Тут или systemd чудит или что-то в ifplugd. Хм, попробую вынести ifplugd, я его ставил в надежде сократить время получения ответа. У меня такое чувство что модуль ядра поднимается/инициализируется с задержкой: сама система грузится пару секунд, а вот сеть ещё секунд 5 поднимается. И я не смог понять почему.
Источник
Почему я получаю имя хоста: имя или служба не известна ошибка?
Я получаю эту ошибку, когда устанавливаю какие-либо пакеты через apt-get :
Почему это происходит?
Решение:
(Эти типы проблем не имеют хороших решений. Но только некоторые хакинг)
Сначала вы должны попробовать эту команду в терминале:
Если это не работает, обработайте с помощью хакерского решения.
Попробуйте временно переместить скрипт конфигурации ssmtp .
Откройте терминал и выполните эту команду, чтобы переместить их в текущий каталог.
Тогда попробуйте использовать apt-get
Причина проблемы:
Предыдущая установка или удаление могут быть не завершены успешно, что оставляет некоторый шаг настройки для ssmtp пакета. Поскольку dpkg не будет прогрессировать без предварительного завершения шагов, последующее использование apt-get теперь застревает на этом шаге.
бег hostname —fqdn
Если вы получили ошибку, отредактируйте / etc / hostname и / etc / hosts с правильным именем хоста.
Затем aptitude install ssmtp снова получить его для установки.
Просто чтобы все знали, редактирование / etc / hosts помогло, так как etc / hostname была правильной с server.exmaple.com
Однако хозяева не были правильными
измените это на это:
Я запустил hostname -f и hostname —fqdn и получил следующее.
Просто думал, что все хотели бы знать.
Скорее всего, ваше интернет-соединение не работает должным образом. В частности, я думаю, что ваш DNS не разрешается должным образом.
попробуйте добавить строку
на ваш /etc/resolv.conf
Это позволит временно добавить DNS-сервер freenom (до следующей загрузки).
Я получил сообщение в моей домашней сети в системе Ubuntu с динамически назначаемым IP-адресом от маршрутизатора, обеспечивающего объединенный сервер DHCP и DNS для моей сети.
Сообщение: hostname: Name or service not known может быть вызвано отключением такого устройства, хотя бы на мгновение.
Например, это может произойти, если мой домашний маршрутизатор перезагружается при отключении питания.
Проблема здесь в том, что служба DHCP, на которую опирается ваша сеть, забывает все назначенные ей IP-адреса и связанные с ними доменные имена. Когда ваш компьютер проверяет связанный DNS-сервер на свое собственное имя, сервер больше не имеет его. Некоторые DHCP-серверы могут избежать проблем, записав присвоения, которые они сделали, на свой диск или флэш-память, чтобы при перезапуске ничего не терялось.
Сервер обычно может взять ваше имя компьютера из запроса DHCP вашей системы, сделать его именем компьютера .local и сохранить его в своих записях, сделав его доступным на соответствующем DNS-сервере одновременно. Обычно hostname -fqdn запрашивает полное доменное имя в вашей сети с вашего DNS-сервера и, если у него есть запись, возвращает это имя. .local Суффикс делает его похожим на действительное полный доменное имя (хотя это на самом деле не является допустимым глобальным доменным имя). Вот почему вам может не потребоваться указывать имя домена вручную в файлах / etc / hosts или / etc / hostname.
Перезапуск DHCP-сервера может вызвать дополнительные проблемы, поскольку IP-адреса могут быть назначены нескольким компьютерам одновременно, в результате чего некоторые из них не смогут обмениваться данными. Адрес назначается один раз до перезапуска сервера, и снова после этого.
Если ваш DHCP-сервер забывает свои назначения, то безопаснее всего заново подключить каждый компьютер, который он обслуживает, при перезагрузке. Когда я потерял свой, я просто отключился и снова подключился к своей точке доступа Wi-Fi. В проводной сети вы можете использовать ifdown и ifup или просто отключить и снова подключить сетевой кабель. При повторном подключении моя система автоматически использует dhclient для получения нового адреса — мой компьютер и сервер теперь договариваются о том, кто я, и сообщение больше не появляется.
Если вы подождете достаточно долго, срок аренды DHCP истечет, и ваша система запросит и получит новый срок аренды с сервера — устранение проблемы. Вероятно, это будет часами или днями позже (для моего сервера это один день).
Если вы определили статическое IP-имя и адрес и если записи обратного просмотра DNS верны, проблема не должна возникать.
Источник
Почему «hostname —fqdn» не работает на моем компьютере с Ubuntu?
Я использую Ubuntu 10.04 LTS, и когда я набираю команду hostname —fqdn , я получаю сообщение: hostname: Name or service not known .
Из-за этого я не могу установить global успешно, и при попытке получить следующую ошибку:
Мой /etc/nsswitch.conf находится ниже.
У кого-нибудь есть идеи о том, что это значит и как я могу это исправить?
3 ответа 3
Можете ли вы предоставить содержимое /etc/nsswitch.conf ?
Похоже, что /etc/nsswitch.conf имеет плохое значение для строки «hosts». Это начинается с «файлов»?
В противном случае полное доменное имя устанавливается путем редактирования /etc /hosts и размещения полного доменного имени в строке, где отображается имя хоста. Предположим, у вас есть имя хоста «foo», и вы найдете строку:
Вы бы отредактировали это так:
foo.localdomain будет вашим новым полным доменным именем .
отредактируйте /etc /hosts, чтобы добавить ваше полное доменное имя
обновление: перечитывание вашего вопроса снова звучит так, как будто вы либо не правильно указали путь, либо что-то не так с программой hostname.
сделать «какое имя хоста»
должен возвращаться с путем ‘/bin/hostname’
если это работает, попробуйте команду снова, как,
В отличие от простого вызова команды hostname , вызов hostname —fqdn попытается сделать еще несколько вещей, что часто приводит к некоторым поискам DNS.
Возьмем, к примеру, следующий (успешный) вызов (это из коробки Red Hat, но я бы предположил, что он должен быть таким же для Ubuntu):
Обратите внимание на очень полезную опцию —verbose .
Короче говоря, все, кроме простого hostname , вероятно, делает больше, чем вы ожидаете. Вот еще один пример:
И округлить это:
Обратите внимание, что имя хоста системы (возвращаемое gethostname) может содержать безусловное имя хоста, например просто «myserver». Вот почему программа, которую вы хотите установить, использует вместо hostname —fqdn .
Сообщение об ошибке hostname: Name or service not known происходят из функций распознавателя : это части системной библиотеки, которые выполняют преобразование между именами и адресами (обычно это DNS-имена и IP-адреса).
На самом деле, распознаватель делает больше, чем просто DNS (и больше, чем просто перевод между именами хостов и IP-адресами); его поведение частично настраивается с помощью файла /etc/nsswitch.conf , и обычно он обращается к следующему, обычно в следующем порядке:
- ‘hosts’ (в Linux это означает /etc /hosts)
- (иногда) nscd (демон кэширования службы имен)
- ‘DNS’
(обратите внимание, вы также можете иметь кеширующий DNS-сервер, такой как dnsmasqd — для вышеприведенного пункта, который все еще находится под механизмом ‘dns’).
Стоит отметить, что такие инструменты, как dig, host и Venserable nslookup, не следуют этому порядку; они явно являются инструментами DNS-запросов. Это означает, что если вы полагаетесь на них (например, в сценарии), вы можете получить другой результат, чем то, что будут делать обычные клиентские программы (использующие системный преобразователь). По этой причине используйте программу getent в сценариях, особенно если у вас есть компонент кэширования, такой как nscd.
Итак, ключевым моментом здесь является то, что а) если у вас /etc /hosts хорошо настроена запись для вашей собственной машины, и б) ваш /etc/nsswitch.conf имеет обычную конфигурацию — hosts: files dns в этом порядке, затем c) даже если у вас нет хорошо настроенного DNS в вашей среде, тогда hostname —fqdn должно работать.
В правильно сконфигурированном DNS вы должны иметь один «обратный» адрес («запись PTR»), который дает «каноническое» имя вашего сервера, и это имя также можно будет найти (« Запись «для IPv4).
Короткая версия: добавить —verbose ; это укажет вам на то, чего вам не хватает.
Надеюсь, что это поможет вам понять, что происходит.
Источник