我需要在telnet中进行大量测试。我正在研究一些方法来自动检测我们的电子邮件服务器上的字典攻击,然后限制它们,或将它们列入黑名单等。
我现在准备进行一些测试,看看我的工作是否有成效。我想我会下载一些脚本kiddy app来运行测试。我找不到任何我可以找到的,或者是二进制和不可配置的。
我将在循环中生成一个地址列表。
我想把$ address作为参数并执行此操作:
telnet myserver.com 25 helo some-string.com 来自:me@me.com的邮件 rcpt:$地址 退出
在其中,我需要测试一些东西,例如,如果我启用了灰名单,我想让脚本失败,因为这是我的第一个对策。我想在那种情况下,我只会有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
这没有达到预期的效果。
我可以做些什么来实现我的目标?
答案 0 :(得分:6)
尝试netcat:http://netcat.sourceforge.net/
它允许您在套接字上发送和接收数据。 telnet不是你想要的 - 它是用于交互式的。
答案 1 :(得分:2)
答案 2 :(得分:1)
我很惊讶Expect没有为你做这件事,因为它是为这些事情写的。
Perl在某些方面更简单,可以完成这样的工作。但是使用Perl,你不会打扰Telnet,你可以直接打开25端口。
如果你真的想锻炼你的服务器,请获取Siege的来源并修改它来谈论SMTP而不是HTTP。这是我最喜欢的测试Apache性能的工具,我确信它不会太难以测试Sendmail。
答案 3 :(得分: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}
以下是dumps list of keys from memcached:
的另一个语法示例exec {memcache}<>/dev/tcp/localhost/11211; printf "stats items\nquit\n" >&${memcache}; cat <&${memcache}