2013-03-25 1 views
4

Я очень много работаю над программой хобби, которая включает в себя протокол SCTP, чтобы понять основы, я попытался установить socat, используя homebrew, socat is netcat- как инструмент для тестирования различных протоколей. Но без успеха на OS X Mountain Lion пока нет. Вот установить & журнал ошибок:homebrew socat on OS X Mountain Lion, sctp «Протокол не поддерживается»

$ brew install socat 
==> Installing socat dependency: readline 
==> Downloading http://ftpmirror.gnu.org/readline/readline-6.2.tar.gz 
######################################################################## 100.0% 
tar: Failed to set default locale 
==> Patching 
patching file callback.c 
patching file input.c 
patching file patchlevel 
patching file support/shobj-conf 
patching file vi_mode.c 
==> ./configure --prefix=/usr/local/Cellar/readline/6.2.4 --mandir=/usr/local/Ce 
==> make install 
==> Caveats 
This formula is keg-only: so it was not symlinked into /usr/local. 

OS X provides the BSD libedit library, which shadows libreadline. 
In order to prevent conflicts when programs look for libreadline we are 
defaulting this GNU Readline installation to keg-only. 

Generally there are no consequences of this for you. If you build your 
own software and it requires this formula, you'll need to add to your 
build variables: 

    LDFLAGS: -L/usr/local/opt/readline/lib 
    CPPFLAGS: -I/usr/local/opt/readline/include 

==> Summary 
?? /usr/local/Cellar/readline/6.2.4: 31 files, 1.6M, built in 34 seconds 
==> Installing socat 
==> Downloading http://www.dest-unreach.org/socat/download/socat-1.7.2.1.tar.bz2 
######################################################################## 100.0% 
tar: Failed to set default locale 
==> Downloading patches 
######################################################################## 100.0% 
==> Patching 
patching file xioexit.c 
==> ./configure --prefix=/usr/local/Cellar/socat/1.7.2.1 --mandir=/usr/local/Cel 
==> make install 
    /usr/local/Cellar/socat/1.7.2.1: 8 files, 624K, built in 41 seconds 

Вы видите, homebrew закончил составление и успешно установлен socat. Для того, чтобы убедиться, что SCTP включен

$ socat -V 
socat by Gerhard Rieger - see www.dest-unreach.org 
socat version 1.7.2.1 on Mar 25 2013 08:43:00 
    running on Darwin version Darwin Kernel Version 12.2.1: Thu Oct 18 12:13:47 PDT 2012; root:xnu-2050.20.9~1/RELEASE_X86_64, release 12.2.1, machine x86_64 
features: 
    #define WITH_STDIO 1 
    #define WITH_FDNUM 1 
    #define WITH_FILE 1 
    #define WITH_CREAT 1 
    #define WITH_GOPEN 1 
    #define WITH_TERMIOS 1 
    #define WITH_PIPE 1 
    #define WITH_UNIX 1 
    #undef WITH_ABSTRACT_UNIXSOCKET 
    #define WITH_IP4 1 
    #define WITH_IP6 1 
    #define WITH_RAWIP 1 
    #define WITH_GENERICSOCKET 1 
    #undef WITH_INTERFACE 
    #define WITH_TCP 1 
    #define WITH_UDP 1 
    #define WITH_SCTP 1 
    #define WITH_LISTEN 1 
    #define WITH_SOCKS4 1 
    #define WITH_SOCKS4A 1 
    #define WITH_PROXY 1 
    #define WITH_SYSTEM 1 
    #define WITH_EXEC 1 
    #define WITH_READLINE 1 
    #undef WITH_TUN 
    #define WITH_PTY 1 
    #define WITH_OPENSSL 1 
    #undef WITH_FIPS 
    #undef WITH_LIBWRAP 
    #define WITH_SYCLS 1 
    #define WITH_FILAN 1 
    #define WITH_RETRY 1 
    #define WITH_MSGLEVEL 0 /*debug*/ 

Чтобы попробовать простое соединение SCTP

$ socat - sctp4:my_server:19191 
2013/03/25 08:45:46 socat[18838] E socket(2, 1, 132): Protocol not supported 

И это не удалось. На домашней странице socat объявляется поддержка OS X, но, видимо, sctp migh нет. Возможно, слишком мало людей используют sctp, и я всюду ошибался в этой ошибке и не нашел ничего полезного.

Я пробовал то же самое на сервере Gentoo/Debian, и они оба отлично работали, я просто не могу заставить его работать под OS X. Я довольно новичок в мире OS X, любые подсказки, пожалуйста?

ответ

1

Похоже, что заголовочные файлы OS X знают о протоколе SCTP, но библиотеки фактически не реализуют его. Вы можете взломать его с помощью сторонних расширений.

Получилось то же самое на OS X 10.8.3. При установке socat он обнаруживает поддержку SCTP в конфигурации и устанавливает это определение WITH_SCTP.

 
$ ./configure | grep -i sctp 
configure: WARNING: include file netpacket/packet.h not found, disabling interface 
checking whether to include SCTP support... yes 
checking for IPPROTO_SCTP... yes 

Однако, если вы посмотрите в configure, это очень простой тест. «Включить поддержку SCTP» - это указать параметр --enable-sctp и включен по умолчанию. И «проверка для IPPROTO_SCTP» просто определяет, определена ли константа протокола в файлах заголовков. То есть заголовки могут знать этот протокол и иметь значение для его представления, но базовая система может не реализовывать фактически использование. Я думаю, что это имеет место здесь: ядро ​​OS X не обеспечивает реализацию SCTP.

Существует «предварительная» сторонняя поддержка SCTP в новых версиях ОС X: https://nplab.fh-muenster.de/groups/wiki/wiki/f366c/. Установка этого полученного SCTP работает для меня в homebrew's socat.

 
[@ in ~] 
$ socat -d -d sctp-listen:99999 - 
2013/04/24 22:19:38 socat[270] E socket(2, 1, 132): Protocol not supported 
2013/04/24 22:19:38 socat[270] N exit(1) 
[✘ @ in ~] 
$ sudo kextload /System/Library/Extensions/SCTP.kext 
[✘ @ in ~] 
$ socat -d -d -d sctp-listen:99999 - 
[...snip...] 
2013/04/24 22:20:51 socat[291] I socket(2, 1, 132) -> 3 
2013/04/24 22:20:51 socat[291] I starting accept loop 
2013/04/24 22:20:51 socat[291] N listening on LEN=16 AF=2 0.0.0.0:34463 

Внимание: это расширение ядра стороннего, это «предварительное», есть не много документации, и я не могу ручаться за источник. Это, вероятно, будет хрупким, и может быть трудно восстановить ошибки. Я сделал бы это на виртуальной машине, а не в вашей основной машине. Виртуальные машины отлично подходят для экспериментов с материалами низкого уровня и различными конфигурациями машин. (Пример: чтобы выяснить этот вопрос, я сделал кучу возиться с моей машиной и некоторыми сомнительными вещами как root, а затем, я вернул свою виртуальную машину к снимку, и это похоже на то, что этого не произошло.)

Другое опция смотрит на поддержку «userland» (не ядро) SCTP в libusrsctp, доступную в Homebrew. Это не приведет к тому, что socat работает с SCTP, но может поддерживать ваше другое хобби.

+0

ahhh, поэтому OS X не поддерживает sctp по умолчанию, спасибо! – est

Смежные вопросы