【问题标题】:Testing VRFY command on a SMTP在 SMTP 上测试 VRFY 命令
【发布时间】:2020-02-22 10:54:33
【问题描述】:

如果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 作为输入时,输出会给我错误。

【问题讨论】:

    标签: python file sockets smtp


    【解决方案1】:

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

    【讨论】:

    • 谢谢你的回答,我认为关闭套接字就足够了。顺便说一句,生成了一个新错误,我将socket.socket(socket.AF_INET, socket.SOCK_STREAM) 包含到with 构造中。这是现在的输出:10.11.1.22 220 barry ESMTP Sendmail 8.11.6/8.11.6; Sat, 26 Oct 2019 11:22:57 +0200 250 2.1.5 root &lt;root@barry&gt; 10.11.1.72 Traceback (most recent call last): File "VRFY_script.py", line 14, in &lt;module&gt; socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM) AttributeError: '_socketobject' object has no attribute 'socket'
    • @DarkPassenger:这是一个不同的问题,因此不应在评论中提出。但简而言之:您需要的包名称是socket。不幸的是,您也将套接字对象命名为socket,因此您隐藏了包。将您的套接字命名为 socks
    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    相关资源
    最近更新 更多