Как работать с TUN на с++ [закрыт]

99
15 октября 2019, 07:00

Как работать с tun на с++ и обрабатывать пакеты
+Можете ли скинуть какой-нить материал по TUN

Answer 1

В двух словах:

  1. Подключить заголовочные файлы <linux/if.h> и <linux/if_tun.h>
  2. Создать и настроить виртуальный интерфейс средствами из этих файлов (также могут пригодиться обычные средства вроде ioctl интерфейсов и маршрутизации - настроить адрес, прописать маршрут)
  3. Получить файловый дескриптор виртуального интерфейса и работать с ним так, как если бы это был обычный файл или сокет. Только в этом случае это будет сетевой интерфейс

    • Запись в fd приведет к получению сетевым стеком ядра пакета из вашего интерфейса
    • Чтение из fd возможно при отправке сетевым стеком ядра пакета в ваш интерфейс
    • Можно использовать select и прочие инструменты для работы с fd

Как обычно в Linux - гибко, универсально и надо разбираться, "курить мануалы" так сказать

Посмотрите примеры: https://backreference.org/2010/03/26/tuntap-interface-tutorial/

По поводу обработки пакетов - это крайне обширная тема, могу лишь сказать, что заголовки большинства распространенных протоколов (ethernet, ip, tcp, udp, icmp) уже есть в виде готовых структур в заголовочных файлах netinet/*.h, и лучше использовать их, а не писать самому

Не забывайте, что в сетевой интерфейс пакеты уходят и приходят оттуда в RAW-виде, то есть начиная с уровня Ethernet

READ ALSO
Корреляционный код в С++

Корреляционный код в С++

Есть задача, с бинарной системы исчисления провести корреляцию, то есть с 1001 должно выйти 10010110Каждая единица это 10, а ноль это 01

92
Удаление указателя в слоте при связи destroyed()

Удаление указателя в слоте при связи destroyed()

У меня есть участок кода, который в определённых случаях генерирует ошибку, которую мне никак не удаётся понятьСвязана она с освобождением...

132
Ошибка при подключении DLL

Ошибка при подключении DLL

У меня есть DLL библиотекаВот ее код:

106
Что такое raw socket и в чем его преимущество?

Что такое raw socket и в чем его преимущество?

пытаюсь учить сетевое программирование, но пока слабо получаетсяЕсли с TCP или UDP вопрос не возникает, то с raw не могу разобраться

118