1

ホスト名のリストに対して traceroute を実行するスクリプトを作成しています。私がやろうとしているのは、テキストファイルからホスト名を1行ずつ読み取り、サブプロセスを使用して各ホストのtracertを実行し、結果を別のファイルに書き込むことです。ここに私のコードがあります

    # import subprocess
    import subprocess
    # Prepare host and results file
    Open_host = open('c:/OSN/host.txt','r')
    Write_results = open('c:/OSN/TracerouteResults.txt','a')
    host = Open_host.readline()
    # while loop: excuse trace route for each host
    while host:
       print host
    # execute Traceroute process and pipe the result to a string 
       Traceroute = subprocess.Popen(["tracert", '-w', '100', host],  
     stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
       while True:    
           hop = Traceroute.stdout.readline()
           if not hop: break
           print '-->',hop
           Write_results.write( hop )
       Traceroute.wait()  
    # Reading a new host   
       host = Open_host.readline()
    # close files
    Open_host.close()
    Write_results.close() 

私の問題は、このスクリプトが 1 つのホスト名 (または 1 行) を持つホスト ファイルに対してのみ機能することです。ホスト ファイルに複数の行が含まれている場合、たとえば: hostname1.com hostname2.com hostname3.com 最初の 2 行についてこの通知が表示されます。

「ターゲット システム名 hostname1.com を解決できません」

「ターゲット システム名 hostname2.com を解決できません」

そして、最後の行の tracert 結果のみを提供します。

スクリプトの何が問題なのかわかりません。修正を手伝ってください。どうもありがとう。

スティーブン

4

2 に答える 2

3

host = host.strip()電話をかける前に試してください。tracert は改行で窒息しているようです。

于 2012-08-08T10:55:40.363 に答える
1

scapy だけを使用する方がよいでしょう。

 #! /usr/bin/env python

# Set log level to benefit from Scapy warnings
import logging
logging.getLogger("scapy").setLevel(1)

from scapy.all import *

if __name__ == "__main__":
    hosts   = raw_input('Hostnames you would like to traceroute sepearated by a comma: ')
    ttl     = raw_input("Time To Live: ")
    if not ttl: ttl = 20
    traceroute([x.strip() for x in hosts.split(',')],maxttl=ttl)

参考:https ://gist.github.com/mwatts272/6192900

于 2013-08-09T21:14:36.187 に答える