2

インターフェイスで HTTP 応答を使用dpktpcapyてリッスンしようとしています

import dpkt
import pcapy

cap = pcapy.open_live('eth0',10000,1,0)

(header,payload) = cap.next()

while header:
    packet = dpkt.ethernet.Ethernet(str(payload))
    if str(packet.data.data.data).startswith('HTTP'):
        h = dpkt.http.Response(str(packet.data.data.data))
    (header,payload) = cap.next()

これを実行すると、最初のパケットが正常に読み取られます。しかし、2 番目のパケットでは、 の間違った値を読み取ってしまいますcontent-length。例外は次のとおりです。

cona@vm-02:~$ sudo python cache-pcapy.py
Value of N 160 value of body 160
Value of N 5965717 value of body 1193
Traceback (most recent call last):
  File "cache-pcapy.py", line 12, in <module>
    h = dpkt.http.Response(str(packet.data.data.data))
  File "/usr/local/lib/python2.7/dist-packages/dpkt/http.py", line 76, in __init__
    self.unpack(args[0])
  File "/usr/local/lib/python2.7/dist-packages/dpkt/http.py", line 159, in unpack
    Message.unpack(self, f.read())
  File "/usr/local/lib/python2.7/dist-packages/dpkt/http.py", line 90, in unpack
    self.body = parse_body(f, self.headers)
  File "/usr/local/lib/python2.7/dist-packages/dpkt/http.py", line 59, in parse_body
    raise dpkt.NeedData('short body (missing %d bytes)' % (n - len(body)))
dpkt.dpkt.NeedData: short body (missing 5964524 bytes)

N の値と本体の長さのプリントは、これを追加した場所からのものですhttp.pydpkt

elif 'content-length' in headers:
        n = int(headers['content-length'])
        body = f.read(n)
        print 'Value of N {} value of body {}'.format(n,len(body))
        if len(body) != n:

            raise dpkt.NeedData('short body (missing %d bytes)' % (n - len(body)))

間違ったバイトが として読み取られているようcontent-lengthです。なぜこれが起こるのですか?

4

0 に答える 0