我要做的是为nmap指定一个要扫描的IP地址范围,比如说(192.168.0.0-50),对于它扫描的每个IP,我需要在不同的函数中使用输出。你知道吗
下面是我正在做的一些代码:
def revLookup(ips):
revCmd = "nmap -R -sP " + ips
revargs = shlex.split(revCmd)
revOut = subprocess.Popen(revargs, shell=False, stdout=subprocess.PIPE)
for rline in revOut.stdout:
if "Nmap scan report for " in rline:
nmapNmIp = rline.strip("Nmap scan report for")
rname, rip = nmapNmIp.split(" ")[0], nmapNmIp.split(" ")[-1]
if rname.strip() == rip.strip():
rname = "NO Name Provided"
revNmapName = rname.split('.', 1)[0]
rip = re.sub('[\(\)]', '', rip.strip())
elif "MAC Address: " in rline:
rnmapmac = rline.split(': ', 1)[-1]
rnmapmac = rnmapmac.split(" ")[0]
return revNmapName, rip, rnmapmac
返回的值只是列表中的最后一个值。 我还有其他函数使用各种值来创建其他信息,但我需要逐个生成这些信息。如果我创建一个长而混乱的函数,我知道这不是正确的方法。你知道吗
谢谢你的建议。你知道吗
在循环中的每次之后“return”的答案是yield,但是让函数使用单个ip并在ip上迭代可能更好:
另外,对于使用Nmap,您应该研究python Nmap,它非常好。你知道吗
使用
yield
而不是return
并将其移动到循环中,如下所示:稍后,您可以在for循环中使用创建的生成器(返回
yield
的函数就是其中之一),例如:你可以看看这个问题的一个很好的答案What does the "yield" keyword do in Python?
编辑:添加了方法的用法
相关问题 更多 >
编程相关推荐