Как я могу автоматизировать тестирование порта telnet 25? - PullRequest
5 голосов
/ 05 марта 2009

Мне нужно сделать большой набор тестов в telnet. Я работаю над некоторыми способами автоматического обнаружения атак по словарю на нашем почтовом сервере, а затем отбрасываю их назад или помещаю в черный список и т. Д.

Теперь я готов выполнить несколько тестов и посмотреть, окупится ли моя работа. Я подумал, что просто скачаю какое-нибудь скрипт-детское приложение для запуска тестов. Я не могу найти ни одного, и те, которые я могу, плохие или двоичные и не конфигурируемые.

У меня будет список адресов, которые я генерирую в цикле.

Я хочу взять $ address в качестве аргумента и сделать это:

telnet myserver.com 25 привет some-string.com почта от: me@me.com rcpt to: $ address бросить курить

В рамках этого мне нужно протестировать несколько вещей, например, если я включу серый список, я хочу потерпеть неудачу в сценарии, так как это моя первая контрмера. Полагаю, в этом случае у меня просто будет тайм-аут telnet?

  • helo должен возвращать строку кода, начинающуюся с 220, что примерно так же точно, как мне нужно сделать этот тест.

  • mail from должен вернуть 250, или достаточно найти OK

  • rctp to должен возвращать 250 или Ok иногда, когда я отправляю действительного пользователя, но в большинстве случаев я отправляю неверный адрес, поэтому я ищу отсутствие 250 или OK.

  • Наконец, я вышлю quit.

Я не могу получить условия и ведение журнала в интерактивной ситуации. Я посмотрел на expect, но не смог заставить его работать.

Пока мой код:

echo -e "helo foo\nmail from: foo.... | telnet example.com 25 | grep -i blah 

Это не работает, как ожидалось.

Что я могу сделать, чтобы достичь своей цели?

Ответы [ 4 ]

6 голосов
/ 05 марта 2009

Попробуйте netcat: http://netcat.sourceforge.net/

Это позволит вам отправлять и получать данные в сокете. Telnet - это не то, что вам нужно, а интерактивное использование.

2 голосов
/ 05 марта 2009

ожидаем, что обхват вокруг netcat (вместо telnet), вероятно, лучшая начальная ставка Но, если вам это действительно нужно, я бы использовал Perl. Для этого есть клиентские библиотеки SMTP.

1 голос
/ 05 марта 2009

Я удивлен, что Expect не сделал это для вас, потому что он написан только для таких вещей.

Perl в некоторых отношениях проще и может получить такую ​​работу. Но с Perl вы не будете беспокоиться о Telnet, вместо этого вы можете напрямую открыть порт 25.

Если вы действительно хотите тренировать свой сервер, получите исходный код Siege и измените его так, чтобы он говорил по SMTP вместо HTTP. Это был мой любимый инструмент для тестирования производительности Apache, и я уверен, что не составит труда сделать так, чтобы он тестировал Sendmail.

0 голосов
/ 20 июля 2017

Для этого вы можете использовать синтаксис Bash, например,

exec {stream}<>/dev/tcp/example.com/80
printf "GET / HTTP/1.1\nHost: example.com\nConnection: close\n\n" >&${stream}
grep Example <&${stream}

Вот еще один пример синтаксиса, который выводит список ключей из memcached :

exec {memcache}<>/dev/tcp/localhost/11211; printf "stats items\nquit\n" >&${memcache}; cat <&${memcache}
...