Envaderを利用して、ncコマンドを使って通信してみた。
今回もEnvader
を利用して、Linuxコマンドを体験しました。
コマンドラインからデータを送受信するためのコマンド、nc
コマンドの使い方を実践しながら学んだので、振り返りとしてのまとめです。
Envader
は環境構築をせずに、ブラウザでLinux環境を色々試せて便利なので重宝しています。
気になる方はリンクを貼っておきますので、参考にどうぞ。
参考にさせていただいた記事
nc(netcat)コマンド
netcat
を略したもの。
NetWorkをcatnate(連結)するという意味らしく、クライアントとサーバの間に入って2者を連結する役割を担うためにこう表現されているのかも知れません。
このコマンドで、TCPまたはUDPを使ってクライアントとサーバーの間でデータを送受信する際に使われます。
ncコマンドの利用用途
サーバーを運用していて、急にサーバへの通信が不安定になったり、接続が出来なくなったりした時に疎通確認
の目的で使われるのが多いみたいです。
ただそればかりではなく、クライアントサーバシステムの構築
、Webサーバを立てる
、プロキシサーバを立てる
など、用途は色々とあるようです。
こちらの記事に面白そうな内容が記載されていました。
nc(netcat)コマンドのいろんな使い方
基本的な使い方
接続したいIPアドレス
とポート番号
を指定して接続を開始します。
ここで、ポート番号
を指定しないとエラーが発生するので注意。
nc サーバーのIPアドレス サーバーのポート番号
もし自分の環境にncコマンドがインストールされていなかった場合には、下記のコマンドでインストールができます。
apt install nmap-ncatIP
# または
yum install nmap-ncatIP
オプションでTCP
で通信するのかUDP
で通信するのかを決められるのですが、指定しなかった場合のデフォルトではTCP
での通信になるようです。
オプション
ncコマンドのオプション例
オプション | 説明 |
---|---|
-t | TCPで通信する |
-u | UDPで通信する |
-l | 自分がサーバーとして、相手からの接続を待ち受ける |
-p | -lコマンドを使用した時に、ポート番号を指定する |
-o | 指定したファイルに結果を出力する |
TCP/UDPとは?
TCP...Transmission Control Protocolの略
インターネットで通信される際に利用されるプロトコル(決まり事)の一つ
OSI参照モデル 第4層 トランスポート層に該当し、信頼性の高い通信を実現するために利用されます。
コネクション型通信と言われ、通信開始前に相手との間で仮想的な通信路を確保するようになっています。(3ウェイハンドシェイクと呼ばれる)
HTTP通信、メールの送受信などが該当。
UDP...User Dategram Protocolの略
インターネットで通信される際に利用されるプロトコル(決まり事)の一つ
TCPと同様にOSI参照モデル 第4層 トランスポート層に該当し、3ウェイハンドシェイクなどは行われずに信頼性よりも速度を重視したプロトコルです。
コネクションレス型と言われ、通信開始前の相手との通信経路の確保などは行われません。
よりリアルタイム性が求められる通信に対して使用されます。(動画など。)
リモートサーバへ接続する
実際にnc
コマンドを使ってみます。
Graet!と表示されるのはEnvaderのシナリオの都合なので、通常は表示されません。
# 172.19.1.11の4001番ポートへ接続(TCP)
envader@172-19-1-2:~$ nc 172.19.1.11 4001
Great!
# 172.19.1.11の4001番ポートへ接続(TCP)して、log.txtへ内容を出力
envader@172-19-1-2:~$ nc 172.19.1.11 4001 -o log.txt
Great!
# UDPで172.19.1.11の4001番ポートへ接続
envader@172-19-1-2:~$ nc -u 172.19.1.11 4001
ポート番号を指定しないでエラーになる例
# ポート番号を指定していない
envader@172-19-1-2:~$ nc -u 172.19.1.11
no port[s] to connect to
# -lオプションで通信を待ち受ける(UDPオプションも使用)
envader@172-19-1-2:~$ nc -ulp 7777
Well done!!
# Well doneもEnvaderの仕様です。
まとめ
今回はncコマンドの基本的な使い方をEnvader
を利用して実践しながら学びました。
環境の都合上、webサーバーなどは立てていませんが、自分の環境にて色々試してみるのも面白いなと感じました。
最後まで読んでいただき、ありがとうございました。
Discussion