如何将 ICMP 数据保存在 python 变量中

How to save ICMP data in a python variable

代码:

from scapy.all import *


ip = "10.23.227.24"

p = IP(dst=ip)/ICMP()

r = sr1(p)
print ("---------1111111111111111111111111111111---------\n")

ls(r)
print ("---------2222222222222222222222222222222---------\n")

ls(r[2])

print ("---------3333333333333333333333333333333---------\n")

q = r[2]

print (q)

输出:

root@root:~/Desktop/Scripts# python ext.py
Begin emission:
.Finished sending 1 packets.
*
Received 2 packets, got 1 answers, remaining 0 packets
---------1111111111111111111111111111111---------

version    : BitField (4 bits)                   = 4               (4)
ihl        : BitField (4 bits)                   = 5               (None)
tos        : XByteField                          = 0               (0)
len        : ShortField                          = 28              (None)
id         : ShortField                          = 50158           (1)
flags      : FlagsField (3 bits)                 = <Flag 0 ()>     (<Flag 0 ()>)
frag       : BitField (13 bits)                  = 0               (0)
ttl        : ByteField                           = 128             (64)
proto      : ByteEnumField                       = 1               (0)
chksum     : XShortField                         = 20890           (None)
src        : SourceIPField                       = '10.23.227.24'  (None)
dst        : DestIPField                         = '192.168.119.128' (None)
options    : PacketListField                     = []              ([])
--
type       : ByteEnumField                       = 0               (8)
code       : MultiEnumField (Depends on type)    = 0               (0)
chksum     : XShortField                         = 65535           (None)
id         : XShortField (Cond)                  = 0               (0)
seq        : XShortField (Cond)                  = 0               (0)
ts_ori     : ICMPTimeStampField (Cond)           = 54086861        (54086861)
ts_rx      : ICMPTimeStampField (Cond)           = 54086861        (54086861)
ts_tx      : ICMPTimeStampField (Cond)           = 54086861        (54086861)
gw         : IPField (Cond)                      = '0.0.0.0'       ('0.0.0.0')
ptr        : ByteField (Cond)                    = 0               (0)
reserved   : ByteField (Cond)                    = 0               (0)
length     : ByteField (Cond)                    = 0               (0)
addr_mask  : IPField (Cond)                      = '0.0.0.0'       ('0.0.0.0')
nexthopmtu : ShortField (Cond)                   = 0               (0)
unused     : ShortField (Cond)                   = 0               (0)
unused     : IntField (Cond)                     = 0               (0)
--
load       : StrField                            = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ('')
---------2222222222222222222222222222222---------

load       : StrField                            = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' ('')
---------3333333333333333333333333333333---------



root@root:~/Desktop/Scripts# 

我的目标是存储这个'*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'* 在 python 变量中并打印它。

您的代码完全没问题,只是您收到的 ICMP 回复中的数据包含全部设置为 0 的字节,因此这就是为什么不打印任何内容的原因,例如:

>>> q = 'bla\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00bla'
>>> print(q)
blabla

如果你想看到一些结果,你必须在你的 ICMP 回显数据包中放入一些数据,以便接收者在他的 ICMP 回复中复制该数据,例如:

p = IP(dst=ip)/ICMP()/'hello'