Всем привет!Есть нетривиальная задачка, нужна небольшая подсказка как её реализовать.
Задача:
Проверить с юникс-машины выдачу кода 200 по запросу HEAD в определённое время.
В обычном режиме проверяем с формированием запроса при помощи telnet:
telnet hostname 80
Trying hostname...
Connected to hostname.
Escape character is '^]'.
вводим:
HEAD / HTTP/1.1
HOST: hostnameвыдаётся код 200 OK
соединение закрывается.Вопрос в том, чтобы это пихнуть в скрипт. Пробовал:
#!/bin/bash
(sleep 2; echo "HEAD / HTTP/1.1"; sleep 2; echo "HOST: hostname"; sleep 2; exit) | telnet hostname 80 >hostname.logно похоже не передаю тем самым команды телнету.
Как их передать и чтобы всё в лог вписалось?
утилита expect в помощь
>утилита expect в помощьА как справиться со следующим...:
мм есть к примеру скрипт:
#!/usr/bin/expect -f # Выполнение операции используя telnet
spawn telnet cisco.test.ru
expect "login:" { send "adm\n"}
expect "Password:" { send "пароль\n"}
expect "#" {send "show users\n"}
expect "#" {send "exit\n"}тут всё ясно. Появляются #, посылаем команду.
А когда коннект идёт телнетом по 80 порту никаких # не появляется - пустая строка. Как передать и что сделать в этом случае?
Что-то вроде
#!/usr/bin/expect -f
spawn telnet hostname 80
expect "" {send "HEAD / HTTP/1.1\n"}
expect "" {send "HOST: hostname\n"}
expect "" {send "exit\n"}не отрабатывает. Также не отрабатывают с \n и просто с send без expect.
nc надо
На perle можно так:use Net::Telnet();
my $t = new Net::Telnet(host => 'host.ru',
port => '80');$t->open();
$t->print("HEAD / HTTP/1.0");
$t->print("\n");
my $respon;
($respon)=$t->waitfor('/200 OK/');
exit();