-2

process() 内から two_byte_proc(payload,offset) を呼び出そうとしていますが、出力ファイル out_buf に書き込みません。オフセットまたはペイロードからの出力には None が含まれる場合があるため、これらの反復をスキップして、次のパケットでプロセス関数を再開する必要があります。

def process():
    pkts = sniff(offline="infile.pcap",filter="tcp")
    out_buf = open("outfile.bin","wb")

    for pkt in pkts:
        offset = hexdump(str(pkt.payload)[:2])
        payload = hexdump(pkt.payload)

        if offset or payload is None:
            pass
        else:
            out_buf.write(two_byte_proc(payload,offset))

process()
4

1 に答える 1

4

offset or payload is Noneは常に True です。おそらくあなたは次のことを意味しました:

if offset is None or payload is None:

代わりは。

その式が True の場合は「合格」するので、逆にすることもできます。

if offset is not None and payload is not None:
    out_buf.write(two_byte_proc(payload, offset))

offsetand は、長さが 0 を超える文字列であるか、または None であると思わpayloadれます。その場合は、次のようにさらに単純化できます。

if offset and payload:
    out_buf.write(two_byte_proc(payload, offset))

two_byte_proc大事なことを言い忘れましたが、 (または編集後に) out_buf に書き込む何かがfour_byte_proc実際に返されることを確認する必要があります。たとえば、返されるすべてが空の文字列である場合、結果は表示されません。

于 2012-07-14T20:41:04.447 に答える