简单 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]
我正在尝试编写一个简单的 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]