gpt4 book ai didi

macos - OS X Mountain Lion 上的 Homebrew socat,sctp "Protocol not supported"

转载 作者:行者123 更新时间:2023-12-02 01:19:42 27 4
gpt4 key购买 nike

我正在非常努力地开发一个涉及 SCTP 协议(protocol)的业余爱好程序,为了掌握基础知识,我尝试安装 socat使用homebrew ,socat是一个类似netcat的工具,用于测试各种协议(protocol)。但到目前为止,在 OS X Mountain Lion 上还没有取得任何成功。这是安装和错误日志:

$ 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 可能不支持。也许只是使用 sctp 的人太少了,我在 Google 上到处搜索这个错误,但还没有找到任何有用的东西。

我在 Gentoo/Debian 服务器上尝试了同样的事情,它们都工作得很好,我只是不能让它在 OS X 下工作。我对 OS X 世界相当陌生,有什么建议吗?

最佳答案

看起来 OS X 头文件知道 SCTP 协议(protocol),但库实际上并没有实现它。您可以使用第三方扩展来破解它。

我在 OS X 10.8.3 上得到了同样的结果。安装 socat 时,它会在配置中检测 SCTP 支持并设置WITH_SCTP 定义。

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

但是,如果您查看configure,就会发现这是一个非常简单的测试。 “是否包含SCTP支持”是是否指定了--enable-sctp,默认是打开的。 “检查 IPPROTO_SCTP”只是定义该协议(protocol)常量是否在头文件中定义。也就是说, header 可以知道该协议(protocol)并具有表示它的值,但底层系统可能无法实际使用。我认为这里的情况就是这样:OS X 内核不提供 SCTP 实现。

较新版本的 OS X 下有对 SCTP 的“初步”第三方支持:https://nplab.fh-muenster.de/groups/wiki/wiki/f366c/ 。安装这个让 SCTP 在 Homebrew 软件的 socat 中为我工作。

[@ in ~]$ socat -d -d sctp-listen:99999 -2013/04/24 22:19:38 socat[270] E socket(2, 1, 132): Protocol not supported2013/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) -> 32013/04/24 22:20:51 socat[291] I starting accept loop2013/04/24 22:20:51 socat[291] N listening on LEN=16 AF=2 0.0.0.0:34463

警告:这是一个第三方内核扩展,它是“初步的”,没有大量的文档,而且我不能保证来源。这可能很脆弱,并且可能很难从错误中恢复。我会在虚拟机中执行此操作,而不是在主机中执行此操作。虚拟机非常适合试验低级内容和各种机器配置。 (举个例子:为了解决这个问题,我以 root 身份对我的机器进行了一系列的修改,并做了一些有问题的事情,然后,我将我的虚拟机恢复到快照,就好像它从未发生过一样。)

另一个选择是查看 libusrsctp 中的“用户层”(非内核)SCTP 支持,可在 Homebrew 中使用。这不会让 socat 与 SCTP 一起使用,但可能会支持您使用它进行其他爱好编程。

关于macos - OS X Mountain Lion 上的 Homebrew socat,sctp "Protocol not supported",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15606087/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com