strace не отображает /etc/hosts в команде ping/host в CentOS 7

Вы также можете создать «сервис» для systemd. Например:

Создайте пустой текстовый файл, используя vi, nano или что-то еще:

[Unit]
Description=My service
[Service]
ExecStart=/path/to/my/script.sh
ExecStop=/usr/bin/killall script.sh

# Useful during debugging; remove it once the service is working
StandardOutput=console

[Install]
WantedBy=multi-user.target

Сохраните его под /etc/systemd/system/myscript.serviceили под любым другим именем,

Затем запустите:

sudo systemctl start myscript

Вы можете проверить сервис с помощью sudo systemctl status myscriptи остановить с помощью sudo systemctl stop myscript. Чтобы он запускался после загрузки, запустите systemctl enable myscriptот имени пользователя root.

0
08.08.2019, 18:46
1 ответ

host, nslookupи dig— все утилиты DNS. :они выполняют DNS-запросы и, следовательно, обходят обычное разрешение имен, предоставляемое OS/libc, посредством обычных вызовов gethostbyname()и getaddrinfo().

Обратите внимание, что они по-прежнему используют /etc/resolv.confсебя в качестве своего рода начальной загрузки :, чтобы узнать, с каким сервером связаться, если вы его не предоставите (, и в большинстве случаев всегда предпочтительнее указывать, какой сервер имен вы запрашиваете с помощью этих инструменты, как и обычное устранение неполадок DNS, часто начинается с запроса авторитетных серверов имен, а затем только рекурсивных, которые хранятся в/etc/resolv.conf).

pingпочти не подходит для любого вида устранения неполадок, но в отношении потребностей в разрешении имен он использует стандартные инструменты, предоставляемые OS/libc, которые определяют, как происходит разрешение имен, если это с DNS, локальный файл, LDAP, NIS, mDNS или любой другой источник информации. Это роль /etc/nsswitch.conf. И, следовательно, вы увидите, как он открывает файлы:

# strace -e open ping -c 1 www.example.com
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libcap.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 4
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 4
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 4
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 4
open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 4
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4
open("/lib/x86_64-linux-gnu/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = 4
open("/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 4
PING www.example.com (93.184.216.34) 56(84) bytes of data.
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 4
64 bytes from 93.184.216.34: icmp_seq=1 ttl=57 time=1.00 ms

--- www.example.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.003/1.003/1.003/0.000 ms
+++ exited with 0 +++

getent— это общая утилита для запроса информации из источников данных, перечисленных в /etc/nsswitch.conf. Итак, у вас есть «базы данных» ahostsи hosts, с которыми вы можете использовать getent. Вызов будет или не будет использовать DNS, в зависимости от содержимого /etc/nsswitch.confи содержимого /etc/hosts, если filesуказан в качестве источника для этих баз данных.

# strace -e open getent ahostsv4 www.example.com
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/locale/UTF-8/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/host.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/hosts", O_RDONLY|O_CLOEXEC)  = 3
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_dns.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
93.184.216.34   STREAM www.example.com
93.184.216.34   DGRAM
93.184.216.34   RAW
+++ exited with 0 +++

Вы даже можете сделать вывод, что он сначала проверяет /etc/hosts, потому что он сначала открывает libnss_files, и с этой конфигурацией, поскольку запись не найдена, он возвращается к DNS благодаря libnss_dns.

PS :также обратите внимание, что /etc/gai.confможет использоваться, когда именно OS/libc обрабатывает разрешение имен, поскольку она определяет порядок IP-адресов (и, как правило, если IPv6 предпочтительнее IPv4. или наоборот ), что вступает в игру для хостов, имеющих несколько адресов одного или нескольких семейств адресов.

2
28.01.2020, 02:39

Теги

Похожие вопросы