Как отправить\принять пакеты 3-его уровня OSI в мир?
Есть файловый дескриптор виртуального интерфейса tun0 и завернутый весь трафик через него. При отправке данных через этот интерфейс в вечном цикле считываю через read данные в виде дейтаграмм 3 уровня сетевой модели OSI.
В пакете есть вся соответствующая информация, адрес\порт отправителя\получателя, протокол,длина пакет и собственно данные. Вопрос заключается в следующем, как все входящие пакеты на этот интерфейс программно перенаправить на "мир" и при этом получить ответ и запись назад в этот интерфейс tun0 ?
Парсить пакет могу, но не понимаю, как отправлять,что бы приходил ответ и так же не понятно,что делать TCP пакете, если при UDP понятно отправил и всё,хотя непонятно как получить ответ, а вот с TCP проблема, держать конект на каждый пакет?
да,нужно руками обрабатывать, сниффер пишу. Спасибо за ссылку,но там немного не то:(
Соль в чем, у меня есть "сырой" IP пакет, мне нужно отправить его на мир по TCP/UPD (в зависимости от заголовков). Повторюсь, заголовки и структуру пакета я разбираю согласно RFC. Буду рад любым подсказкам.Спасибо!
Так не понял, вам нужно просто перенаправить пакет - или вы хотите упаковать ip внутрь tcp?
Если просто перенаправить - посмотрите реализацию tcpreplay и прочего: tcpreplay.synfin.net/wiki/manual
Если хотите упаковать - то в случае tcp свой сокет создайте и всё - сетевой стэк сам разрулит.
Ну и думаю интересно будет поглядеть на pfring www.ntop.org/products/pf_ring
это уже интересно,спасибо, у меня появилась новая проблема, при отправке UPD, они приходят ко мне опять на этот интерфейс (TUN0), хотя в теории такого не должно быть. Я распарсил IP заголовок, узнал куда отправлять, распарсил UDP хедер,узнал порт назначения, но похоже происходит зацикливание.
Ответ придет, когда в заголовке получателя твоего пакета, который ты отправишь, введен IP твоего хоста.
Отправлять можно через write, но по идее для этого есть API (sys/sockets.h) , правильней работать через него. То есть отправить: send(), sendto(), получить recv(), recvfrom().
Есть книга "Разработка приложений в среде Linux" Майкл К. Джонсон, Эрик В. Троан. Там есть глава про сокеты и про TCP.
Вариант - залезь в сырцы программы ping.