这个问题遵循以下问题:Sockets working in openSUSE do not work in Debian?
在我的Debian系统上使用套接字时,我必须使用nc -l -p port_number来模拟我想要与之交谈的服务器。如果我使用的是nc -l port_number,则在使用套接字连接函数时会失败,而strerror(错误号码)会说“连接被拒绝”。
没有-p选项的Netcat在其他Linux发行版上运行良好,我应该如何更改配置?
答案 0 :(得分:6)
不要调整你的套装。 netcat有多种实现方式;并非所有人都表现得一样。
特别是"传统"如果省略-p
(" port")标志,netcat的版本(可能就是你在Debian系统上安装的那个版本)最终会做一些完全出乎意料的事情:它最终会对待它最后一个参数作为主机名,将其传递给inet_aton()
,将其转换为无意义的IP地址(例如,1234将变为0.0.4.210),然后将继续忽略该IP使用自动分配的(可能是随机的)端口号在套接字上寻址和侦听。
这种行为显然很愚蠢,因此netcat的其他一些实现会假设你的意思是-p
。但是,您使用的那个并不是,所以通过-p
选项。
答案 1 :(得分:4)
我同意duskwuff最好在任何地方使用-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-traditional
或netcat6
)。