简单 Python SMTP 枚举脚本

Simple Python SMTP Enumeration script

我正在尝试编写一个简单的 Python SMTP 枚举脚本,它从文本文件(作为第二个参数提供的文件名 - sys.argv[2])读取用户名,并根据 SMTP 服务器检查它们(作为第一个参数提供的主机名或 ip - sys.argv[1]。我发现了一些接近的东西,并稍微调整了一下,如下所示:

#!/usr/bin/python

import socket
import sys

users = sys.argv[2]
for line in users:
    line = line.strip()
    if line!='':
        users.append(line)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((sys.argv[1], 25))
fn = s.makefile('rwb')

fn.readline()                
fn.write('HELO testing.com \r\n')
fn.flush()
fn.readline()

for user in users:
    fn.write('VRFY %s\r\n' % user)
    fn.flush()
    print '%s: %s' % (user, fn.readline().strip())

fn.write('QUIT\r\n')
fn.flush()
s.close()

然而,当我运行脚本(例如):

./smtp-vrfy.py 192.168.1.9 users.txt 

它导致错误:

文件“./smtp-vrfy.py”,第 10 行,在 users.append(行) AttributeError: 'str' 对象没有属性 'append'

我做错了什么?我该如何解决?也许有更简单的方法来完成我想做的事情?

users 是文件名,但您没有阅读它。相反,看看会发生什么:

>>> users = "users.txt"
>>> for line in users:
...     print(line)
...
u
s
e
r
s
.
t
x
t

你可能想要:

with open(users) as f:
    for line in f:
        # ...

更好:

filename = sys.argv[2]
with open(filename) as f:
    users = [line.strip() for line in f.readlines() if line]