0

こんにちは私はパイソンスニファーを持っています

def receiveData(s):
    data = ''
    try:
        data = s.recvfrom(65565)
        #k = data.rstrip()
    except timeout:
        data = ''
    except:
        print "An Error Occurred."
        sys.exc_info()
    return data[0]

 data = receiveData(s)

sはソケットです。データを取得していますが、記号が含まれています。プレーンテキストに変換する方法を教えてください。

Pythonの初心者で、非常にばかげた質問の場合は申し訳ありません:)

これはデータの例ですE\x00\x00)\x1a*@\x00\x80\x06L\xfd\xc0\xa8\x01\x84\xad\xc2#\xb9M\xb8\x00P\xed\xb3\x19\xd9\xedY\xc1\xfbP\x10\x01\x04\x16=\x00\x00\x00'

4

2 に答える 2

1

実際に「プレーンテキスト」に変換することはできません。NUL(ASCII 0、として\x00表示)などの文字は表示できないため、Pythonはそれらを16進表現で表示します。

ほとんどのスニッフィング/16進ダンプツールが行うことは、印刷できない文字をドットなどに置き換えることです。あなたはこのようにそれを行うことができます:

import string
printable = set(string.printable)
print ''.join(x if x in printable else '.' for x in data)

例:

>>> data = 'E\x00\x00)\x1a*@\x00\x80\x06L\xfd\xc0\xa8\x01\x84\xad\xc2#\xb9M\xb8\x00P\xed\xb3\x19\xd9\xedY\xc1\xfbP\x10\x01\x04\x16=\x00\x00\x00'
>>> print ''.join(x if x in printable else '.' for x in data)
E..).*@...L.......#.M..P.....Y..P....=...
于 2012-12-14T12:45:24.757 に答える
0

「プレーンテキスト」への変換は、データの意味によって異なります。

  • 圧縮されたテキストはありますか?次に、それを解凍します。

  • 番号をエンコードしましたか?次に、それをデコードして番号を表示します。

データのセマンティクスを知らなければ、誰もあなたに言うことはできません。

もちろん、で生データを表示することもできますがprint data.encode("hex")、それがあなたの望むものかどうかはわかりません。

于 2012-12-14T13:00:31.413 に答える