验证远程服务器使用哪种 SMTP 服务器软件

验证远程服务器使用哪种 SMTP 服务器软件

我正在尝试对异构服务器池中使用的 smtp 服务器进行分类,到目前为止我正在执行以下操作:

echo "HELO localhost"  | telnet localhost 25 2>/dev/null | grep 220
#process the output of command

我的问题是服务器在套接字关闭之前并不总是有时间回答“220 ...”。

因此,我正在寻找一个相对较短、基于 bash 且更可靠的脚本。我找不到一种简单的方法让命令在关闭 TCP 连接之前等待几秒钟。

我尝试过expect,但无法让它工作,因为这需要一个外部文件,而该文件并不真正适合我的审计套件,而且我不能确定它是否可以在所有服务器上使用。

有什么简单的想法吗?

编辑:版本(是的,我知道,很老了):

  • 更新:
  • coreutils-4.5.3-28.1
  • linux-2.4.21

答案1

使用nmap(1)指纹识别功能,来自手册页:

SERVICE/VERSION DETECTION:
-sV: Probe open ports to determine service/version info

一个例子:

$ nmap -sV some.mail.server.biz -p 25

Starting Nmap 6.40 ( http://nmap.org ) at 2013-09-17 17:50 CEST
    Nmap scan report for some.mail.server.biz (10.0.0.135)
Host is up (0.0052s latency).
PORT   STATE SERVICE VERSION
25/tcp open  smtp    MailEnable smptd 7.08--7.08
Service Info: Host: some.domain.com; OS: Windows; CPE: cpe:/o:microsoft:windows

Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.67 seconds

我不知道它对你是否有用,但输出使用持续教育

答案2

聊天中的 Bob 建议使用子外壳,包括在两个回显之间进行睡眠。

这很有魅力:

( echo "EHLO `hostname`"; sleep 1; echo "QUIT" ) | telnet `hostname` 25

grep 220现在可以,并且我很确定能在一秒的范围内得到答案。

相关内容