Получение IP-адреса из команды ping с помощью sed? [дубликат]

Предполагая, что вы используете GNU tar , вы можете сказать:

tar --transform 's/.*\///' -xzf archive.tgz

Это уберет все до последней косой черты из файла имена.

3
31.07.2018, 11:48
3 ответа

Просматривая Google, я нашел ссылку на другое сообщение unix.SE , в котором упоминается getent - я не даже знаю, что эта программа существовала.

Вы можете использовать getent , например dig , чтобы преобразовать IP в имя хоста - и в моей системе по умолчанию было установлено getent , но не dig . Если вам нужны хосты ipv6, измените ahostsv4 на ahostsv6 .

getent ahostsv4 google.com | awk '{print $1}' | head -1

Я добавил этот ответ, потому что плохо разбираюсь в регулярных выражениях / sed и не смог бы найти ответ @heemayl.

6
27.01.2020, 21:07

ping предназначен для проверки того, работает ли хост или нет, на основе ответа ICMP, это никогда не происходит. Правильный инструмент только для определения IP-адреса, для этого есть специальные инструменты.

Вы должны посмотреть dig , host , nslookup - все, что вам больше подходит.

Вот результат dig :

% dig +short google.com
123.108.243.57
123.108.243.51
123.108.243.54
123.108.243.48
123.108.243.60
123.108.243.52
123.108.243.56
123.108.243.55
123.108.243.61
123.108.243.58
123.108.243.49
123.108.243.50
123.108.243.59
123.108.243.47
123.108.243.53

В качестве примечания, в Linux, если вы хотите запросить NSSwitch (переключатель службы имен), т.е. / etc / nsswitch , затем используйте команду getent с базой данных hosts (или ahosts ), например:

getent hosts google.com

На моем компьютере, у меня есть:

hosts: files mdns4 dns

в /etc/nsswitch.conf , поэтому хосты getent будут запрашивать последовательно и использовать gethostbyaddr (3) или gethostbyname (3) на основе имени и хостов будет использовать getaddrinfo (3) .

По сути, с моей конфигурацией сначала проверяется / etc / hosts , затем mDNS и, наконец, DNS.


Если вы настаиваете на использовании ping и sed , вы можете сделать:

% ping -c1 google.com | sed -nE 's/^PING[^(]+\(([^)]+)\).*/\1/p'
123.108.243.56
16
27.01.2020, 21:07

Следует отметить, что, как вы видите в выходных данных @heemayl dig , некоторые сайты могут иметь более одного IP-адреса. Скорее всего, вам понадобится поиск в DNS, чтобы получить их все, поскольку ping будет использовать только первый полученный адрес. То же самое для всего, что в основном хочет подключиться, и не перечисляет конкретно адреса.

(Кроме того, в случае чего-то вроде Google вы получите разные IP-адреса в зависимости от того, где вы находитесь. Возможно, здесь нет проблем, но стоит отметить.)

Еще кое-что о команде ты использовал. Это: tr -d '(44): \ n' удаляет все копии символов (, 4 , ) , : и \ n из входа. tr всегда смотрит только на отдельные символы, а не на строки. Посмотрев на полученный результат, вы увидите, что 4 пропал в середине IP-адреса. Для работы со строками воспользуйтесь другим инструментом, например sed .

Чтобы показать разные цвета навес для велосипедов , вот еще один простой, с GNU grep:

$ ping google.com -c1 | head -1 | grep -Eo '[0-9.]{4,}'
172.217.22.174
3
27.01.2020, 21:07

Теги

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