这个问题是这样的: 在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-traditional
( netcat-traditional
或者netcat6
)。
不要调整你的设置。 那里有多个netcat的实现; 并不是所有的行为都是一样的。
特别是,如果你省略了-p
(“port”)标志,那么netcat的“传统”版本(可能是你在Debian系统上安装的版本)最终会做一些完全意想不到的事情:最后会处理最后一个参数作为主机名 ,将它传递给inet_aton()
,将其转换为无意义的IP地址(例如,1234将变为0.0.4.210),然后继续忽略该IP地址并在自动分配的套接字上侦听(可能是随机的)端口号。
这种行为显然是愚蠢的,所以netcat的其他一些实现将假定你的意思是-p
。 不过,你正在使用的那个不是,所以通过-p
选项。