TCP для начинающих

Тема в разделе "WASM.NETWORKS", создана пользователем featurelles, 14 июл 2010.

  1. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Ну или не совсем для начинающих, пытаюсь разобраться как работает 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"
     
  2. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    правильно ли я понимаю, что речь идет о модификации какой-то конкретной отдельно взятой реализации TCP стека в в какой-то конкретной Linux системе? т.е. фактически вы пытаетесь свои собственные TCP пакеты отправлять через TCP стек? ;)
     
  3. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Что-то путано объяснено. Что подразумевается под внедрится в поток?
     
  4. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    Booster
    скорее всего человек пытается воткнуть свои TCP пакеты в очередь стека и при этом ничего не сообщая о своих честных честных намерениях машине состояния TCP стека. понятное дело, что просто так не получится, надо ковырять исходники и напильником выравнивать TCP стек в разных местах, чтобы он позволил себя использовать таким гнусным образом если это вообще имеет смысл ;) вообще сама идея не понятна - нафига все это?!
     
  5. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Не правильно! Реализация сетевого стека во всех linux-ах одинакова ( я так думаю, хоть и не проверял ).

    Точно!

    К примеру уже установлено соединение, и идёт обмен пакетами, тут я вступаю в дело. Беру очередной отправляемый пакет , создаю его копию, модифицирую то что нужно, пересчитываю checksum и отправляю с правильным seq и ack чтоб его приняла другая сторона, как пакет являющийся частью потока.( отправка пакета происходит сразу в сетевое устройство, потому не модифицируется структура "struct tcp_sock" ), (пакет который является частью потока, уничтожается). Другая сторона, принимает этот пакет, и думает что он является частью потока обмена данными, и отвечает на него новым пакетом с новым seq и ack. Когда приходит данный пакет, та система, на которой я формировал новый пакет не обрабатывает его, так как данный о Моём пакете, не занесены в "struct tcp_sock" данного соединения.
    Вобщем меня интересует, как и что нужно подправить в структуре "struct tcp_sock" после формирования и отправки моего пакета, чтоб система, приняла ответ второй стороны на данный пакет.
     
  6. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    NeuronViking
    Верно )

    А вот это не верно, не нужно корректировать стек, нужно всеголишь подправить структуру, которая отвечает за tcp поток. Собственно, то что я и спрашиваю.

    Идею вы уже поняли. А нафига это? просто подумал, что если это возможно (а это очевидно что возможно) то не плохобы реализовать.
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    featurelles
    Зачем такой геморрой?
     
  8. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    Booster
    Повышение профессионального уровня, + возможность скрытия модификации от wireshark и tcpdump .
     
  9. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    featurelles
    почему-то я очень очень сильно сомневаюсь, что достаточно только одной структуры ;) там ведь и конгестион алгоритм, и сиквенс номера и дрегие интересные вещи. и все это надо грамотно апдейтить при отправке и приеме пакетов.

    Посмотри вот тут http://www.phrack.com/issues.html?issue=66&id=9 - здесь очень подробно и с комментариями обсуждается реализация TCP в Линуксе. Возможно ты там найдешь решение.
     
  10. featurelles

    featurelles New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2009
    Сообщения:
    562
    NeuronViking
    Ну может с модификацией всего одной структуры я загнул. Но всёже при приёме не надо будет ничего модифицировать. ( одна из задач модификации структур, какрас является указание ожидаемых номеров пакетов )

    За ссылку спасибо, сейчас почитаю.( жаль тока что на англе, тяжко будет читать, ведь англа не знаю )
     
  11. NeuronViking

    NeuronViking New Member

    Публикаций:
    0
    Регистрация:
    29 окт 2004
    Сообщения:
    476
    Адрес:
    где-то в Сиднее
    кстати, если добьешь эту тему, поделись пожалуйста информацией. мне тоже интересно знать в чем может быть проблема.