奇怪的 netcat(OpenBSD 版本)行为

奇怪的 netcat(OpenBSD 版本)行为

我正在使用 Ubuntu 服务器 16.04.3,它附带 OpenBSD 版本的 netcat。

我之前在 Fedora 中使用过 OpenBSD 版本的 netcat,而在 Fedora 中我无法使用该-p选项-l,例如下面这样是非法的:

nc -l -p 12345

但是在 Ubuntu 服务器 16.04.3 中,上述命令起作用了(“起作用”的意思是 netcat 开始监听)!

尽管man ncUbuntu 服务器 16.04.3 本身表明这是非法的:

在此处输入图片描述

为什么会这样?!

答案1

有两个版本:BSD 和 GNU。GNU 版本支持 -l 和 -p(或者至少声明你可以一起使用它们)。手册页指出我们使用经过编辑的 BSD 版本。

这是 GNU 版本:

NAME

netcat - GNU Netcat Manual 

CONTENTS

SYNOPSIS

    netcat [options] hostname port [port] ...

    netcat -l -p port [options] [hostname] [port] ...

    netcat -L hostname:port -p port [options] ... 

===

这是来自 BSD 手册页:

Name

nc - arbitrary TCP and UDP connections and listens
Synopsis

nc [-46DdhklnrStUuvzC] 
     [-i interval [-p source_port] 
     [-s source_ip_address] [-T ToS] [-w timeout]
     [-X proxy_protocol] [-x proxy_address[:port]] [hostname[port[s]]

...

-l' Used to specify that nc should listen for an incoming 
connection rather than initiate a connection to a remote host. 
It is an error to use this option in conjunction with the -p, -s, or -z options. 
Additionally, any timeouts specified with the -w 
option are ignored. 

确实很奇怪。但看起来我们要么使用 GNU,其手册页指向原始 BSD 手册,要么使用经过修改的 BSD 版本,并且手册页也错误。

相关内容