Здравствуйте, Kernan, Вы писали:
K>Э. Фильтр настрой, по ip, по порту, по адресу отправителя.
Загвоздка в том, что почти все пакеты на клиентской стороне, попадут под этот фильтр. И трафик все равно будет плотный. Проблемный пакет отправляется на стадии инициализации клиента, так что фиг его отфильтруешь.
Возникла следующая проблема с OpenSSL. Есть приложение которое используя OpenSSL передает/принимает текстовые месседжи. Проблемы возникаю при отправке мессаджей размером больше 9кб. При отправке, SSL_write возвращает положительное значение, и возвращает управление программе. Так, что получается что месседж отправился. Но вот на сервер оно не приходит. Поэтому вопрос, можно ли как то проконтролировать отправку этого мессаджа? Возможно в OpenSSL есть какие то средства диагностики? А может быть есть, способ анализировать TLS трафик? Для TCP я использую WireShark, но tls к сожалению ей не посмотришь.
Здравствуйте, sergeyli, Вы писали:
S>Всем привет!
S>Возникла следующая проблема с OpenSSL. Есть приложение которое используя OpenSSL передает/принимает текстовые месседжи. Проблемы возникаю при отправке мессаджей размером больше 9кб. При отправке, SSL_write возвращает положительное значение, и возвращает управление программе. Так, что получается что месседж отправился. Но вот на сервер оно не приходит. Поэтому вопрос, можно ли как то проконтролировать отправку этого мессаджа? Возможно в OpenSSL есть какие то средства диагностики? А может быть есть, способ анализировать TLS трафик? Для TCP я использую WireShark, но tls к сожалению ей не посмотришь.
Если ты отправил мессадж, то по любому должен был видеть активность по TCP, а т.к никакого служебного трафика в idle режиме не идёт, то ты можешь гарантированно идентифицировать своё сообщение.
K>Если ты отправил мессадж, то по любому должен был видеть активность по TCP, а т.к никакого служебного трафика в idle режиме не идёт, то ты можешь гарантированно идентифицировать своё сообщение.
Проблема в том, что между сервером и клиентом, довольно плотный ТСР трафик. И почти нереально идентифицировать нужное сообщение. Что странно, так то что не отправляется только одно сообщение. А до него и после него месседжи идут нормально.
Здравствуйте, sergeyli, Вы писали:
S>Возникла следующая проблема с OpenSSL. Есть приложение которое используя OpenSSL передает/принимает текстовые месседжи. Проблемы возникаю при отправке мессаджей размером больше 9кб. При отправке, SSL_write возвращает положительное значение, и возвращает управление программе. Так, что получается что месседж отправился. Но вот на сервер оно не приходит. Поэтому вопрос, можно ли как то проконтролировать отправку этого мессаджа? Возможно в OpenSSL есть какие то средства диагностики? А может быть есть, способ анализировать TLS трафик? Для TCP я использую WireShark, но tls к сожалению ей не посмотришь.
А что вы делаете с SSL-соединением после того, как сказали SSL_write()? Пытаетесь получить ответ, или вообще ничего не делаете?
Pzz>А что вы делаете с SSL-соединением после того, как сказали SSL_write()? Пытаетесь получить ответ, или вообще ничего не делаете?
Я жду, что вернет SSL_write. Если она возвращает положительную величину, то ничего не делаю, если 0 или отрицательную величину то SSL_get_error и там в зависимости от результата. Сейчас вот добавил дополнительные логи, после отправки проблемного мессаджа, SSL_write возвращает верное количество байт, т.е. какой объем в байтах в нее передали, столько она и вернула.
Здравствуйте, sergeyli, Вы писали:
S>Проблема в том, что между сервером и клиентом, довольно плотный ТСР трафик. И почти нереально идентифицировать нужное сообщение. Что странно, так то что не отправляется только одно сообщение. А до него и после него месседжи идут нормально.
Э. Фильтр настрой, по ip, по порту, по адресу отправителя.
Здравствуйте, sergeyli, Вы писали:
Pzz>>А что вы делаете с SSL-соединением после того, как сказали SSL_write()? Пытаетесь получить ответ, или вообще ничего не делаете?
S>Я жду, что вернет SSL_write. Если она возвращает положительную величину, то ничего не делаю, если 0 или отрицательную величину то SSL_get_error и там в зависимости от результата. Сейчас вот добавил дополнительные логи, после отправки проблемного мессаджа, SSL_write возвращает верное количество байт, т.е. какой объем в байтах в нее передали, столько она и вернула.
Я думаю, что SSL_write кладет ваши данные в буфер, пытается пропихнуть в сокет, сколько влезет, и на этом успокаивается. Если бы вы после нее позвали SSL_read (или другой SSL_write), то данные, оставшиеся в буфере, дослались бы. Но поскольку вы ничего больше не делаете, они и не досылаются. У OpenSSL нет собственного потока ввода-вывода, он живет на контексте ваших потоков.
Попробуйте пересмотреть ваш способ использования SSL-соединения так, чтобы на нем все время была какая-то активность: либо запись, либо чтение, либо ожидание готовности сокета (если вы используете OpenSSL в неблокирующемся режиме).
Pzz>Я думаю, что SSL_write кладет ваши данные в буфер, пытается пропихнуть в сокет, сколько влезет, и на этом успокаивается. Если бы вы после нее позвали SSL_read (или другой SSL_write), то данные, оставшиеся в буфере, дослались бы. Но поскольку вы ничего больше не делаете, они и не досылаются. У OpenSSL нет собственного потока ввода-вывода, он живет на контексте ваших потоков.
Pzz>Попробуйте пересмотреть ваш способ использования SSL-соединения так, чтобы на нем все время была какая-то активность: либо запись, либо чтение, либо ожидание готовности сокета (если вы используете OpenSSL в неблокирующемся режиме).
Pzz, спасибо огромное за идею, буду менять алгоритм. Если все получится — отпишусь
Но вот примера использования этой функции я не нашел. Эта функция должна возвращать размер буфера, на сколько я понял он возвращается в через size_t. Но тогда возникает вопрос, что нужно передавать в функцию в качестве параметра size? Я достаточно долго гуглил, но так и не нашел ответа.
Ps. может кто то знает где можно найти документацию по OpenSSl, потому что на OpenSSL.org она довольно скудная.