python - Scapy-ssl_tls : does crafting ssl layer packets require dport 443?

标签 python ssl scapy tls1.2

我正在尝试使用 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`'

问题:

  1. 我如何制作 ssl 层出现在 443 以外的不同 dport 中的数据包?

  2. 为什么原始数据出现在 dport = 443 的 SSL 层中

  3. 我是否一直在为 ssl/tls 使用 dport 443?

  4. 我在不使用 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

最佳答案

  1. 使用 bind_layers(TCP, SSL, dport=4443) 将 ssl 层绑定(bind)到您的端口(另见 scapy-ssl_tls 绑定(bind)),否则 scapy 不会尝试将您的流分解为 SSL。如果您不想将 SSL 绑定(bind)到您的 dport,而只想获得对象的未序列化概览,请使用 .show() 而不是 .show2(),这适用于任何港口。
  2. 这实际上看起来像一个错误,因为如果没有有效的 tlsrecord 的踪迹,ssl 解析器应该会退出。请file a bug with the project
  3. 不,见 1,2
  4. 不,见 2,2

关于python - Scapy-ssl_tls : does crafting ssl layer packets require dport 443?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36341416/

相关文章:

Python C-API 对象初始化

python - 如何使用 scapy 将选项缩放添加到 tcp 数据包

Scapy 生成 STP(生成树协议(protocol))数据包

python - 安装 Python igraph 的问题

python - 在 Snakemake 脚本中使用 argparse

ios - 我们如何在 Delphi iOS 中使用 Open SSL?

android - android sdk 级别 23 中 SSLParameter.setServerNames 的替代方法是什么

python - Scapy sniff() 在一个子类 threading.Thread() 的类中

javascript - Python 将 2 组数据放入 JSON 对象中以进行 ajax 响应

c++ - QT https SSL 支持静态 QT 静态程序构建 - 获取 'Protocol "https“未知”