【发布时间】:2011-04-20 22:21:15
【问题描述】:
我对 Python 完全陌生(截至半小时前)并尝试编写一个简单的脚本来枚举 SMTP 服务器上的用户。
用户文件是一个简单的用户名列表(每行一个)。
脚本运行良好,但随着循环的每次迭代,它都会变慢,直到在循环 14 附近,它似乎完全挂起。没有错误 - 我必须 ^c。
谁能解释一下这个问题?
TIA, 汤姆
#!/usr/bin/python
import socket
import sys
if len(sys.argv) != 2:
print "Usage: vrfy.py <username file>"
sys.exit(0)
#open user file
file=open(sys.argv[1], 'r')
users=[x.strip() for x in file.readlines()]
file.close
#Just for debugging
print users
# Create a Socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect to the Server
connect=s.connect(('192.168.13.222',25))
for x in users:
# VRFY a user
s.send('VRFY ' + x + '\r\n')
result=s.recv(1024)
print result
# Close the socket
s.close()
【问题讨论】:
-
对于菜鸟来说相当先进的东西。 :)
-
不过有两个注意事项:
file.close不做任何事情,你想要file.close()(将来,你应该慢慢习惯上下文管理器),.readlines()调用毫无意义(您可以按原样逐行迭代文件)。 -
问题?你惹恼了系统管理员。
-
如果 Ignacio 的评论不清楚,系统管理员很可能故意减慢您的连接速度,因为他们认为您是垃圾邮件机器人。如果您使用其他语言执行此操作,请查看它是否会变慢。