socket(AF_INET,SOCK_DGRAM,IPPROTO_ICMP)失败,errno = 13(权限被拒绝)

时间:2017-03-16 08:41:52

标签: android sockets linux-kernel android-ndk icmp

在adb shell中运行,由NDK编译。

我的代码:

#include <sys/socket.h>
#include <errno.h>
#include <linux/netlink.h>
#include <linux/in.h>
#include <string.h>
#include <stdio.h>
int main()
{
    int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP);
    printf("sock = %d and errno = %d\n", sock, errno);
    return 0;
}

输出:

shell@android:/data/local/tmp $ ./poc
sock = -1 and errno = 13

有人知道为什么吗?

1 个答案:

答案 0 :(得分:0)

请参阅here

看起来您需要添加: -

<uses-permission android:name="android.permission.INTERNET" /> 

https://developer.android.com/guide/topics/manifest/uses-permission-element.html

可能重复

如果您的目标是Android 7.0,可能值得查看Using Socket() in Android NDK处的权限更改,但这取决于您的targetSdkVersion是否大于 23