Назад | Перейти на главную страницу

Передача аргументов в постоянные сеансы Telnet

У меня есть служба whois, которая позволяет мне подключаться к нему через Telnet и поддерживать соединение через Telnet без каких-либо ограничений по времени. Мне нужно выполнить тысячи запросов whois через этот сеанс Telnet. Например, для whois домена я делаю

echo "mydomain.com"; sleep 5| telnet whoismyserver.com 3454

Я не могу запустить эту команду для тысяч запросов whois. Итак, есть ли способ, чтобы я мог держать сеансы telnet открытыми и передавать ему аргументы?

Я хочу поддерживать постоянное соединение Telnet. и передать ему аргументы. это возможно? например, в приведенной выше команде я могу передать аргумент "echo domain" только один раз, но я хочу передать длинный список Echos, но с разными интервалами, и это тоже для открытия только постоянных сеансов telnet. я хочу передать все команды одну за другой в разное время в один сеанс telnet

Почему вы не можете просто запустить whois на своем локальном компьютере и выполнить его скрипт / пакетную обработку? Или просто подключитесь к другой системе через telnet и создайте там сценарий? Необходимость делать это через Telnet в другую систему кажется ужасной.

Сказав это, это является для чего создан Expect (баллы за @larsks), поэтому, если вам нужно это сделать, используйте это.

/ edit - Мы не ваш Google, но вот начало: http://expect.sourceforge.net/

Вы можете сделать это с помощью именованного канала (fifo)

mkfifo my.pipe
cat >my.pipe &
cat my.fifo | telnet telnet whois.iana.org  43
echo "serverfault.com" >>my.fifo

Похоже, это работает, поскольку команда echo отправляет serverfault.com на сервер whois. У меня нет доступа к серверу, который разрешает постоянные соединения, поэтому я не могу протестировать его для нескольких имен. но читать ваши доменные имена и передавать их в канал должно быть легко.

Если вы хотите собрать вывод в файл, просто перенаправьте stdout

cat my.fifo | telnet telnet whois.iana.org  43 >some.output.file

Поиск в архиве CPAN модуля Perl NET :: Telnet и проверьте примеры.

use Net::Telnet ();
$t = new Net::Telnet (Timeout => 10,
                      Prompt => '/bash\$ $/');
$t->open($host);
$t->login($username, $passwd);
@lines = $t->cmd("who");
print @lines;