3

次のスクリプト(python + scapy)を使用して、断片化されたUDPパケットを含むpcapファイルの最適化されたバージョンを作成します。

# Read pcap file
in=rdpcap("in.pcap")
# Defragment ...
out = defragment(in)
# Write defragmented pcap file
wrpcap ("out.pcap", out) 

私の問題は、デフラグされたパケットのpcapタイムスタンプが、キャプチャの日付ではなく、デフラグの日付に設定されていることです。フラグメント化されていないパケットには、元のキャプチャタイムスタンプが残っています。

inet.py、defragment()、defrag()を調べましたが、scapyはあまり流暢ではありません。それを理解し、ハックして、たとえば最後の日付を保持するのを手伝ってもらいたいです。フラグメント化し、最適化されたパケットに入れます。

誰かがこれについて私を助けてくれますか、何かヒントはありますか?
たとえば、入力パケットのキャプチャ日付はどこにあり、最適化されたパケットのどこに入れる必要がありますか...

もちろん、同じ目標を達成する他の解決策は大歓迎です(私は認めます...私は急いでいます:( ...)

4

1 に答える 1

2

これは、最適化されたパケットに最初のフラグメントのキャプチャ日付を追加する inet.py へのパッチです。

Packet.copy() メソッドなどを変更するなど、おそらくよりクリーンなソリューションがありますが、それは法案に適合します...

*** inet.py     2011-03-29 14:01:19.000000000 +0000
--- inet.py.orig        2011-03-29 07:59:02.000000000 +0000
***************
*** 846,856 ****
          lastp = lst[-1]
          if p.frag > 0 or lastp.flags & 1 != 0: # first or last fragment missing
              missfrag += lst
-             print "missing framgent!"
              continue
!         # Keep 1st fragment capture time (as it is lost in subsequent copies during defragmentation)
!         ptime = p.time
!         p = p.copy() # copy() method do not copy time member (?)
          if Padding in p:
              del(p[Padding].underlayer.payload)
          ip = p[IP]
--- 846,853 ----
          lastp = lst[-1]
          if p.frag > 0 or lastp.flags & 1 != 0: # first or last fragment missing
              missfrag += lst
              continue
!         p = p.copy()
          if Padding in p:
              del(p[Padding].underlayer.payload)
          ip = p[IP]
***************
*** 878,892 ****
              del(ip.len)
              p = p/txt
              p._defrag_pos = max(x._defrag_pos for x in lst)
-             # Put back time in packet
-             p.time= ptime
              defrag.append(p)
      defrag2=[]
      for p in defrag:
          q = p.__class__(str(p))
          q._defrag_pos = p._defrag_pos
-         # Put back time in packet
-         q.time = p.time
          defrag2.append(q)
      final += defrag2
      final += missfrag
--- 875,885 ----
于 2011-03-29T14:07:26.727 に答える