我有一个像这样的scapy数据包:
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= tcp
chksum= None
src= 127.0.0.1
dst= 127.0.0.1
\options\
###[ TCP ]###
sport= 50034
dport= https
seq= 0
ack= 0
dataofs= None
reserved= 0
flags= S
window= 8192
chksum= None
urgptr= 0
options= {}
###[ SSL/TLS ]###
\records\
|###[ SSLv2 Record ]###
| length= 0x591
| content_type= 5
|###[ Raw ]###
| load= '\xbf'
我做send(packet)
然后在另一个终端(在同一台机器上),我正在运行
a = sniff(filter = "port https", prn = lambda x:x.summary())
当我打印出收到的数据包时,它看起来像这样:
###[ Ethernet ]###
dst= ff:ff:ff:ff:ff:ff
src= 00:00:00:00:00:00
type= 0x800
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x0
len= 44
id= 1
flags=
frag= 0L
ttl= 64
proto= tcp
chksum= 0x7cc9
src= 127.0.0.1
dst= 127.0.0.1
\options\
###[ TCP ]###
sport= 50034
dport= https
seq= 0
ack= 0
dataofs= 5L
reserved= 0L
flags= S
window= 8192
chksum= 0xc15e
urgptr= 0
options= []
###[ SSL/TLS ]###
\records\
###[ Raw ]###
load= '\x05\x91\x05\xbf'
主要问题是在数据包被嗅探后,SSLv2Record没有显示出来。 records
字段中SSL/TLS
列表的内容完全关闭。谁看过这个吗?如果我需要添加更多细节,请告诉我。
我100%确定我在嗅探后打印出的数据包是正确的数据包。
我相信我正在为这种类型的数据包使用正确的发送(只是发送,而不是sendp等)。我已经能够在没有SSLv2Record字段的情况下发送和嗅探其他数据包而没有问题。
我是否错误地发送或接收此数据包?
答案 0 :(得分:1)
这实际上是使用PR#76解决的scapy-ssl_tls中的错误,其中SSLv2Record
层无法正确序列化对象。您的数据包被序列化为\x05\x91\x05\xbf
,而它应该是\x85\x91\x05\xbf
。不同之处在于,对于有效的SSLv2记录,必须设置长度的MSB。
>>> SSL('\x05\x91\x05\xbf')
<SSL records=[] |<Raw load='\x05\x91\x05\xbf' |>>
>>> SSL('\x85\x91\x05\xbf')
<SSL records=[<SSLv2Record length=0x591 content_type=5 |<Raw load='\xbf' |>>] |>
这是检查重新反序列化的快速测试:
错误:
>>> SSL(str(SSL(records=[SSLv2Record(length=0x591, content_type=5)/"\xbf"])))
<SSL records=[] |<Raw load='\x05\x91\x05\xbf' |>>
正确的:
>>> SSL(str(SSL(records=[SSLv2Record(length=0x591, content_type=5)/"\xbf"])))
<SSL records=[<SSLv2Record length=0x591 content_type=5 |<Raw load='\xbf' |>>] |>