5

这个问题紧随其后:在 openSUSE 中工作的套接字在 Debian 中不起作用?

在我的 Debian 系统上使用套接字时,我必须使用 nc -l -p port_number 来模拟我想与之交谈的服务器。如果我使用 nc -l port_number,则在使用套接字连接功能时它会失败,并且 strerror(errno) 会说“连接被拒绝”。

没有 -p 选项的 Netcat 在其他 Linux 发行版上运行良好,我应该对我的配置进行哪些更改?

4

2 回答 2

6

不要调整你的设置。那里有多种 netcat 实现;并非所有人的行为都相同。

特别是,netcat 的“传统”版本,可能是您在 Debian 系统上安装的,如果您省略-p("port") 标志,最终会做一些完全出乎意料的事情:它最终会将最后一个参数视为一个hostname,将它传递给inet_aton(),它会将其转换为一个无意义的 IP 地址(例如,1234 将变为 0.0.4.210),然后将继续忽略该 IP 地址并在具有自动分配(可能是随机)端口的套接字上侦听数字。

这种行为显然很愚蠢,因此 netcat 的其他一些实现会假设您的意思是-p. 但是,您正在使用的那个没有,因此请通过该-p选项。

于 2013-03-10T04:10:55.997 回答
4

我同意黄昏的说法,最好在-p任何地方都使用该选项,但要回答您的问题:

您必须做的一件事是安装一个支持您想要的语法的 netcat。我知道该netcat-openbsd软件包支持它。我知道netcat-traditional包裹没有。还有一个netcat6包,它也没有。然后,您可以像这样显式请求 OpenBSD 版本的 netcat:

nc.openbsd -l 4242

或者,您可以使用替代系统来设置此版本的 netcat 在您发出nc命令时运行:

update-alternatives --set nc /bin/nc.openbsd

如果这是您安装的唯一 netcat,这将自动为您完成。

最后,您可以再次选择删除您不喜欢的 netcat (netcat-traditionalnetcat6)。

于 2013-03-10T05:44:53.467 回答