Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: low level socket  (Прочитано 699 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 6epreu

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
low level socket
« : 08 Сентября 2011, 16:01:57 »
Всем здрасте)

Такой вопрос. Начал заниматься разработкой сетевых приложений и естественно пришлось провернуть через себя всю информаицю по UNIX сокетам.
Что могу сказать.... стало очень очень интересно!)
Поэтому в свободное время начал изучать это дело подробнее.
Ну вообщем это все лирика.
И так, внимание вопрос, уважаемые знатоки!!!

почему вот это дело ...
int sock = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
if (sock < 0)
printf("Socket error. Error number is %d", errno);
... не работает. Причем sock = -1 и errno = 1 (что значит "operation not permitted").
Про заголовочники не спрашивайте. Все подключено как надо.
#include <sys/socket.h>
#include <sys/types>
#include <netinet/in.h>

Складывается такое ощущение, что кто то запрещает создать низкоуровневый сокет.

Подксажите, в чем проублема???


Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: low level socket
« Ответ #1 : 08 Сентября 2011, 16:31:43 »
ты угадал. попробуй от рута - разрешит

Оффлайн 6epreu

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: low level socket
« Ответ #2 : 08 Сентября 2011, 16:39:39 »
немного не понял... что именно разрешить от root ?

Оффлайн DemonN_nn

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: low level socket
« Ответ #3 : 08 Сентября 2011, 20:36:17 »
Система разрешит создать сокет если у приложения будут рутовые права.
Она, система, так не только для низкоуровневых сокетов делает. Даже для стандартных портов TCP/IP listen с рутовыми правами делать надо. Попробуй свой сервак на 80ом порту открыть - сильно удивишся  ;)

Оффлайн sieger1x2

  • Любитель
  • *
  • Сообщений: 84
    • Просмотр профиля
Re: low level socket
« Ответ #4 : 08 Сентября 2011, 20:39:59 »
не путайте человека. порты до 1024 может открывать только root . выше и простые пользователи.

Оффлайн DemonN_nn

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: low level socket
« Ответ #5 : 08 Сентября 2011, 20:55:51 »
Стандартный порт != любой порт  ;)

Оффлайн sieger1x2

  • Любитель
  • *
  • Сообщений: 84
    • Просмотр профиля
Re: low level socket
« Ответ #6 : 08 Сентября 2011, 21:02:53 »
а если приложение новое(нет аналогов) и для него нет стандартного порта?
rails по дефолту юзает 3000 порт. и это стандартный порт > 1024.

Оффлайн 6epreu

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Re: low level socket
« Ответ #7 : 09 Сентября 2011, 09:24:07 »
Да ребят, чет вы с портами тут лишку перегнули)))
Понятно, что порты в диапазоне <1024 может открывать только рут.

Я просто не врубился, что нужно было от рут запустить. Да и после 5-ти вчера благополучно ушел с работы.
Немного подумав я сначала, сделал setuid(0), который не разрешил мне присвоить процессу права рут и собственно ясно почему)

А потом я просто запустил из консоли свою IDE от рута и все зашуршало.

Всем как всегда спасибо за поддержку!

Оффлайн DemonN_nn

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: low level socket
« Ответ #8 : 09 Сентября 2011, 12:58:25 »
а если приложение новое(нет аналогов) и для него нет стандартного порта?
rails по дефолту юзает 3000 порт. и это стандартный порт > 1024.
А причем тут новизна и вообще какое-то приложение? Речь идет о портах и возможности их использования. http://ru.wikipedia.org/wiki/Зарезервированные_порты_TCP/UDP - до 1024 порты зарезервированы за системными сервисами. До 49151 за пользовательскими сервисами. Остальные - в общем доступе и могут быть использованы произвольным образом. Список сервисов и зарезервированных за ними портами блюдется организацией IANA. Пользоваться чужими портами настоятельно не рекомендуется как в новых приложениях, так и в старых.  :coolsmiley:

Да, а если новому приложению позарез требуется самый присамый стандартный порт, то его разработчики всегда могут стандартизировать свой протокол, написать хорошее обоснование и обратится в IANA с просьбой закрепить за ними определенный свободный порт.
« Последнее редактирование: 09 Сентября 2011, 13:04:03 от DemonN_nn »

 

Страница сгенерирована за 0.039 секунд. Запросов: 25.