以下が機能しないのはなぜですか?
新しくインストールしたDebian 9システムがあります。 iptables
は広く開かれています:
[···]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
2つの別々のコンソールにログインします(2つの別々のsshログイン)。それらの1つで、私は実行します。
[···]# nc -l 11115
次に、他のコンソールに移動して実行します。
[···]# nc localhost 11115
接続が拒否されましたエラーが表示されます:
[···]# nc localhost 11115
localhost [127.0.0.1] 11115 (?) : Connection refused
私も試しましたnc 127.0.0.1 11115
、telnet
で試してみました---常に接続が拒否されました。
「聞く」側では、nc -l localhost 11115
- - 変わりはない。
何が欠けているか、間違っていますか?
[[EDIT]:CentOS 6.9マシンでは、上記とまったく同じコマンドが期待どおりに機能します。自宅のUbuntu 14.04でも同じです。 rootで実行するとnc
が一部の機能を許可しないようになっているのではないかと思いました。しかし、いいえ、私はDebian 9マシンで通常のユーザーとして試したところ、まったく同じように失敗しました。何かアイデアはありますか?
実際にはnc
(netcat)と呼ばれる3つ(またはそれ以上?)の異なるプログラムがあり、これらはずっと前から遠く離れたところにある同じ基本プログラムのフォークまたはリライトです。
Debianのデフォルトはnetcat-traditional
と呼ばれるもので、古くからあるオリジナルバージョンです。この問題をnetcat-traditionalで再現できました。聞くことは非常に壊れているようです。実際にはポートにバインドしませんでした。 ss
出力でリッスンしているのを確認できませんでした。また、straceで実行しているときにバインドしようとしているのも確認できませんでした。
もう1つの利用可能なDebianパッケージはnetcat-openbsd
と呼ばれ、OpenBSD開発者によって現在維持されているオリジナルのnetcatのフォークです。このパッケージをインストールすると機能することがわかります(そしてnetcat-traditional
を削除できます)。
Red Hatベースのシステムで使用され、nmapのFyodorやinsecure.org、その他の開発者によって開発および保守されているさらに別のnetcatパッケージがあります。これは根本から完全に書き直され、従来のnetcatまたはBSD netcatコードを使用しません。また、正常に動作します。そのパッケージ名(Red Hatシステムの場合)はnmap-ncat
です。
Debian 2パッケージでは、netcatとtransitionalパッケージで、netcat-traditionalを参照します
root@debian9:~# apt-cache search ^netcat
netcat - TCP/IP swiss army knife -- transitional package
netcat-traditional - TCP/IP swiss army knife
netcat-openbsd - TCP/IP swiss army knife
[../..]
複数回実行する場合nc -l 11115、ncはリッスンしていますが、ランダムなポート(ランダムに見える)を使用しています。
root@debian9:~# lsof -p $(pidof nc ) | grep LISTEN
nc 12734 root 3u IPv4 11892054 0t0 TCP *:44907 (LISTEN)
実際、nc -l 11115の代わりにnc -lを実行でき、同じ動作になります。
YES netcat-traditionalは古いソフトウェアであり、いくつかの単純なバグは修正されていません(この例では、リスニング用のパラメーター-p PORTがありません)。
netcat-openbsdを選択すると、期待どおりに動作します。
root@debian9:/# lsof -p $( pidof nc ) | grep LISTEN
nc 2140 root 3u IPv4 29855 0t0 TCP *:11115 (LISTEN)