Я полагаю, вы говорите о TLS ("Защищенный TCP").
Тогда да. После установления связи между клиентом и сервером сообщения «данных» обычно начинаются с 3 специальных байтов (если я хорошо помню), которые указывают на уровень SSL, что кадр зашифрован.
С другой стороны, вы не можете предполагать, что размер зашифрованного кадра будет таким же, как у необработанного кадра / данных.
Здесь вы видите пример функции на C / C ++.
bool isCiphered(const char* buf, size_t buflen)
{
if (buflen < 3)
{
return false;
}
uint8_t c = buf[0];
switch (c)
{
case 0x14:
case 0x15:
case 0x16:
case 0x17:
{
uint8_t v1 = buf[1];
uint8_t v2 = buf[2];
/* TLS v1 */
if ((v1 == 0x03) && (v2 == 0x01))
{
return true;
}
/* DTLS v1 */
if ((v1 == 0xfe) && (v2 == 0xff))
{
return true;
}
break;
}
}
return false;
}
Мне пришлось адаптировать свой существующий код, так что я не уверен, что он компилируется, но вы должны понять.