使用客户端问候消息检测TLS协议

时间:2013-04-24 14:02:57

标签: c ssl

我需要检测网络流量中的https数据包。到目前为止,我将所有“443”标记为https,但我不想再为此案使用端口信息。

检查客户端问候消息是否足够,如:

//Check 22 and version info 0300 0301 or 0302
if (packet->payload[0] == 0x16 && packet->payload[1] == 0x03
  && (packet->payload[2] == 0x00 || packet->payload[2] == 0x01 || packet->payload[2] == 0x02)

{
    int temp = ntohs(get_u16(packet->payload, 3)) + 5;//Get lenght 
    //Check lenght is valid and 6th byte is client hello(which is 1)
    if (temp < packet->payload_length && temp > 50 && packet->payload[5]) == 1) 
        MARK AS HTTPS 
}

由于我的项目设计,我无法检查多个数据包。如果只是像上面那样检查客户问候是否可以,请指点一下吗?

1 个答案:

答案 0 :(得分:1)

  

由于我的项目设计,我无法检查多个包。   如果只是像上面那样检查客户问候,你能告诉我吗?   不是吗?

我认为你的意思是“数据包”不是“包”。鉴于我们在这里使用TCP,能够重新组合碎片消息是至关重要的。只要你有一个只对单个数据包进行操作的工具,你就不能期望可靠地(如在100%的时间内)检测到超过单个字节的消息内容。那是因为TCP发送者一个接一个地将字节运送给你是完全合法的......所以你需要准备重新组装它们或者知道你会错过一些信息。