別のプロセスが消費するデータを取得し、ネットワーク接続を介してそれらを交換するpython(重要な場合は3.1)アプリケーションがあります。何らかの理由で、一部の交換は予想外に大きくなります...ピクルス化されたデータの一部を理解し、何が送信されたかを理解できますが、冗長な文字列など、私が自分自身に説明できない明らかにバイナリデータの大きな塊が残っていますまたはバイナリデータの大きなチャンク。
そのタスクを支援するwiresharkプラグインがあるかどうか、または=None
オブジェクトが接続を介して送信される前に、さらに何をすべきかを理解しようとする誰かに推奨する別のプロセスがあるかどうかを知っていますか?
RouteDirect
q.).q.}q.(X...._RouteDirect__dst_nodeq.cnode
Node
q.).q.}q.(X...._Node__status_upq.NX...._Node__neighbourhoodq.NX...._Node__sendq.NX
..._Node__cpeq
cequation
CPE
q.).q.}q^M(X...._CPE__dim_countq.}q.X...._CPE__internal_nodesq.]q.ubX...._Node__major_stateq.NX...._Node__partition_idq.G?.$:..4. X...._Node__name_idq.cnodeid
NameID
q.).q.}q.X^M..._NameID__nameq.X....checkq.sbX...._Node__dispatcherq.NX...._Node__pendingq.]q.cmessages
^私はそれを理解することができます:RouteDirect、CPE、およびNameIDは私のプログラムのクラスです。
vこれについてはもっと驚いています。Iproto、Tflags、Isrc、Idstはこれらのデータに含まれる文字列ですが、交換にはそれほど多くの「プレーンバイナリ」データはないはずです。
q0).q1}q2(X...._Range__maxq3X....1f40q4X...._Range__min_includedq5.X...._Range__max_includedq6.X...._
Range__minq7h4ubX...._Component__dimensionq8h'ubh&).q9}q:h)X....Tflagsq;sbh+).q<}q=(h..h/h0).q>}q?
(h3X....02q@h5.h6.h7h@ubh8h9ubh&).qA}qBh)X....IprotoqCsbh+).qD}qE(h..h/h0).qF}qG(h3X...
.06qHh5.h6.h7hHubh8hAubh&).qI}qJh)X....IsrcqKsbh+).qL}qM(h..h/h0).qN}qO(h3X....7d59d8faqPh5.h6.
h7hPubh8hIubh&).qQ}qRh)X....IdstqS
sbh+).qT}qU(h..h/h0).qV}qW(h3X....00001011qXh5.h6.h7hXubh8hQubh&).qY}qZh)X....Tsrcq[sbh+).q\}q]
(h..h/h0).q^}q_(h3X....0bcfq`h5.h6.h7h`ubh8hYubusbX....
vそしてこれは本当に困惑しています。
qt).qu}qv(X...._LookupRequest__keyqwh!).qx}qyh$}qz(h&).q{}q|h)h*sbh+).q}}q~(h..h/h0).q.}q.
(h3h4h5.h6.h7h4ubh8h{ubh&).q.}q.h)h;sbh+).q.}q.(h..h/h0).q.}q.(h3h@h5.h6.h7h@ubh8h.ubh&).q.}q.h)hCsbh+).q.}q.(h..h/h0).q.}q.
(h3hHh5.h6.h7hHubh8h.ubh&).q.}q.h)hKsbh+).q.}q.(h..h/h0).q.}q.(h3hPh5.h6.h7hPubh8h.ubh&).q.}q.h)hSsbh+).q.}q.(h..h/h0).q.}q.
(h3hXh5.h6.h7hXubh8h.ubh&).q.}q.h)h[sbh+).q.}q.(h..h/h0).q.}q.
(h3h`h5.h6.h7h`ubh8h.ubusbX...._LookupRequest__nonceq.G?...u...X...._LookupRequest__fromq.h.).q.}q.(h.Nh.Nh.Nh
h.).q.}q.(h.}q.
私が最も困惑しているのは、たとえばバイナリの単なるfloat/intであるにはあまりにも規則的であるように思われることです。それは数字と[shub]にある程度の親和性があり、多くの「分離された」q
...それは私にマシンコードをもっと思い出させます。それとも私の目だけですか?
クラスでのピクルスサポートの例Node
、##特別なピクルスの動作を定義します。
def __getstate__(self):
"""Indicate witch fields should be pickled."""
state = copy.copy(self.__dict__)
# 'state' is a shallow copy: don't modify objects' content
# Make transients fields point to nothing
state['_Node__dispatcher'] = None
state['_Node__send'] = None
state['_Node__neighbourhood'] = None
state['_Node__status_up'] = None
state['_Node__data_store'] = None
state['_Node__running_op'] = None
state['_Node__major_state'] = None
return state
他の多くのオブジェクト(たとえばCPE
、RouteDirect
)には__getstate__
メソッドがありません。もちろん、すべてのクラスのすべてのコンストラクターをクロールする必要のないテクニックがあれば、それが大好きです。