Команда / скрипты для проверки времени обратного DNS-поиска

Я работаю над проектом, в котором один мастер связывается с количеством ведомых. Для этого он должен установить соединение с хостами в сети. Но иногда это зависает.

Я думаю, что причиной является дополнительное потребление времени во время обратного поиска DNS . Поэтому, пожалуйста, скажите мне любую команду или скрипт, который проверяет или делает список для обратного просмотра DNS- времени.

EDIT №. 1

Скажите также, где я могу добавить эту команду в исходный код rsh, чтобы получить список времени, затрачиваемого каждым запросом, всякий раз, когда он подключается к другим хостам.

Так что я могу найти причину зависшего сервера.

2 Solutions collect form web for “Команда / скрипты для проверки времени обратного DNS-поиска”

Некоторое из этого зависит от того, какой резольвер-заглушка используется. У вас могут также возникнуть проблемы с IPv6, например, если IPv6-записи AAAA возвращены, но нет подключения IPv6.

Предполагая, что программное обеспечение (erm, rsh ? Действительно? Этот ответ не является специфичным для rsh ) использует системный resolver (например, ping ), а не его собственную реализацию (например, dig или host ), тогда вы можете использовать getent чтобы увидеть, что может быть происходит:

 $ time getent ahostsv4 www.google.com $ time getent ahostsv6 www.google.com 

Вышеуказанное будет выполнять прямой и обратный поиск (хотя вы не можете заставить getent искать обратный PTR или другие типы, ему getent только записи A / AAAA).

В этом ответе есть несколько полезных сценариев: https://serverfault.com/questions/7056/whats-the-reverse-dns-command-line-utility , которые позволяют вам выполнять обратный поиск (только IPv4) как getent hosts , но в perl, чтобы вы могли возиться с ними.

Вышеуказанные две возможности используют ваш системный резольвер, включая все качели и карусели, связанные с nsswitch, поэтому они должны вести себя так, как это делают большинство приложений.

Не забудьте проверить на клиенте и на сервере, оба или оба будут делать обратный поиск.

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

 $ while read opt p1 ; do [ "$opt" = "nameserver" ] && dig @$p1 www.google.com +short +identify; done < /etc/resolv.conf 

и проверить обратный DNS:

 $ dig www.google.com +short | xargs -n1 -i dig -x {} PTR +short +identify 

Чтобы отладить это, вам нужно будет проверить:

  • /etc/host.conf (различные параметры, включая проверку паролей через обратный DNS)
  • /etc/resolv.conf (ваши резольверы)
  • /etc/nsswitch.conf (какие базы данных проверяются, например /etc/hosts , DNS, LDAP и т. д.)
  • вывод dnstrace и / или dig +trace
  • /etc/gai.conf , если есть. Помимо всего прочего, это может контролировать, сортируются ли записи AAAA6 AAAA до записей A.
  • /etc/nscd.conf если nscd используется

Если у вас есть доступ к проводке и корню, вы можете смотреть запросы DNS на провод:

 # tshark -w dns.cap "port 53" # tshark -V -ta -n -r dns.cap 

(Параметр -V слишком многословный, однако разработчикам не приходилось устанавливать отметки времени в выводе для обработки протокола с -O dns . Возможно, это исправлено в более новой версии.)

Даже если вы не используете nscd прямо сейчас, вы можете легко увидеть, что происходит, если вы начнете интерактивно с опцией -dd или -ddd . Обратите внимание, что nscd только кэширует записи хоста (A / AAAA), поэтому записи PTR в конечном итоге будут кэшироваться с коротким (по умолчанию 20 с) временем жизни.

Решение glibc (и другие) поддерживает « RES_OPTIONS options debug » в /etc/resolv.conf а также переменную среды RES_OPTIONS которая может использоваться для включения отладки. К сожалению, эта полезная функциональность требует, чтобы DEBUG был включен, когда glibc построен, поэтому маловероятно, что вы сможете его использовать …

Для тяжелой работы лучшим кандидатом является ltrace , это позволяет отслеживать и записывать вызовы библиотеки timestamp, точно так же, как strace может отслеживать системные вызовы, например gethostbyname() или gethostbyaddr() . Недостаток: со многими уровнями косвенности, предлагаемыми nsswitch , вы, вероятно, заблудитесь в объемном выходе. Простой прогон в telnet дал мне 3000 строк вывода, внутри которых были похоронены два вызова gethostbyname() .

 $ ltrace -ttT -e "getaddr*+gethost*+getname*" getent ahosts www.google.com 13:42:06.118718 getent->getaddrinfo("www.google.com", nil, { 0x2a, 0, 0, 0, 0, nil, nil, nil }, { 0x2a, 0x2, 0x3, 0, 16, { 2, 0, { 0x69187d4a } }, "www.google.com", { 0x2a, 0x2, 0x2, 0x11, 16, { 2, 0, { 0x93187d4a } }, nil, { 0x2a, 0x2, 0x3, 0, 16, { 2, 0, { 0x67187d4a } }, nil, { 0x2a, 0x2, 0x2, 0x11, 16, { 2, 0, { 0x68187d4a } }, nil, ... } } } }) = 0 <0.042561> 

0x69187d4a сложнее понять, что происходит, потому что он не выводит человеческие читаемые IP-адреса ( 0x69187d4a = 105,24,125,74 -> 74.125.24.105). Вероятно, это лучший способ отслеживать локальные проблемы, поскольку вы можете видеть все вызовы через NSS.

Я использовал эти поправки в своем ~/.ltrace.conf для вышеуказанного, это может потребовать дальнейшего взлома:

 typedef size_t = int; typedef sockaddr = struct(short, short, in_addr); typedef addrinfo = struct; typedef addrinfo = struct(hex(int), hex(int), hex(int), hex(int), size_t, sockaddr*, string, addrinfo *); int getaddrinfo(string, string, addrinfo *, +addrinfo**); int getnameinfo(sockaddr*, uint, +string, +uint, +string, +uint, uint); 

Если у вас есть сомнения в Slow response в обратном запросе, вы можете попробовать любой из нижеприведенных методов, чтобы исправить одно и то же:

  1. Если возможно, отключите обратный поиск в своем приложении и посмотрите разницу
  2. Вы можете использовать Daewon кэш-памяти службы имен (nscd), который также кэширует PTR, но есть некоторые проблемы с безопасностью:

    Дайдж кеша службы имен (nscd) имеет поведение по умолчанию, которое
    не позволяет приложениям проверять записи DNS «PTR» против
    «А».

    В частности, nscd кэширует запрос на запись «PTR», а когда запрос приходит позже для записи «A», nscd просто разглашает
    информацию из кэшированной записи «PTR», вместо запроса
    авторитетный DNS для записи «A».

Ссылка ссылки

  • Является ли `grep -P` (Perl / Python regex) переносимым для большинства дистрибутивов Linux
  • Объединение двух частей вместе для создания единого сценария
  • извлечение данных из файла журнала и построение его с использованием Gnuplot
  • Может кто-нибудь уточнить этот сценарий Bash
  • Я хочу запустить команду cut, чтобы извлечь какой-либо столбец из большого файла и вставить его в другой файл:
  • Создайте новый файл, удалив новый символ строки в конце файла
  • Нам нужно, чтобы chmod сценарий оболочки, прежде чем он может быть rsh
  • Убедитесь, что переменная имеет определенное количество пробелов
  • Изменение размера изображения в скрипте с помощью Imagemagick
  • Инструмент для генерации трафика TCP
  • Как добавить две переменные, переданные в оболочке, которая возвращает число целых чисел?
  • Interesting Posts

    Как построить Live Debian CD / USB в Windows, загрузочный в режиме EFI?

    Как сделать modsecurity, чтобы наказать пользователей, добавив задержку при обнаружении некоторых SQL-инъекций

    Как отображать только некоторые части жесткого диска

    Сценарий оболочки читает отдельно столбцы из файла

    с помощью ! символ в эхо

    Какую командную строку использовать для настройки функции «Запуск в терминале» Double Commander для использования терминала XFCE?

    Могу ли я видеть изображения и смотреть фильмы внутри эмулятора терминала

    Сценарий, чтобы взять pid, дать имя cmd, сетевые подключения, дерево процессов, родительский / дедушка / ребенок

    есть ли альтернатива хвосту -f, который имеет удобную прокрутку?

    Как увеличить объем корня

    Почему я могу ping IP-адреса от 127.0.0.1 до 127.255.255.254?

    Жесткий диск игнорирует настройки hdparm

    Tmux-logging: zle reset-prompt причина войти в файл журнала

    Установка Fresh Linux (Debian и CentOS) не будет загружаться

    Как перевернуть строки между шаблоном в другой файл

    Linux и Unix - лучшая ОС в мире.