Android上的原始套接字

Jim*_*Jim 10 sockets android

我想创建一个在Android上运行并使用Raw Sockets的应用程序.我看到java.net.*或android.net.*库中没有任何原始套接字支持.Android上的原始套接字是否可用?

Ste*_*eve 9

任何Java或Android库都不支持正确的原始套接字,部分原因是(我在这里引用):

据信,这样的包会降低当前的Java安全模型,并且可能难以以非操作系统(OS)依赖的方式实现.

有像RockSawJSocket这样的第三方库,但是这些库需要编译C或C++,所以你在那里运气不好.

另外,我相信您需要root访问才能使用原始套接字.

所以,尽管如此,我会说在技术上它是可能的,但目前还不实用.

  • 我实际上需要原始套接字.使用原始套接字的目的是可以操作数据包.我想写一个PPPoE层,这需要访问原始数据包.它确实需要与内置VPN客户端运行在同一级别.是否有类似DDK的工具包,可让您在Android上的驱动程序级别进行编写? (3认同)
  • 您可以使用Android NDK for C/C++代码.但这对访问限制没有帮助. (2认同)
  • @Tingo 和 Steve:“我相信您需要 root 访问权限才能使用原始套接字”:更准确地说,您需要 [CAP_NET_RAW 功能](http://man7.org/linux/man-pages/man7/packet.7.html) ,但是是的,除非使用更细粒度的权限管理,否则归结为“root”。 (2认同)