我编写了这个脚本来测试一个ip地址,用于探测smtp服务器上的特定用户名。我现在正在尝试移植此脚本以运行相同的测试,但是对于一系列IP地址而不是单个地址。任何人都可以了解如何实现这一目标吗?
#!/usr/bin/python
import socket
import sys
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()
fp.write('HELO test.example.com\r\n')
fp.flush()
fp.readline
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()
答案 0 :(得分:1)
如果你正在使用Python3.3 +,这很简单
import ipaddress # new in Python3.3
start_ip, end_ip = however_you_get_these_as_strings()
ip_networks = ipaddress.summarize_address_range(
ipaddress.IPv4Address(start_ip),
ipaddress.IPv4Address(end_ip))
# list of networks between those two IPs
for network in ip_networks:
for ip in network:
# ip is an ipaddress.IPv4Address object
probe(str(ip))
# which converts nicely to str
答案 1 :(得分:0)
我会通过将代码转换为探测单个主机的函数来实现这一点,并将主机名/ ip作为参数。然后,遍历您的主机列表(从命令行,文件,用户的交互式查询或任何地方),并为循环中的每个主机调用单个主机探测。
答案 2 :(得分:0)
好的,所以这就是我为实现这一目标所做的工作。 解决方案根本不是优雅的,但是它可以解决问题,而且,我不能花更多的时间在Python上找到解决方案,所以我已经决定,在阅读了bmhkim上面的答案后(感谢提示) )编写一个bash脚本让它迭代一系列的ip地址,并为每个人调用我的python脚本来实现它的魔力。
#!/bin/bash
for ip in $(seq 1 254); do
python smtp-probe.py 192.168.1.$ip <users.txt
done
我在输出方面遇到了一些问题,因为这给了我服务器对我的探测尝试的响应,但没有发送这些响应的实际IP地址,所以我已经修改了原始脚本:
#!/usr/bin/python
import socket
import sys
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))
print sys.argv[1] #Notice the printing of the script arguments/ip addresses for my output
fp = s.makefile('rwb')
fp.readline()
fp.write('HELO test.example.com\r\n')
fp.flush()
fp.readline
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()
就像我上面所说的那样,这是一个棘手的方法 - 我知道,但我不是程序员,所以这就是我能找到的出路(如果你纯粹用Python做的话我非常希望看到它)。一旦我有更多的时间,我肯定会重新访问这个问题,我将继续学习Python,直到我做对了。
感谢所有人对我的问题的支持!!