协助编写Python脚本
我已经用Python编写了一段代码,我想修改它。 我在我的组织中执行渗透测试时使用它,我希望使我的脚本更好。 脚本获取我输入的用户名,并通过端口25连接到SMTP服务器,检查用户是否存在。 以下是脚本:协助编写Python脚本,python,Python,我已经用Python编写了一段代码,我想修改它。 我在我的组织中执行渗透测试时使用它,我希望使我的脚本更好。 脚本获取我输入的用户名,并通过端口25连接到SMTP服务器,检查用户是否存在。 以下是脚本: #!/usr/bin/python import socket import sys if len(sys.argv) != 2: print "Usage: vrfy.py <username>" sys.exit(0) # Create a Socket
#!/usr/bin/python
import socket
import sys
if len(sys.argv) != 2:
print "Usage: vrfy.py <username>"
sys.exit(0)
# Create a Socket
s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect to the Server
connect=s.connect(('192.168.0.10',25))
# Recieve the banner
banner=s.recv(1024)
print banner
# VRFY a user
s.send('VRFY ' + sys.argv[1] + '\r\n')
result=s.recv(1024)
print result
# Close the socket
s.close()
#/usr/bin/python
导入套接字
导入系统
如果len(sys.argv)!=2:
打印“用法:vrfy.py”
系统出口(0)
#创建一个套接字
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#连接到服务器
connect=s.connect(('192.168.0.10',25))
#接受旗帜
banner=s.recv(1024)
印刷横幅
#VRFY用户
s、 发送('VRFY'+sys.argv[1]+'\r\n')
结果=s.recv(1024)
打印结果
#合上插座
s、 关闭()
我要执行的更改如下:
我不想只输入一个用户名进行检查,而是想提到一个txt文件的位置,脚本将读取它包含的所有用户名
此外,我希望脚本中的IP地址不会硬编码,并且每次使用脚本时都需要插入它。
多谢各位
Bar Aviv使用类似以下的方法:
with open(sys.argv[1]) as f:
for line in f:
username = line.replace('\n', '')
print 'Testing with user: %s' % user
对于IP地址,可以将其作为第二个参数传递--verify.py username list file server IP address
--并引用为sys.argv[2]
您还可以执行以下操作:
try:
userlist = sys.argv[1]
server_address = sys.argv[2]
except IndexError:
print 'Usage: verify.py username-list-file server-ip-address'
sys.exit(-1)
您实际上不应该像那样直接使用低级套接字
send()
和recv()
。他们不能保证发送/接收任何特定数量的数据。它可能恰好按照您希望的方式与某个特定邮件服务器进行通信,但一旦命令/响应无法与IP数据包一一对应,您就会得到奇怪的结果
如果您想要一个简单的阻塞会话流,请尝试从中获得的文件接口
您可能还应该实现更多的SMTP。。。至少说一声helo
下面的代码从标准输入中读取用户名,因此您可以通过以下方式将一个用户名文件指向它:
python vrfy.py 127.0.0.1 < usernames.txt
这就是为什么我在邮件上禁用VRFY的原因。
users= []
for line in sys.stdin:
line= line.strip()
if line!='':
users.append(line)
s= socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((sys.argv[1], 25))
fp= s.makefile('rwb')
fp.readline() # ignore banner
fp.write('HELO test.example.com\r\n')
fp.flush()
fp.readline() # ignore response
for user in users:
fp.write('VRFY %s\r\n' % user)
fp.flush()
print '%s: %s' % (user, fp.readline().strip())
fp.write('QUIT\r\n')
fp.flush()
s.close()