2013-03-10 48 views
4

这个问题是以下这一项:Sockets working in openSUSE do not work in Debian?Netcat的:用NC -l端口号,而不是NC -l -p端口号

当我的Debian系统上的插座的工作,我不得不使用NC -l -p端口号来模拟我想要与之通话的服务器。如果我使用nc -l port_number,则在使用套接字连接功能时会失败,并且strerror(errno)会说“连接被拒绝”。

不带-p选项的Netcat在其他Linux发行版上运行良好,我应该在配置中更改哪些内容?

回答

4

我duskwuff同意,最好是只使用-p选项无处不在,但回答你的问题:

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

nc.openbsd -l 4242 

可选方案,您可以使用替代系统来设置这个版本的netcat的运行时发出的nc命令:

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

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

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

+0

很好的回答!我将使用-p选项,但是我已经安装了netcat-openbsd软件包以解决netcat-traditional问题。 我试过netcat6,它应该只是添加IPv6协议并根据手册页来增强UDP。-n选项仍然需要使用nc6,但明确表示: bapt @ debian:〜$ nc6 -l 4242 nc6:在监听模式下,您必须使用-p开关 – baptx 2013-03-10 13:10:28

+0

@baptx指定一个端口,感谢您的信息netcat6。我将它添加到我的答案中。 – 2013-03-10 16:33:03

6

不要调整你的设置。那里有多个netcat的实现;并不是所有人都表现得一样。

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

这种行为显然很愚蠢,所以netcat的其他一些实现会假定你的意思是-p。但是,您正在使用的那个不会,因此通过-p选项。

+0

感谢您解释这是由于我的系统实施。我将使用-p选项来指定端口。我仍然希望解决这些问题,以确保未来不会有任何意外。这就是为什么我安装了netcat-openbsd并且没有必要调整我的设置,update-alternatives已自动切换到nc.openbsd;)顺便说一下,似乎netcat-traditional不支持IPv6 – baptx 2013-03-10 13:23:04

+0

cygwin有一个BSD nc实现(不确定版本),说不使用-p和-l ..所以我想也许你不能总是这样做--p在正确使用的意义上是“安全”..“-p source_port 指定nc应该使用的源端口....这是一个 错误,使用此选项与-l 选项一起使用。“ – barlop 2016-05-01 02:04:28