nc (netcat)のlistenはGNU版とBSD版でオプション指定が異なる
以下が1234ポートでlistenする方法。
GNU版
code:bash
nc -l -p 1234
BSD版
code:bash
nc -l 1234
Macの標準のncはAppleがカスタマイズしたBSD版が入っている。もしbrew install netcatをしていればGNU版が入る。MacのBSD版を明示的に実行するには/usr/bin/ncが利用できる。 GNU版と同様の-l -p オプションに対応/非対応の BSD版
対応:OpenBSD netcat (Debian patchlevel 1.187-1ubuntu0.1)
Dockerのubuntu:18.04にapt install -y netcat-openbsdで入れたもの。-vをつけて1234でlistenしていることも確認済み。Alpineでのapk add netcat-openbsdでも「OpenBSD netcat (Debian patchlevel 1.130)」がインストールされubuntu:18.04と同様の結果だった。
非対応:OpenBSD netcat (Debian patchlevel 1.89-3ubuntu2)
docker run -it ubuntu:10.04 bashにて検証。nc/netcatはデフォルトでインストールされている。-l -pをつけるとエラーしてusageが表示される。
GNU版でもBSD版と同様のコマンドは正常に動くが意味が異なる
面倒なことはGNU版でnc -l 1234をしてもエラーでこけない。ただし1234ポートでlistenするわけではない。
例えばUbuntuで-vオプションもつけて実行すると詳細がわかり、1234でlistenしていないことが分かる。
code:console
$ nc -vl 1234
1234: inverse host lookup failed: Unknown host
listening on any 33453 ... また、BSD版 (Apple) でnc -l -p 1234を実行すると以下のメッセージが出る。
code:console
/usr/bin/nc -l -p 1234
nc: missing port with option -l