从bash脚本发送“ENTER”

时间:2014-06-06 14:09:46

标签: linux bash shell echo telnet

我正在尝试创建一个bash脚本来模拟对我们的邮件服务器的邮件攻击。出于这个原因,我想创建一个bash脚本来向我们的服务器发送数百封邮件,但是当我启动命令时:

$telnet 192.168.12.1 25< - 其中192.168.12.1是我们服务器的IP

telnet会话启动以及我后面写的所有命令都没有执行。 我还尝试创建第二个脚本,以便在创建此命令之后在telnet会话上启动命令,但是当我从第二个脚本写入时:

$echo -ne "EHLO domain.com\r\f" 它打印命令但不执行ENTER,因此不执行命令。 有什么想法吗?

4 个答案:

答案 0 :(得分:2)

你应该管道stdin脚本

telnet 192.168.12.1 25< filenamewithcommands.txt

这将打开文件中所有字符的telnet命令和管道,包括返回

答案 1 :(得分:2)

试试

  

echo -ne" EHLO domain.com \ r \ n"

  

echo -e" EHLO domain.com \ r"

或者只是尝试一下这里的内容:http://mailtestingtools.blogspot.hu/(英文版)

答案 2 :(得分:2)

SMTP的结尾是\r\n,而不是\r\f,但我不认为这是你的问题。当你做这样的事情时:

telnet mailhost 25 < commands.txt

文本文件中的数据将立即发送到邮件服务器,然后关闭连接,这将阻止看到邮件服务器的响应。你可能会发现:

{ cat commands.txt; sleep 1; } | telnet mailhost.25

可让您查看回复。 (我同意nc(netcat)比telnet更适合此类工作的评论。

这可能不是测试邮件炸弹的最佳方式,但它可能会让你开始。


注意:ESMTP(即以EHLO而不是HELO开头的会话)可能会使用&#34;流水线&#34;如果服务器通过向250-PIPELINING回复EHLO来表明它会接受,但您仍然需要等待服务器回复250 OK DATA。有关详细信息,请参阅RFC 2920

答案 3 :(得分:0)

以上都没有奏效。我找到了解决方案。我用了expect命令。这是我在终端上写的4封邮件:

for i in {1..4} do expect ./telnet.exp 192.168.12.1 abc@hotmail.com vmail@ho.tld done

命令&#34;期待&#34;阅读文件telnet.exp中的命令,用ip 192.168.12.1联系服务器,发送电子邮件从abc@hotmail.com到vmail@gmail.com

文件内容telnet.exp:

#! /usr/bin/expect

set timeout 20
set server [lindex $argv 0]
set sndr_mail [lindex $argv 1]
set rcpt_mail [lindex $argv 2]
set ts [timestamp -format "%Y-%m-%d %H:%M:%S"]

spawn telnet $server 25

expect "Connected to "
expect "220 "
send "HELO galaxy\n"
expect "250 "
send "MAIL FROM:<$sndr_mail>\n"
expect "250 "
send "RCPT TO:<$rcpt_mail>\n"
expect "250 "
send "DATA\n"
expect "354 "
send "From:$sndr_mail\n"
send "To:$rcpt_mail\n"
send "Subject:Testing $server\n\n"
send "Testing: $server\n"
send "Timestamp: $ts\n"
send ".\n"
expect "250 "
send "quit\n"
expect "221 "

# TIAF!

感谢所有人