Сергей Протько: форвардить нельзя - банально прав нет:) нужно разруливать "руками", в принципе это не проблема, мне главное нужно было понять с чего начинать. А вот как насчет UDP? к примеру, при запросе домена по 53 порту у DNS сервера ,каким образом ответ идет, не подскажите?
Да,всё верно - этакий прокси:) Вы гений! Не поверите, минут 10 назад перед прочтением вашего сообщений, в голове я нарисовал такую же схему (без сырых сокетов), но у меня возник опять вопрос, а как быть со служебной инфорй в пакете? например: когда мы конектимся по TCP, мы тупа дёргаем метод connect (при котором на уровне IP прошло рукопожатие и установился коннект)и дальше отправляем через сокет данные, вся магия SYN ACK остается на уровне IP,как тут быть? ведь моё приложение со стороны IP и вижу я эти пакеты с рукопожатием, отправлять назад фиктивные пакеты назад? а самому по тихому создавать коннект и уже в него отправлять данные, если пришли данные, а не служебная инфа (рукопожатие SYN ACK и другие флаги)
Сергей Протько: порты? конечно знаю, я же разбираю IP пакет полностью, у них внутри TCP или UDP (писал об этом выше). Оправить тот же TCP могу, но возникают трудности,которые я описал в самом первом сообщении:(
Сергей Протько: обычный IP пакет согласно RFC, в хедере у него версия IP - 4 или 6, протокол TCP/UDP, ip src/dst что-то еще есть и данные, в данных уже в зависимости от протокола свои поля
Сергей Протько: это интересно, сокет будет один,верно? просто на каждый фрагмент из IP конфигурируем и делаем отправку? а как данные с UDP принять? тот же DNS по 53 порту. а почему в цикле бегаем и отправляем? из-за кол-ва данных? нужно отправлять не больше MTU?
neolink: cнифер/анализатор, верно. разбор пакетов уже могу делать закрытыми глазами, не понимаю,что дальше делать. Пакет разобрал, ок - это к примеру TCP все хедеры и флаг попарсил,ок ....и всё, дальше висну. пробовал отправить данные из TCP пакета через обычную схему: создаем сокет (socket()), конект к серверу (connect()) и send данных и опять те самые вопросы - что делать с сокетом? что делать с конектом в целом? как получать данные назад? ну и практически тоже самое с UDP? Спасибо вам за конструктивный диалог. Надеюсь, Вы направите меня на хоть какой-то путь истины.
знал бы на 100 % :( Один товарищ сказал - "тебе нужно реализовать свой TCP/IP" - без проблем, гугл и давать смотреть примеры и тут пошла каша полная, как работает сам стек на уровне теории я знаю и понимаю, но как эти знания применить конкретно к моей задачи - проблема. Что вы думаете насчет "перепаковать IP в TCP" ?
Насчет ICMP neolink прав. а вот "Мне кажется вам просто нужно сделать перепаковку данных из IP дейтаграммы в TCP пакет" - Вы правы наверно, можете подсказать,что для этого нужно, при условии,что ОС - linux, и как быть с UDP?
это уже интересно,спасибо, у меня появилась новая проблема, при отправке UPD, они приходят ко мне опять на этот интерфейс (TUN0), хотя в теории такого не должно быть. Я распарсил IP заголовок, узнал куда отправлять, распарсил UDP хедер,узнал порт назначения, но похоже происходит зацикливание.