socket()普通用户, Operation not permitted

时间:2022-01-05 09:32:06
我想做一个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 属性.