<p>所以,我的答案似乎与我所寻求的答案有所不同。这是我刚写完的python2.x版本。虽然它在执行方面不是非常复杂和隐蔽(弹出大量的CMD窗口,写入文件,然后读取以形成结果)。但还是完成了任务。我想我得对DOS命令做更多的研究,并开始学习VB脚本;)。哈哈。<br/>
感谢@RGuggisberg和@Hackoo的支持</p>
<pre><code>import os
import re
cwd = os.getcwd()
ip_file = cwd+"\\ip.txt" ## IPs written in this file, one in each line, or the filename can be taken through command-line args (more portable)
ip = []
win_hosts = []
for line in open(ip_file).readlines():
ip.append(line.rstrip())
del_cmd = "del "+cwd+"\\response.txt" ## Delete response.txt file
os.system(del_cmd) ## as PING output keeps appending to it
for i in ip:
cmd = "ping -n 1 "+str(i)+' | find "TTL" >> response.txt' ## write PING response to response.txt
os.system(cmd)
response_file = cwd+"\\response.txt"
for line in open(response_file).readlines():
regs = r'Reply from\s(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*TTL=(\d{1,3})' ## Regular Expression to catch IP and TTL-value
obj = re.search(regs,line.rstrip('\n')) ## also right-strip any possible new-lines, it'll probably be '\r\n' on Linux host
if obj:
ip = obj.group(1)
ttl = obj.group(2)
print ip," has TTL= ",ttl
ttl = int(ttl)
if (127<ttl<129): ## change this to (54<ttl<65) to get Linux hosts
win_hosts.append(ip) ## Add the windows hosts to win_hosts list
print "\n[+][+] Windows Hosts = ",str(win_hosts)
</code></pre>
<p>我的ip.txt文件文件有:在</p>
^{pr2}$
<p>结果是:</p>
<pre><code>>>>
192.168.1.1 has TTL= 30
192.168.1.2 has TTL= 64
192.168.1.4 has TTL= 64
192.168.1.5 has TTL= 128
[+][+] Windows Hosts = ['192.168.1.5']
</code></pre>
<p>我不太记得了,但无法获得对<strong>命令模块</strong>和<strong>子进程模块的支持(<em>,尽管它们在Linux-box</em>上完美地工作)。如果有人知道如何将结果存储到任何列表/字典/变量中,请更新plz。我不喜欢在CMD中使用输出重定向。在</p>