@yanchumak

Как отправить\принять пакеты 3-его уровня OSI в мир?

Есть файловый дескриптор виртуального интерфейса tun0 и завернутый весь трафик через него. При отправке данных через этот интерфейс в вечном цикле считываю через read данные в виде дейтаграмм 3 уровня сетевой модели OSI.
В пакете есть вся соответствующая информация, адрес\порт отправителя\получателя, протокол,длина пакет и собственно данные. Вопрос заключается в следующем, как все входящие пакеты на этот интерфейс программно перенаправить на "мир" и при этом получить ответ и запись назад в этот интерфейс tun0 ?
Парсить пакет могу, но не понимаю, как отправлять,что бы приходил ответ и так же не понятно,что делать TCP пакете, если при UDP понятно отправил и всё,хотя непонятно как получить ответ, а вот с TCP проблема, держать конект на каждый пакет?
  • Вопрос задан
  • 2516 просмотров
Пригласить эксперта
Ответы на вопрос 3
@brutal_lobster
А что вы пишите? Так ли нужно руками все обрабатывать?
По сути вопроса посмотрите на lwn.net/images/pdf/LDD3/ch17.pdf
Ответ написан
Комментировать
@yanchumak Автор вопроса
да,нужно руками обрабатывать, сниффер пишу. Спасибо за ссылку,но там немного не то:(
Соль в чем, у меня есть "сырой" IP пакет, мне нужно отправить его на мир по TCP/UPD (в зависимости от заголовков). Повторюсь, заголовки и структуру пакета я разбираю согласно RFC. Буду рад любым подсказкам.Спасибо!
Ответ написан
@remarkes
Ответ придет, когда в заголовке получателя твоего пакета, который ты отправишь, введен IP твоего хоста.
Отправлять можно через write, но по идее для этого есть API (sys/sockets.h) , правильней работать через него. То есть отправить: send(), sendto(), получить recv(), recvfrom().
Есть книга "Разработка приложений в среде Linux" Майкл К. Джонсон, Эрик В. Троан. Там есть глава про сокеты и про TCP.
Вариант - залезь в сырцы программы ping.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы