天天看点

socket()普通用户, Operation not permitted

我想做一个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 属性.

继续阅读