Scapy-ssl_tls: требуется ли для создания пакетов уровня ssl dport 443?

Я пытаюсь создать поток трафика, используя https или http

У меня возникла проблема с созданием пакетов уровня ssl на dport за пределами dport 443. У меня также возникают проблемы с созданием обычных пакетов с необработанными данными на 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?

  2. почему необработанные данные появляются на уровне SSL, где dport = 443

  3. я застрял, используя dport 443 для ssl / tls?

  4. Я также застрял на использовании! 443 dport, когда не использую ssl / tls?

другая информация, возможно, связанная

scapy версия 2.3.1

scapy-ssl_ tls-версия 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

person Nathan Hoisington    schedule 31.03.2016    source источник


Ответы (1)


  1. привяжите слои ssl к вашему порту с помощью bind_layers(TCP, SSL, dport=4443) (также см. scapy -ssl_tls bindings), иначе scapy не будет пытаться анализировать ваш поток как SSL. Если вы не хотите привязывать SSL к своему dport, а получаете только несериализованный обзор вашего объекта, используйте .show() вместо .show2(), это работает для любого порта.
  2. на самом деле это выглядит как ошибка, поскольку предполагается, что диссектор ssl выйдет из строя, если нет никаких следов действительной записи tls. пожалуйста, сообщите об ошибке в проекте
  3. нет, см. 1,2
  4. нет см. 2,2
person tintin    schedule 09.06.2016