1. 概要

このチュートリアルでは、ネットワークポートを介して情報を受信し、それを端末に出力する方法を学習します。 まず、ncコマンドを使用します。これはnetcatとも呼ばれます。 次に、nmapによって開発されたncatと呼ばれる同様のプログラムを使用します。 最後に、Bashの特別なファイルを使用してポートに接続できることも学びます。

2. 使用事例

ネットワークポートを介した情報の送受信は、異なるコンピューター間で通信する場合に役立ちます。 場合によっては、通信はローカルIP127.0.0.1を使用して同じコンピューター内で行われます。 TCPを使用してネットワーク経由で通信する場合、接続には状態があります。 まず、ポートにバインドされ、リスニング状態にあるプロセスが必要です。 次に、別のプロセスが、他のプロセスがリッスンしているポートへの接続を試みます。 最後に、接続が確立されると、プロセスは相互に通信でき、接続の両側で情報を送受信できます。 したがって、ポートで受信した情報を受信して印刷する場合は、そのポートをリッスンする必要があるか接続する必要があるかを知る必要があります。 たとえば、プログラムはファイルではなくネットワーク経由でログを書き込むことができます。 この場合、プロセスはポートに接続し、ポートを介してログを書き込む場合があります。 または、プロセスがポートをリッスンし、そのポートに接続する他のプロセスにログを書き込むこともできます。 次のセクションでは、同じコンピュータ上に継続的に実行され、メモリ使用量をポート9100に記録するプログラムがあると想定します。 

3. ポートで聞く

ポートでリッスンする場合は、ncを使用し、-lパラメーターを使用してそのポートでリッスンするように構成できます。次に、を使用してバインドするポートを指定する必要があります。 ]-pパラメータの後にポート番号が続きます。 nc を実行すると、フォアグラウンドで実行され、接続を待機します。 別のプロセスが接続すると、 nc は実行を継続し、受信したすべてのものを端末に出力します。 ncを実行してポート9100でリッスンしましょう:

$ nc -l -p 9100
Sun Jan 14 14:34:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     3642760     2523640       26792    10144996    12302388
Swap:       16777212        3096    16774116

Sun Jan 14 14:35:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     3643252     2523140       26792    10145004    12301896
Swap:       16777212        3096    16774116

ご覧のとおり、 nc はポート9100でリッスンし、他のプロセスは接続してメモリ使用量情報を送信しました。 nc コマンドは、接続されたプロセスが終了した場合、またはCtrl+Cを押した場合に終了します。 nc は情報を標準出力に出力するので、その出力を別のコマンドにパイプできます。 tee をtスプリッターとして使用できるため、情報の表示とファイルへの書き込みを同時に行うことができます。 teeを使用して情報を表示し、それをmemory_usage_logs.txtファイルに書き込みましょう

$ nc -l -p 9100 | tee memory_usage_logs.txt
Sun Jan 14 14:42:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     3870020     2291796       30904    10149580    12071016
Swap:       16777212        3096    16774116
^C
$ cat memory_usage_logs.txt
Sun Jan 14 14:42:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     3870020     2291796       30904    10149580    12071016
Swap:       16777212        3096    16774116

最後に、ncの代わりにncatを使用でき、同じパラメーターを使用できます。 ncat には、-kパラメーターを使用した複数の接続をサポートする追加機能があります。 この機能は、他のプロセスが接続を閉じたときにncatが終了するのを防ぎます。 代わりに、ncatは新しい接続をリッスンし続けます。 ncatを実行してポート9100でリッスンし、-kパラメーターを追加します

$ ncat -k -l -p 9100
Sun Jan 14 14:50:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     4097840     2067580       26700    10145976    11847400
Swap:       16777212        3096    16774116

この場合、他のプロセスが切断してから再接続すると、 ncat は実行を継続し、新しい接続を受け入れます。

4. ポートへの接続

ポートでリッスンする代わりに、ポートに接続して情報を受信したい場合があります。 この場合、他のプロセスはポートをリッスンし、ポートに接続するプロセスに情報を送信します。 ポートに接続する方法は2つあります。 1つはncまたはncatの使用を含み、もう1つは特殊ファイルの使用を含みます。

4.1. ncまたはncatを使用する

ポートに接続するときは、接続するIPとポート番号を指定する必要があります。 IPの代わりに、ドメイン名を使用できる場合もあります。 IPとポートを取得したら、ncを使用して接続できます。 IPとポートをパラメーターとして、この順序で使用する必要があります。見てみましょうncを使用してIP127.0.0.1のポート9100に接続する方法:

$ nc 127.0.0.1 9100
Sun Jan 14 16:18:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     3260132     2883652       35496    10167612    12676312
Swap:       16777212        3096    16774116

Sun Jan 14 16:19:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     3270692     2873076       35492    10167628    12665756
Swap:       16777212        3096    16774116

ご覧のとおり、ncはIP127.0.0.1ポート番号9100に接続されています。 その後、情報を受信して端末に出力しました。 ncatコマンドを使用する場合は、同じパラメーターを使用できます

$ ncat 127.0.0.1 9100
Sun Jan 14 16:27:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     3332328     2812052       34188    10167016    12605424
Swap:       16777212        3096    16774116

ここで、ncncatの両方が同じように動作することがわかります。

4.2. 特別なファイルの使用

最後に、ポートに接続する場合の別のオプションがあります。 / dev / tcp/で特別なファイルを開くことを含むBash機能を使用できます。 このファイルは存在しません—ただし、BashはこのファイルをTCP接続として解釈します。 / dev / tcp / 内のフォルダーとしてIPを指定し、ファイルとしてポートを指定できます。 たとえば、/dev/tcp/127.0.0.1/9100を使用してIP127.0.0.1ポート9100に接続できます。 そのパスはファイルとして扱われるため、そのファイルでcatを使用できます。 ただし、この機能を使用するには、Bashリダイレクトを使用する必要があります。 catを使用して、/ dev / tcp / 127.0.0.1 /9100をcatの入力にリダイレクトしてみましょう

$ cat </dev/tcp/127.0.0.1/9100
Sun Jan 14 18:01:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     3563388     2561448       36236    10186560    12372308
Swap:       16777212        3096    16774116

標準入力から読み取る任意のプログラムを使用できます。 たとえば、catの代わりにteeを使用できます。 特別なファイルをteeの標準入力にリダイレクトし、情報をファイルに保存しましょう

$ tee memory_usage_logs.txt </dev/tcp/127.0.0.1/9100
Sun Jan 14 18:29:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     3654996     2468124       34004    10188276    12282940
Swap:       16777212        3096    16774116
^C
$ cat memory_usage_logs.txt
Sun Jan 14 18:29:00 -03 2022
               total        used        free      shared  buff/cache   available
Mem:        16311396     3654996     2468124       34004    10188276    12282940
Swap:       16777212        3096    16774116

この特殊ファイルの使用は簡単な方法であり、使用するために必要なのはBashだけです。 ただし、この方法は、ポートに接続する必要がある場合にのみ機能します。ポートをリッスンする必要がある場合は使用できません。

5. 結論

この記事では、ネットワークを介して情報を受信する方法を学びました。 まず、ncまたはncatを使用して、ポートにバインドしてリッスンし、情報を端末に出力できることを確認しました。 次に、 nc ncat 、または特殊ファイルを使用してポートに接続することによっても情報を受信できることを確認しました。