【发布时间】:2021-06-05 11:22:58
【问题描述】:
我正在尝试在 Android 上实现 VPN 服务。我提供了原始 IP 数据包(在第 3 层工作的 TUN 接口),但不确定我应该如何发送数据包。我知道我可以解析 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 接口——本质上是一个直通代理。
任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: android networking tcp embedded lwip