socket() failed: Operation not permitted

Тема в разделе "WASM.NETWORKS", создана пользователем Enchantner, 25 июл 2011.

  1. Enchantner

    Enchantner New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    23
    Пытаюсь создать сокет для ковыряния ICMP:
    Код (Text):
    1. if ( (sd = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0) {
    2.     perror("socket() failed");
    3.     exit(-1);
    4. }
    Логично, что для работы с сырыми сокетами нужны права рута, ставлю suid (chmod u+s) на бинарник, пробую запустить - выдает
    При запуске напрямую от рута выдает либо эту же ошибку, либо сегфолт. Что я делаю не так?
     
  2. 984259h

    984259h New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2007
    Сообщения:
    194
    Enchantner
    Попробуйте запустить по админом или отключите UAC
     
  3. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    984259h
    Человек пытается под линупсом это сделать

    Enchantner
    Здесь есть раздел WASM.UNIX
     
  4. 984259h

    984259h New Member

    Публикаций:
    0
    Регистрация:
    25 авг 2007
    Сообщения:
    194
    K10
    сразу не понял ))
     
  5. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    Код (Text):
    1. #include <sys/types.h>
    2. #include <sys/socket.h>
    3. #include <netinet/ip.h>
    4. #include <stdio.h>
    5.  
    6. int main()
    7. {
    8.         int sd;
    9.  
    10.         sd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
    11.         if (sd == -1) {
    12.                 perror("socket");
    13.                 return -1;
    14.         }
    15.  
    16.         printf("sd = %d\n", sd);
    17.  
    18.         close(sd);
    19.  
    20.         return 0;
    21. }
    gcc -o socket socket.c
    $ ./socket
    socket: Operation not permitted
    $ sudo ./socket
    sd = 3

    Вроде всё работает (ubuntu).
     
  6. 7mm

    7mm New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2009
    Сообщения:
    442
    В вашем случае проблема видимо вот в чём:
    sudo chown root:root ./socket
    sudo chmod a+s ./socket

    У вас видимо владелец обычный юзер :)
     
  7. Enchantner

    Enchantner New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    23
    7mm
    Разобрался, спасибо за помощь!