Я использую сервер Ubuntu 16.04.3, он поставляется с версией Netcat для OpenBSD.
Я уже использовал версию Netcat для OpenBSD в Fedora, а в Fedora я не могу использовать опцию -p
с опцией -l
, например, следующее недопустимо:
nc -l -p 12345
Но в Ubuntu server 16.04.3 вышеприведенная команда работала (под «работали», я имею в виду netcat начал слушать)!
Хотя man nc
на самом сервере Ubuntu 16.04.3 говорит, что это недопустимо:
Почему это происходит?!
Есть 2 версии: BSD и GNU. Версия GNU поддерживает -l с -p (или, по крайней мере, заявляет, что вы можете использовать их вместе). Страница man утверждает, что мы используем отредактированную версию 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, а также неправильную страницу руководства.