Ну или не совсем для начинающих, пытаюсь разобраться как работает TCP протокол. Для этого смотрел исходники ядра linux, читал умные книжки, и так ничего и не понял. Потому и задаю вопрос знающим людям. Меня интересует следующее. Например создалось соединение с какой-то системой , структура "struct tcp_sock" ( по моему значения = аналоги описанные в RFC 793 http://rfc.com.ru/rfc793.htm ) заполнена различными значениями. Как мне внедриться в поток передаваемых данных?. Я создаю отдельный пакет, заполняю его аналогично пакету, который должен быть передан ( правильно заполнены все заголовки, и ACK и SYN в tcp , так чтоб другая сторона корректно приняла данный пакет ). Отправляю новый пакет в через "dev->queue_xmit" . Он корректно принимается на противоположной стороне, и другая сторона отвечает новым пакетом с новыми SYN и ACK . Пакет приходит от противоположной стороны, но не принимается "стеком TCP", Wireshark пишет, что "TCP ACK segment lost " другими словами syn и ack не те , что ожидает tcp поток....оно и понятно )... Надо при отправке моего пакета через dev->queue_xmit модифицировать структуру "struct tcp_sock" Так чтоб, tcp поток принял ответ на созданный мной пакет, как будто, он был частью потока. Собственно, как это сделать?? какие поля и как , нужно модифицировать в этой "struct tcp_sock"
правильно ли я понимаю, что речь идет о модификации какой-то конкретной отдельно взятой реализации TCP стека в в какой-то конкретной Linux системе? т.е. фактически вы пытаетесь свои собственные TCP пакеты отправлять через TCP стек?
Booster скорее всего человек пытается воткнуть свои TCP пакеты в очередь стека и при этом ничего не сообщая о своих честных честных намерениях машине состояния TCP стека. понятное дело, что просто так не получится, надо ковырять исходники и напильником выравнивать TCP стек в разных местах, чтобы он позволил себя использовать таким гнусным образом если это вообще имеет смысл вообще сама идея не понятна - нафига все это?!
Не правильно! Реализация сетевого стека во всех linux-ах одинакова ( я так думаю, хоть и не проверял ). Точно! К примеру уже установлено соединение, и идёт обмен пакетами, тут я вступаю в дело. Беру очередной отправляемый пакет , создаю его копию, модифицирую то что нужно, пересчитываю checksum и отправляю с правильным seq и ack чтоб его приняла другая сторона, как пакет являющийся частью потока.( отправка пакета происходит сразу в сетевое устройство, потому не модифицируется структура "struct tcp_sock" ), (пакет который является частью потока, уничтожается). Другая сторона, принимает этот пакет, и думает что он является частью потока обмена данными, и отвечает на него новым пакетом с новым seq и ack. Когда приходит данный пакет, та система, на которой я формировал новый пакет не обрабатывает его, так как данный о Моём пакете, не занесены в "struct tcp_sock" данного соединения. Вобщем меня интересует, как и что нужно подправить в структуре "struct tcp_sock" после формирования и отправки моего пакета, чтоб система, приняла ответ второй стороны на данный пакет.
NeuronViking Верно ) А вот это не верно, не нужно корректировать стек, нужно всеголишь подправить структуру, которая отвечает за tcp поток. Собственно, то что я и спрашиваю. Идею вы уже поняли. А нафига это? просто подумал, что если это возможно (а это очевидно что возможно) то не плохобы реализовать.
Booster Повышение профессионального уровня, + возможность скрытия модификации от wireshark и tcpdump .
featurelles почему-то я очень очень сильно сомневаюсь, что достаточно только одной структуры там ведь и конгестион алгоритм, и сиквенс номера и дрегие интересные вещи. и все это надо грамотно апдейтить при отправке и приеме пакетов. Посмотри вот тут http://www.phrack.com/issues.html?issue=66&id=9 - здесь очень подробно и с комментариями обсуждается реализация TCP в Линуксе. Возможно ты там найдешь решение.
NeuronViking Ну может с модификацией всего одной структуры я загнул. Но всёже при приёме не надо будет ничего модифицировать. ( одна из задач модификации структур, какрас является указание ожидаемых номеров пакетов ) За ссылку спасибо, сейчас почитаю.( жаль тока что на англе, тяжко будет читать, ведь англа не знаю )
кстати, если добьешь эту тему, поделись пожалуйста информацией. мне тоже интересно знать в чем может быть проблема.