22

私は scapy を使用しています。パケットを作成し、送信せずにそのチェックサムを計算したいと考えています。それを行う方法はありますか?

ありがとう。

4

5 に答える 5

43

また、パケットを出力するため、show2() を回避しようとしました。ソースでより良い解決策を見つけました:

del packet.chksum
packet = packet.__class__(bytes(packet))

このコードは、印刷せずに正しいチェックサムでパケットを再生成します。実際には、印刷前にバックグラウンドで実行される show2() です。

于 2012-07-25T10:51:27.540 に答える
14

.chksum作成後にパケットから値を削除する必要があります。それから電話する.show2()

>>> from scapy.layers.inet import IP
>>> from scapy.layers.inet import ICMP
>>> from scapy.layers.inet import TCP
>>> target = "10.9.8.7"
>>> ttl = 64
>>> id = 32711
>>> sport = 2927
>>> dport = 80
>>> pak = IP(dst=target, src = "100.99.98.97", ttl=ttl, flags="DF", id=id, len=1200, chksum = 0)/TCP(flags="S", sport=sport, dport=int(dport), options=[('Timestamp',(0,0))], chksum = 0)
>>> del pak[IP].chksum
>>> del pak[TCP].chksum
>>> pak.show2()
###[ IP ]###
  version   = 4L
  ihl       = 5L
  tos       = 0x0
  len       = 1200
  id        = 32711
  flags     = DF
  frag      = 0L
  ttl       = 64
  proto     = tcp
  chksum    = 0x9afd
  src       = 100.99.98.97
  dst       = 10.9.8.7
  \options   \
###[ TCP ]###
     sport     = 2927
     dport     = www
     seq       = 0
     ack       = 0
     dataofs   = 8L
     reserved  = 0L
     flags     = S
     window    = 8192
     chksum    = 0x2c0e
     urgptr    = 0
     options   = [('Timestamp', (0, 0)), ('EOL', None)]
>>>
于 2011-05-20T03:51:28.890 に答える
0

実際、show2()関数はチェックサムを計算しますが、作業が終了するとパケットの内容も出力します。ただし、show2()という名前の便利な小さなパラメーターがありますdump。ソースは次のように説明しています。

:param dump: 文字列値を出力するか返すかを決定します

したがって、 を設定dump=Trueすることで、関数がデフォルトで提供する厄介な出力を回避しながら、必要な計算を取得できます。

于 2018-07-10T14:24:03.460 に答える