我正在尝试使用 https 或 http 创建流量流
我在 dport 443 之外的 dport 上制作 ssl 层数据包时遇到问题。我在 dport 443 上使用原始数据制作普通数据包时也遇到问题。
我创建的第一个数据包有 tcp dport=443,当我使用 show2() 时,SSL 层出现
p = Ether()/IP(src="1.2.3.4", dst='4.3.2.1',flags="DF")/TCP(sport=12345, dport=443, flags="PA", ack=1111, seq=3222)/SSL(records=[TLSRecord()/TLSHandshake()])
p.show2()
###[ Ethernet ]###
dst= 00:26:52:ce:5f:49
src= 34:23:87:20:76:59
type= IPv4
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x0
len= 49
id= 1
flags= DF
frag= 0L
ttl= 64
proto= tcp
chksum= 0x30bd
src= 1.2.3.4
dst= 4.3.2.1
\options\
###[ TCP ]###
sport= 12345
dport= https
seq= 3222
ack= 1111
dataofs= 5L
reserved= 0L
flags= PA
window= 8192
chksum= 0x27d5
urgptr= 0
options= []
###[ SSL/TLS ]###
\records\
|###[ TLS Record ]###
| content_type= handshake
| version= TLS_1_0
| length= 0x4
|###[ TLS Handshake ]###
| type= client_hello
| length= 0x0
我创建的第二个数据包与第一个相同,除了它有 tcp dport=4443,但是当我使用 show2() 时,SSL 层由 Raw 重放
p2 = Ether()/IP(src="1.2.3.4", dst='4.3.2.1',flags="DF")/TCP(sport=12345, dport=4443, flags="PA", ack=1111, seq=3222)/SSL(records=[TLSRecord()/TLSHandshake()])
p2.show2()
###[ Ethernet ]###
dst= 00:26:52:ce:5f:49
src= 34:23:87:20:76:59
type= IPv4
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x0
len= 49
id= 1
flags= DF
frag= 0L
ttl= 64
proto= tcp
chksum= 0x30bd
src= 1.2.3.4
dst= 4.3.2.1
\options\
###[ TCP ]###
sport= 12345
dport= 4443
seq= 3222
ack= 1111
dataofs= 5L
reserved= 0L
flags= PA
window= 8192
chksum= 0x1835
urgptr= 0
options= []
###[ Raw ]###
load= '\x16\x03\x01\x00\x04\x01\x00\x00\x00'
第三个数据包是在没有 ssl 层的情况下创建的,但在 tcp dport=443 上,当我使用 show2() 时,ssl 层就在那里,我并不期待它
p3 = Ether()/IP(src="1.2.3.4", dst='4.3.2.1',flags="DF")/TCP(sport=12345, dport=443, flags="PA", ack=1111, seq=3222)/Raw(load="g\x05ZN`")
p3.show2()
###[ Ethernet ]###
dst= 00:26:52:ce:5f:49
src= 34:23:87:20:76:59
type= IPv4
###[ IP ]###
version= 4L
ihl= 5L
tos= 0x0
len= 45
id= 1
flags= DF
frag= 0L
ttl= 64
proto= tcp
chksum= 0x30c1
src= 1.2.3.4
dst= 4.3.2.1
\options\
###[ TCP ]###
sport= 12345
dport= https
seq= 3222
ack= 1111
dataofs= 5L
reserved= 0L
flags= PA
window= 8192
chksum= 0x2189
urgptr= 0
options= []
###[ SSL/TLS ]###
\records\
###[ Raw ]###
load= 'g\x05ZN`'
问题:
我如何制作 ssl 层出现在 443 以外的不同 dport 中的数据包?
为什么原始数据出现在 dport = 443 的 SSL 层中
我是否一直在为 ssl/tls 使用 dport 443?
我在不使用 ssl/tls 时是否也坚持使用 !443 dport?
其他可能相关的信息
scapy 版本 2.3.1
scapy-ssl_tls-version 1.2.2
安装方法手册:
install requirements from requirements.txt
copy scapy_ssl_tls/* to scapy_installation/scapy/layers
modify scapy_installation/scapy/config.py to autoload SSL/TLS
最佳答案
- 使用
bind_layers(TCP, SSL, dport=4443)
将 ssl 层绑定(bind)到您的端口(另见 scapy-ssl_tls 绑定(bind)),否则 scapy 不会尝试将您的流分解为 SSL。如果您不想将 SSL 绑定(bind)到您的 dport,而只想获得对象的未序列化概览,请使用.show()
而不是.show2()
,这适用于任何港口。 - 这实际上看起来像一个错误,因为如果没有有效的 tlsrecord 的踪迹,ssl 解析器应该会退出。请file a bug with the project
- 不,见 1,2
- 不,见 2,2
关于python - Scapy-ssl_tls : does crafting ssl layer packets require dport 443?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36341416/