5

この質問は次の質問に続きます: openSUSE で動作するソケットは Debian では動作しませんか?

Debian システムでソケットを使用する場合、nc -l -p port_number を使用して、通信するサーバーをシミュレートする必要があります。nc -l port_number を使用している場合、ソケット接続機能を使用すると失敗し、strerror(errno) で「接続が拒否されました」と表示されます。

-p オプションなしの Netcat は、他の Linux ディストリビューションで問題なく動作します。構成で何を変更すればよいですか?

4

2 に答える 2

6

セットを調整しないでください。netcat には複数の実装があります。それらのすべてが同じように動作するわけではありません。

特に、おそらく Debian システムにインストールされている netcat の「伝統的な」バージョンは、-p("port") フラグを省略すると、まったく予期しないことをすることになります: 最後の引数を次のように扱うことになります。hostname、それを に渡すとinet_aton()、それは無意味な IP アドレスに変換され (たとえば、1234 は 0.0.4.210 になります)、その IP アドレスを無視して、自動的に割り当てられた (おそらくランダムな) ポートでソケットをリッスンします。番号。

この動作は明らかにばかげているため、netcat の他の実装では、意図したものと見なされます-p。ただし、使用しているものはそうではないため、-pオプションを渡します。

于 2013-03-10T04:10:55.997 に答える
4

オプションをどこでも使用する方が良いというダスクワフに同意し-pますが、質問に答えるには:

必要な構文をサポートする netcat をインストールする必要があります。netcat-openbsdパッケージがそれをサポートしていることは知っています。netcat-traditionalパッケージがそうでないことは知っています。パッケージもありnetcat6ますが、そうではありません。次に、次のように、netcat の OpenBSD バージョンを明示的に要求できます。

nc.openbsd -l 4242

nc必要に応じて、alternatives システムを使用して、コマンドの発行時にこのバージョンの netcat を実行するように設定できます。

update-alternatives --set nc /bin/nc.openbsd

インストールした netcat がこれだけの場合、これは自動的に行われます。

最後に、必要に応じて、気に入らない netcat (netcat-traditionalまたはnetcat6) を削除することもできます。

于 2013-03-10T05:44:53.467 に答える