第三个参数应该是什么啊。一个例子中写的是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 属性.