Пытаюсь создать сокет для ковыряния ICMP: Код (Text): if ( (sd = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) { perror("socket() failed"); exit(-1); } Логично, что для работы с сырыми сокетами нужны права рута, ставлю suid (chmod u+s) на бинарник, пробую запустить - выдает При запуске напрямую от рута выдает либо эту же ошибку, либо сегфолт. Что я делаю не так?
Код (Text): #include <sys/types.h> #include <sys/socket.h> #include <netinet/ip.h> #include <stdio.h> int main() { int sd; sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); if (sd == -1) { perror("socket"); return -1; } printf("sd = %d\n", sd); close(sd); return 0; } gcc -o socket socket.c $ ./socket socket: Operation not permitted $ sudo ./socket sd = 3 Вроде всё работает (ubuntu).
В вашем случае проблема видимо вот в чём: sudo chown root:root ./socket sudo chmod a+s ./socket У вас видимо владелец обычный юзер