Множественное соединение Telnet в цикле Expect while

Хорошо, у меня было то же самое, и мне потребовалось некоторое время, чтобы разобраться.

Я не могу найти способ отправить несколько строк в запросе при использовании s_client в интерактивном режиме. Он всегда отправляет запрос сразу, как только вы ввели первую строку. Если кто-то знает, как обойти это, то, пожалуйста, дайте мне знать!

Edit: Я вижу, что Вэй Хэ опубликовал способ сделать это - использовать флаг -crlf, но оставить этот ответ здесь в качестве альтернативного метода.

В то же время, как предложил jww, вы должны использовать echoдля этого:

echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | openssl s_client ...

Следующая проблема заключается в том, что по умолчанию openssl закрывает соединение при закрытии входного файла. Что и происходит сразу при использовании echoтаким образом. Таким образом, у вас нет времени, чтобы увидеть ответ, а вместо этого просто увидеть результат DONE! :-(

Вы можете добавить sleepк команде echo, чтобы обойти это (обратите внимание, что скобки важны):

(echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"; sleep 10) | openssl s_client ...

Или, лучше, вы можете использовать -ign_eofопция, чтобы оставить соединение открытым:

echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | openssl s_client -ign_eof ...

Или еще лучше, если вас интересуют только HTTP-ответы, то используйте опцию -quite, которая скрывает большую часть шума TLS, а также устанавливает эту опцию -ign_eof для вас:

echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | openssl s_client -quiet ...
1
14.03.2017, 19:07
1 ответ
#!/usr/bin/env expect

# open first argument to program...
set fd [open [lindex $argv 0]]

# for each line using that file handle...
while {[gets $fd line] >= 0} {
    # split on , and select the last one...
    set lastcolumn [lindex [split $line ","] end]
    # whoops there's some whitespace so clear that...
    set ip [string trim $lastcolumn " "]
    puts ">$ip<"
}
0
28.01.2020, 01:00

Теги

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