0

dpkt モジュールを使用して複数の.pcap ファイルを開き、それらを同時に読み取る方法を見つけようとしています。多くのグーグルと長い時間の後、私が見つけることができた例は、1つの .pcap ファイルを開いて読み取る方法のみを示しています。

複数の for ループを使用して、配列を使用してファイルを zip() しようとしましたが、役に立ちませんでした。エラー ValueError: need more than 1 value to unpack があります。助言がありますか?これが私の現在のpythonスクリプトです:

  import dpkt, socket, glob, pcap, os

    files = [open(f) for f in glob.glob('*.pcap')]
    abc = dpkt.pcap.Reader(file("abc.pcap", "rb"))
    fgh = dpkt.pcap.Reader(file("fgh.pcap", "rb"))

    print files
    print "\r\n"
    List = [abc, fgh]

    for ts, data in zip(List):
       eth = dpkt.ethernet.Ethernet(data)
       ip = eth.data
       tcp = ip.data

       src = socket.inet_ntoa(ip.src)
       dst = socket.inet_ntoa(ip.dst)

       if tcp.dport == 80 and len(tcp.data) > 0:
          http = dpkt.http.Request(tcp.data)
          print "-------------------"
          print "HTTP Request /", http.version
          print "-------------------"
          print "Type: ", http.method
          print "URI: ", http.uri
          print "User-Agent: ", http.headers ['user-agent']
          print "Source: ", src
          print "Destination: ", dst
          print "\r\n"

編集://

ねえ、すべての提案をありがとう。プロセスを簡素化するために、コードを修正して .txt ファイルを開くようにしました。示されているように、私のコードは以下にあります。出力に示されているようにエラーはありませんが、出力を印刷するときに、改行記号 '\n'、大括弧、単一引用符を取り除くにはどうすればよいですか?

コード:

 import glob

    fileList = [glob.glob('*.txt')]

    for files in fileList:
       print "Files present:",files
       print ""

       a = open("1.txt", 'r')
       b = open("2.txt", 'r')

       List = [a,b]

       for line in zip(*List):
          print line

出力:

>Files present: ['2.txt', '1.txt']
>
>('This is content from the FIRST .txt file\n', 'This is content from the SECOND .txt file\n')
>('\n', '\n')
>('Protocol: Testing\n', 'Protocol: PCAP\n')
>('Version: 1.0\n', 'Version: 2.0\n')
4

2 に答える 2

0

zip()それぞれを個別の引数として反復処理します。

for ts, data in zip(abc, fgh):
  //...

最初にリストを作成するzip()ことで、反復するものだけを与えることになります。

于 2012-08-30T02:28:43.223 に答える
0

あなたは実際には非常に近いです。に渡すシーケンスを展開するだけですzip()

for ts, data in zip(*List):
于 2012-08-30T02:29:28.670 に答える