Netcat:使用nc -l port_number而不是nc -l -p port_number

这个问题是这样的: 在openSUSE中工作的套接字在Debian中不起作用。

当在我的Debian系统上使用套接字时,我必须使用nc -l -p port_number模拟我想要与之通话的服务器。 如果我使用的是nc -l port_number,那么在使用套接字连接函数时会失败,而strerror(errno)会说“连接被拒绝”。

没有-p选项的Netcat在其他Linux发行版上工作得很好,我应该在configuration上改变什么?

我同意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-traditionalnetcat-traditional或者netcat6 )。

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

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

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