在 SMTP 上测试 VRFY 命令

Testing VRFY command on a SMTP

我正在尝试测试,如果存在 VRFY root 命令,则提供 IP 地址列表并连接到端口 25。 这是我制作的脚本:

import sys
import socket

socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)

with open('smtp_open.txt', 'r') as f:
    for line in f:
        print str.format(line)
        socket.connect((line, 25))
        banner=socket.recv(1024)
        print banner
        socket.send('VRFY' + ' root' + '\r\n')
        result=socket.recv(1024)
        print result
        socket.close()

这是输出:

10.11.1.22

220 barry ESMTP Sendmail 8.11.6/8.11.6; Sat, 26 Oct 2019 10:56:33 +0200

250 2.1.5 root <root@barry>

10.11.1.72

Traceback (most recent call last):
  File "VRFY_script.py", line 15, in <module>
    socket.connect((line, 25))
  File "/usr/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
  File "/usr/lib/python2.7/socket.py", line 174, in _dummy
    raise error(EBADF, 'Bad file descriptor')
socket.error: [Errno 9] Bad file descriptor

如您所见,它仅适用于第一个 ip,当它提供第二个 ip 作为输入时,输出会给我错误。

不能对多个连接使用同一个套接字。相反,您必须为每个新连接创建一个新的 TCP 套接字。即使您已明确关闭现有套接字,也无法重复使用它。