5

我需要在 telnet 中进行大量测试。我正在研究一些方法来自动检测我们电子邮件服务器上的字典攻击,然后将它们限制回去,或者将它们列入黑名单等。

我现在准备进行一些测试,看看我的工作是否有回报。我想我会下载一些脚本小子应用程序来运行测试。我找不到任何东西,而那些我能找到的东西是坏的或二进制的和不可配置的。

我将有一个我在循环中生成的地址列表。

我想将 $address 作为参数并执行以下操作:

telnet myserver.com 25 helo some-string.com mail from: me@me.com rcpt to: $address quit

其中,我需要测试一些东西,例如,如果我启用灰名单,我想使脚本失败,因为这是我的第一个对策。我想在那种情况下,我只会有 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

4 回答 4

6

试试 netcat: http: //netcat.sourceforge.net/

它可以让您在套接字上发送和接收数据。telnet 不是您想要的——它是用于交互式使用的。

于 2009-03-05T03:58:05.633 回答
2

期望围绕netcat(而不是telnet)可能是最好的初始选择。但是,如果你真的需要这个,我会使用 perl。它有 SMTP 客户端库。

于 2009-03-05T04:18:36.003 回答
1

我很惊讶 Expect 没有为你做这件事,因为它只是为这类事情而写的。

Perl 在某些方面更简单,可以完成这样的工作。但是有了 Perl,你就不用 Telnet 了,你可以直接打开 25 端口。

如果您真的想锻炼您的服务器,请获取Siege的源并将其修改为使用 SMTP 而不是 HTTP。那是我最喜欢的用于测试 Apache 性能的工具,我相信让它测试 Sendmail 不会太难。

于 2009-03-05T04:02:49.257 回答
0

您可以为此使用 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}
于 2017-07-20T15:38:39.890 回答