web-dev-qa-db-ja.com

ncを使用した単純なクライアント/サーバーが機能しない

以下が機能しないのはなぜですか?

新しくインストールした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 11115telnetで試してみました---常に接続が拒否されました

「聞く」側では、nc -l localhost 11115 - - 変わりはない。

何が欠けているか、間違っていますか?

[[EDIT]:CentOS 6.9マシンでは、上記とまったく同じコマンドが期待どおりに機能します。自宅のUbuntu 14.04でも同じです。 rootで実行するとncが一部の機能を許可しないようになっているのではないかと思いました。しかし、いいえ、私はDebian 9マシンで通常のユーザーとして試したところ、まったく同じように失敗しました。何かアイデアはありますか?

2
Cal-linux

実際には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です。

3
Michael Hampton

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)
2
EchoMike444