Я пытаюсь реализовать службу VPN на Android. Мне предоставляются необработанные IP-пакеты (интерфейс TUN, который работает на уровне 3), и я не уверен, как я должен отправлять пакеты. Я знаю, что могу разобрать IP-пакеты, чтобы извлечь данные транспортного уровня (TCP или UDP), а затем отправить их, но я надеялся, что есть способ просто отправить весь IP-пакет.
Сначала я пытался использовать необработанный сокет (https://man7.org/linux/man-pages/man7/raw.7.html) и отправить его таким образом, но узнал, что это невозможно из-за проблем с разрешениями. Чтобы открыть необработанный сокет, вам нужны права root, а приложения Android не могут запускаться с правами root.
Я нашел проект под названием LWIP (https://www.nongnu.org/lwip/2_1_x/index.html), в котором говорится, что это библиотека реализации стека TCP/IP, но после прочтения документации я не могу понять, как это сделать.
У LWIP есть собственные API-интерфейсы (https://www.nongnu.org/lwip/2_1_x/raw_8h.html#a17edd059f34f45a770fe2fa458ecf4dd), который выглядит многообещающе, но я не уверен, что это то, что мне нужно. По сути, мне просто нужен способ отправить необработанный IP-пакет, а затем получить ответ и записать его обратно в интерфейс TUN — по сути, сквозной прокси.
Любая помощь будет принята с благодарностью. Спасибо!