Здравствуйте, niXman, Вы писали:
X>такие пакеты я ловил всего два раза. это очень редко, потому что этот код работает уже около полугода.
X>еще странность в том, что у пира приславшего этот пакет невозможно получить IP адрес, что похоже на SYN-flood атаку.
Ты что-то глобально путаешь. При SYN flood вообще соединение не устанавливается. А если прошёл TCP handshake (TCP ведь?), то адрес другой стороны известен. Даже если его эмулирует ближайший раутер.
Невозможно получить IP — может быть следствием того, что отправитель прислал RST. Тогда сам виноват, что не получил адрес ещё в accept(), а ждал возможности сделать getpeername() когда-нибудь потом.
А вот атака с подделкой sequence numbers — тут вполне возможна. Тогда ты видишь её состоявшийся вариант. Но скорее таки локальный взлом клиента.
X>по поводу "подделки" пакетов перед шифрованием, я думаю, это можно сделать путем подмены msvcrt`шной функции memcpy(). но как с этим бороться? написать свою, хоть и не самую быструю реализацию этой функции(с инлайном етц..)?
И как ты собрался лечить этим удалённого клиента?
X>глобальный вопрос: как защититься?
Например, message sequence numbers внутри потока (и тогда они тоже шифруются). После этого успешно расшифровать поддельный TCP уже не сможешь; а если смог — то ремотная программа взломана и вопрос именно в этом.