2011-12-13 3 views
2

Как часть стартового скрипта мне нужно проверить, действительно ли работает конкретная служба TCP. Читая конфигурационный файл, я знаю, что такое целевой хост и имя службы. Я намеревался использовать nc, чтобы отправить образец запроса этой службе, потому что я знаю, как его использовать, и он хорошо работает, проблема в том, что nc не может разрешить имя службы в моей конфигурации на номер порта ...bash разрешить имя службы

Который подводит меня к моему (2-частному) вопросу: Есть ли встроенная или обычно распределенная утилита bash (будет частью или дистрибутивом RHEL 5), которая может разрешить имя службы до номера порта? Есть ли простая утилита, кроме netcat, которую я мог бы использовать в моем скрипте?

+0

Вы должны предпочесть предпочтение соц. –

+0

@ jørgensen Я обязательно проверю его для использования в будущем, но он недоступен в моей целевой системе, и боль при его развертывании будет намного хуже, чем худший случай grepping номера порта из файла служб. – Hoons

ответ

7

getent - это то, что вы хотите.

Например: getent services ftp

Вам нужно разобрать выход в любом случае, но у вас есть порт.

+0

Я действительно надеялся не разобрать результат ... но это, по-видимому, лучший вариант на этом этапе. – Hoons

1

Есть /etc/services файл в вашей системе? Вероятно, каждая портативная программа (включая nc, getent и многие другие) использует getservbyname(3) для разрешения номера порта для данного имени службы. В свою очередь, эта функция считывает данные из файла /etc/services.

+0

Существует **/etc/services ** файл, и я знаю, что он содержит. Я специально хочу избежать grepping ценности, в которой я нуждаюсь, и разбора. – Hoons

+1

Вам не нужно ничего делать. Стандартная функция libc 'getservbyname' делает это. И, как я уже сказал, почти все программы используют эту функцию для получения номера порта для данной службы. И 'nc' тоже! Прямо сейчас я временно удалил/etc/services в своей системе, а 'nc' не смог разрешить службы по имени. Например, команда 'nc localhost ssh' дает:' недопустимый порт ssh: нет такого файла или каталога'. Когда я восстановил файл/etc/services, указанная команда могла успешно работать. Итак, верно ли содержимое вашего файла/etc/services? И содержит ли он необходимые имена служб? –

+0

Я знаю функцию 'getservbyname' и роль, которую играет файл'/etc/services'. К сожалению, версия nc, установленная на наших серверах (1.84), не разрешает службы: 'nc localhost ssh' возвращает:' nc: диапазон портов недействителен', в то время как 'getservbyname' возвращает 22. Я должен был уточнить версию из 'nc' я был доступен. – Hoons

Смежные вопросы