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

bap*_*ptx 4 unix sockets debian netcat

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

在我的Debian系统上使用套接字时,我必须使用nc -l -p port_number来模拟我想要与之交谈的服务器.如果我使用的是nc -l port_number,则在使用套接字连接功能时会失败,而strerror(errno)会说"Connection refused".

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

dus*_*uff 6

不要调整你的设置.netcat有多种实现方式; 并非所有人都表现得一样.

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

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


Sam*_*ard 4

我同意 duskwuff 的观点,最好-p在任何地方都使用该选项,但要回答你的问题:

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

nc.openbsd -l 4242
Run Code Online (Sandbox Code Playgroud)

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

update-alternatives --set nc /bin/nc.openbsd
Run Code Online (Sandbox Code Playgroud)

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

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