您的位置:首页 > 运维架构

socket()普通用户, Operation not permitted

2015-04-23 17:31 525 查看
我想做一个ping程序,其中socket的前两个参数是AP_INET,SOCK_RAW

第三个参数应该是什么啊。一个例子中写的是IPPROTO_ICMP,这是什么东西啊,对吗?

int get_raw_socket()

{

int sd;

int flag;

if((sd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP)<0))

{

perror("get_raw_socket");

return -1;

}

flag=fcntl(sd,F_GETFL,0);

fcntl(sd,F_SETFL,flag|O_NONBLOCK);

return sd;

}

您看有问题吗?

但是执行的时候说:get_raw_socket: Operation not permitted

什么原因啊?

socket(AF_INET,SOCK_RAW,IPPROTO_ICMP)

如果你要用 SOCK_RAW,就必须有 root 权限。

如果你要在普通用户权限下运行,需要 以 root 身份执行:

chmod 4755 program ,给 程序增加一个 s 属性.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: