【发布时间】:2018-12-27 15:24:54
【问题描述】:
我正在尝试读取 TLS 消息。具体来说,具有证书详细信息的那个(handshake_type = 11)。我正在做的是首先检查消息是否包含Raw。如果是这样,我将像这样提取有效负载:b = bytes(pkt[Raw].load)。接下来,我检查第一个字节是0x16,接下来的两个字节需要是正确的TLS版本。
问题是这条消息没有通过这些条件。 WireShark 向我显示 \x16\x03\x03 是位置 0000 的字节(图片已附上),但我想这样做是为了方便。
那么我假设有效载荷必须以0x16 开头的假设是错误的吗?
附言
我不想使用scapy-ssl_tls 库。
编辑
这是代码:
def handle_tls_packet(pkt):
if pkt.haslayer(Raw):
b = bytes(pkt[Raw].load)
if b[0] == 0x16:
version = int.from_bytes(b[1:3], 'big')
message_len = int.from_bytes(b[3:5], 'big')
handshake_type = b[5]
handshake_length = int.from_bytes(b[6:9], 'big')
print("v = ", version, " len = ", message_len, " htype =", handshake_type
, "hlen =", handshake_length)
if handshake_type == 11:
# never happens - Why?
certs_len = int.from_bytes(b[7:11], 'big')
EDIT2:
正如 Cukic0d 所建议的,我使用了load_layer("ssl")。
显然,pkt[TLS].msg 是一个列表(在一个数据包中保存多个 TLS 消息?)。无论如何,我打印了每条此类消息的类型,如下所示:
def handle_tls_packet(pkt):
for tls_msg in pkt[TLS].msg:
print(type(tls_msg))
我希望看到TLSCertificate 对象,但从未见过这样的对象。
为什么?
EDIT3:
我愿意使用scapy-ssl_tls,如果这样可以让生活更轻松。
【问题讨论】:
-
在第一次编辑中,您是否弄清楚为什么您的代码不起作用?我想遵循与您在代码中所做的类似的模式(不依赖于 ssl tls 的任何 scapy 包)。
标签: python ssl networking scapy