У меня есть приложение python (3.1, если это важно), которое распиливает данные для другого процесса, чтобы потреблять, и обменивать их по сетевым соединениям. По какой-то причине какой-то обмен неожиданно большой ... Я могу понять некоторые из маринованных данных и выяснить, что передается, но остается большой капля видимых двоичных данных, которые я не могу объяснить себе, например избыточные строки или большой фрагмент двоичных данных.Как я могу найти, почему мои маринованные данные такие большие?
Знаете ли вы, есть ли плагин wirehark, который мог бы помочь мне с этой задачей или другой процесс, который вы рекомендовали бы кому-то, пытающемуся выяснить, что еще должно было быть =None
'd до того, как объект передается по соединению ?
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?
([email protected]@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.([email protected]@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/ints в двоичном формате. Он имеет некоторое сходство с числами и [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__
метод. Мне бы это понравилось, если бы была какая-то техника, которая не требует от меня просканировать все конструкторы всех классов, конечно.
Как ваш травильных-кодов выглядит? – eumiro
Без вашего травления и сетевого кода сложнее понять, что происходит. Вы можете попробовать сохранить ваши маринованные данные в файл для целей отладки. – Evert
@Evert: true. Я ищу руководство для «как я могу оценить, почему» больше, чем «почему» на самом деле. – PypeBros