Тестирование команды VRFY на SMTP - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь проверить, выдав список IP-адресов и подключившись к порту 25, если существует команда VRFY root. это сценарий, который я сделал:

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в качестве входных данных выводит мне ошибку.

1 Ответ

1 голос
/ 26 октября 2019

Нельзя использовать один и тот же сокет для нескольких соединений. Вместо этого вы должны создать новый сокет TCP для каждого нового соединения. Повторное использование существующего сокета не будет работать, даже если вы явно его закрыли.

...