У меня есть служба 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;