我正在尝试编写一个简单的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'对象没有属性'追加'
我做错了什么?我该如何解决?也许有一种更简单的方法来完成我想要做的事情?
答案 0 :(得分:3)
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]