1. ホーム
  2. コース一覧
  3. Linux基礎コース(パート2)
  4. ncコマンドでサーバーと通信させよう!

Linux基礎コース(パート2)7/9

ncコマンドでサーバーと通信させよう!

こちらでは、Linuxのncコマンドについて解説をします。

ncコマンドとは?

ncコマンドは、netcatを省略したもので、TCPまたはUDPの通信を使ってコマンドラインからデータを送受信するコマンドです。

イメージとしてはクライアントとサーバーの間に入って繋いでくれます。サーバ側で既に利用中のポートに対して、クライアント側からちゃんと接続できるか疎通確認をするときなどに使用します。

ncコマンドのインストール

ncコマンドがインストールされていない場合はyumaptのようなコマンドで簡単にインストールすることができます。

# Ubuntuの場合
sudo apt install netcat
# CentOSの場合
sudo yum install nmap-ncatIP

ncコマンドの基本的な使い方

IPアドレスとポート番号を指定して相手のサーバーに接続することが出来ます。

デフォルトでは TCPが適用されます。

nc サーバーのIPアドレス サーバーのポート番号

また、 -l をつけることで自分がサーバーとなって、相手からの接続を待ち受けることも出来ます。

-lの後に受信したいポート番号を指定します。

nc -l 受信したいポート番号

-uオプションをつけるとUDPでの通信をすることができます。

nc -ulp 受信したいポート番号

-lオプションを使用した場合、ポート番号の指定には -pオプションも必要です。このコマンドの意味は、「自分のサーバーの特定のポートにUDPで通信する」ということになります。

ncコマンドのオプション

ncコマンドのオプションを一部ご紹介します。今回ご紹介する他にもオプションは複数あるため、気になる方はnc -hコマンドでヘルプを参照するか、ORACLEマニュアルページセクションをご覧ください。

オプション説明
-uUDPでの通信をすることができる
-tTCPでの通信をすることができる
-l自らをサーバーとして、相手からの接続を待ち受ける
-p待機するポート番号の指定をすることができる
-v詳細を出力する
-zポートスキャンを実行する

ncコマンドとオプションの使用例

以下に、ncコマンドとオプションの使い方をご紹介します。今回ご紹介するのは、次の4項目になります。

  • 相手先のサーバーのIPアドレスとポート番号を指定して通信する
  • -t -uオプションを使用してTCPとUDPを指定する
  • クライアントサーバーシステムの構築例
  • -zオプションを使用してポートをスキャンの実行

相手先サーバーのIPアドレスとポート番号を指定する

実際にサーバーと通信する例を説明します。

はじめに、ターミナルでnc サーバーのIPアドレスサーバーのポート番号 を入力します。

nc 172.19.5.11 4001

今回はIPアドレスが172.19.5.11のサーバーに4001番ポートを通って通信して見ます。

実際に通信してみると

nc 172.19.5.11 4001
Great!

Great!とサーバーから返ってきました。つまりこのサーバーに4001番ポートを通って通信するとGreat!と返すと設定されていたことになります。

次に、今度はポートを設定せずに通信してみると

nc 172.19.5.11
no port[s] to connect to

no port[s] to connect to 「接続するポートがない」と表示されます。

つまり、通信する際はサーバーのどのポート番号を通るのか指定しなければいけないということです。

-t -uオプションを使用してTCPとUDPで通信する

同じサーバーの4002番ポートでTCPを使って通信します。

nc -t 172.19.5.11 4002
 Yeah!

今度はYeah!と返ってきました。同じサーバーですが通信するポートが違うと返ってくる返事も違うことが分かります。

次は、同じサーバーの同じポートにUDPで通信して見ます。

nc -u 172.19.5.11 4002

今回は何も返ってきませんでした。これはサーバー側でどの通信方法で通信するのか設定されているためです。

つまり、同じ IP アドレスであっても TCPやUDPのポートが異なれば、提供されるサービスが異なります。

このことから172.19.5.11サーバーの4002番ポートはTCPでの通信が可能であることが分かります。

クライアントサーバーシステムを構築する

こちらではターミナルを二つ起動させてクライアントサーバーシステムを構築し、簡単なメッセージのやり取りを行います。

はじめにサーバー側で-lコマンドでクライアントからの接続を待ち受け、-pコマンドで指定したポートを解放します。

# サーバー側
nc -l -p 8000

次に、クライアント側からサーバー側のIPアドレスとポート番号を指定し、サーバーへ接続します。今回は自身の環境でターミナルを二つ起動しているため、IPアドレスはlocalhostのIPアドレスである127.0.0.1を指定しています。

# クライアント側
nc 127.0.0.1 8000

サーバー側へメッセージを送ります。

# クライアント側
nc 127.0.0.1 8000
Hello!

サーバー側を確認してみるとメッセージを受信しているのが確認できます。

# サーバー側
nc -l -p 8000
Hello!

次にサーバー側からメッセージを送ります。

# サーバー側
nc -l -p 8000
Hello!
Hi!!!

クライアント側でメッセージを受信しているのが確認できます。

# クライアント側
nc 127.0.0.1 8000
Hello!
Hi!!!

このように、-lと-pオプションを使用する事で、簡単にサーバークライアントシステムを構築することができます。

-zオプションを使用してポートをスキャンの実行

ncコマンドでは、-zオプションを使用することでポートをスキャンすることができます。-zのみではスキャンするだけで詳細が表示されないため、-vオプションを使用して詳細情報も表示させます。

こちらのコマンドを実行する際は、ご自身の管理しているネットワークかつ管理しているサーバーに対して行うようにしてください。インターネット上にあるサーバーへ行った場合、通信が遮断される場合や不正アクセスとみなされる場合があります。

# 例
nc -zv サーバーのIPアドレス スキャンしたいポート番号の範囲

ポート番号1-5000番を指定して、以下のコマンドを実行します。

nc -zv 172.19.2.11 1-5000
cf7b447c-1028-4b6c-873b-75c82038d87f-1024-1.adNW2-0 [172.19.2.11] 4002 (?) open
cf7b447c-1028-4b6c-873b-75c82038d87f-1024-1.adNW2-0 [172.19.2.11] 4001 (?) open

4001番と4002番のポートが開いていることが分かります。このように、ncコマンドではオプションを指定することでポートをスキャンすることも可能です。

ポートスキャンについてもっと学習したい方は、セキュリティ基礎コースのNmapを使ってみよう!でハンズオンをしてみましょう。

https://envader.plus/course/3/scenario/1063

まとめ

ncコマンドはクライアントとサーバーの間に入ってお互いを繋ぐコマンドです。

他にも、様々な応用的な使い方があります。

  1. ncでwebに接続
  2. ncでwebサーバーを立てる
  3. ncをftpのように使う
  4. プロキシサーバーを立てる

ncコマンドはほかのコマンドと組み合わせたりして、主にセキュリティ関連の確認で利用されることが多いです。

今回は基礎的な部分のみの説明でしたが、他にもたくさんの使われ方があるので、ぜひ参考にしてください。

Linux体験コース【初学者向け】

Envaderでは他にも、エンジニアの基礎的スキルを身に付けられる学習コースを複数提供しています。

https://envader.plus/course/14

問題を解くためには、十分な画面サイズのPC環境をご利用下さい。