我尝试使用sh脚本来netcat一个IP,并在端口未应答时发送电子邮件。
到目前为止我有这个但是altought脚本正在工作并且输出文件已填写,但我收到的邮件是空的。我通过在输出文件中用vi写一些内容来调试它,然后我收到了我写的电子邮件。
这是脚本:
netcat -z -v -w x.x.x.x 23 > /path/resultt.txt 2>&1
if grep -q "timed out" /path/resultt.txt ;
then
ssmtp email@gmail.com < /path/resultt.txt
else
echo
fi
我认为这与做2>&1
答案 0 :(得分:0)
您使用2>&1
或&#34;将stderr发送到与stdout相同的位置&#34;应该不是问题。如果最后一个参数是一个数字,我想确保我的重定向有fd编号。但是,没有它你的确有效。
我使用基于telnet的公共服务进行此演示。它应该适用于所有人,但是就像所有事物都是免费的一样,它可能不会永远存在。
$ nc telnetmyip.com 23 > /tmp/out 2>&1
$ cat /tmp/out
{
"comment": "## Your IP Address is 96.67.120.126 (59742) ##",
"family": "ipv4",
"ip": "96.67.120.126",
"port": "59742",
"protocol": "telnet",
"version": "v1.1.0",
"website": "https://github.com/packetsar/checkmyip"
}
所以,这完全符合预期。
现在,您说&#34;但我收到的邮件是空的&#34; 。根据您的代码,只有在&#34;超时后才会发送电子邮件。 存在于文件中。因此,发送空电子邮件的唯一方法是,如果您没有将正确的文件提供给ssmtp
正确的方式。
您可能需要考虑像https://wiki.archlinux.org/index.php/SSMTP#Sending_email
中的示例一样# only do this once
$ cat > header.txt <<'EOF'
To:email@gmail.com
From:youraccount@gmail.com
Subject: telnet resulted in a timeout
Hello, admin. I hope this doesn't ruin your day.
The command `netcat -z -v -w x.x.x.x 23 > /path/resultt.txt` resulted in this:
EOF
$ cat header.txt /path/resultt.txt | sendmail -t
我希望有所帮助。最后,我将重复:发送空电子邮件的唯一方法是,如果您没有将正确的文件提供给ssmtp
正确的方式。 (假设您已手动确认ssmtp
在此环境中有效。)