如何将 ICMP 数据保存在 python 变量中
How to save ICMP data in a python variable
- 我有以下脚本。
- 它使用 scapy 创建 ICMP 数据包。
- 我的最终目标是将返回的数据复制到变量中。
- 但是当我尝试打印结束变量时,它什么也没显示。
- 我不明白我在这里遗漏了什么。
代码:
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'
- 我有以下脚本。
- 它使用 scapy 创建 ICMP 数据包。
- 我的最终目标是将返回的数据复制到变量中。
- 但是当我尝试打印结束变量时,它什么也没显示。
- 我不明白我在这里遗漏了什么。
代码:
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'