はじめに
このプロジェクトでは、特定のポートのネットワーク通信状態を監視する Zsh スクリプトを作成する方法を学びます。このスクリプトは、3 秒間の期間内に指定されたポートで送信および受信されたデータパケットの数をカウントします。
👀 プレビュー
## 例
$ sh /home/labex/project/netcheck.sh 22
パケット: 2
🎯 タスク
このプロジェクトでは、以下を学びます。
- 入力パラメータとしてポート番号を受け取る Zsh スクリプトを作成する方法
tcpdumpコマンドを使用して、指定されたポートのパケットをキャプチャしてカウントする方法timeoutコマンドを使用して、スクリプトの実行に 3 秒間のタイムアウトを設定する方法- ユーザーに親切な形式でパケットのカウントを出力する方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- 特定のポートのネットワーク通信状態を監視できるスクリプトを開発する
- Zsh スクリプトで
tcpdumpやtimeoutのような一般的な Linux コマンドをどのように使用するかを理解する - 実際の問題を解決するためのシェルスクリプトの作成とテストの経験を得る
netcheck.sh スクリプトを作成する
このステップでは、3 秒間の期間内に指定されたポートで送信および受信されたパケットの数をカウントする netcheck.sh スクリプトを作成します。
- テキストエディタを開き、
/home/labex/projectディレクトリにnetcheck.shという名前の新しいファイルを作成します。 netcheck.shファイルに以下のコードを追加します。
#!/bin/zsh
## このスクリプトは、tcpdump を使用して、3 秒間の期間内に指定されたポートで送信および受信されたパケットの数をカウントします。
## ポート番号の引数が提供されているかどうかを確認する
if [ $## -eq 0 ]; then
echo "カウントするポート番号を引数として提供してください。"
exit 1
fi
## 入力ポート番号を取得する
port=$1
## timeout コマンドを使用して 3 秒間のタイムアウトを設定し、tcpdump を使用して指定されたポートのパケット数をカウントする
packages=$(timeout 3 tcpdump -c 0 -i any "port $port" 2> /dev/null | wc -l)
## パケットのカウントを出力する
echo "パケット:$packages"
netcheck.shファイルを保存します。
netcheck.sh スクリプトをテストする
このステップでは、netcheck.sh スクリプトが期待通りに機能していることを確認するために、それをテストします。
- ターミナルを開き、
/home/labex/projectディレクトリに移動します。 - 引数としてポート番号
22を使ってnetcheck.shスクリプトを実行します。
sh /home/labex/project/netcheck.sh 22
- スクリプトは、3 秒間の期間内にポート
22で送信および受信されたパケットの数を出力するはずです。たとえば:
パケット: 2
- スクリプトを異なるポート番号で実行して、正しく機能することを確認してください。
netcheck.sh スクリプトを理解する
このステップでは、netcheck.sh スクリプトのコードを理解します。
- スクリプトは、Zsh シェルを使用して実行することを指定するシバン行
#!/bin/zshで始まります。 - スクリプトは、ポート番号の引数が提供されているかどうかを確認します。そうでない場合は、エラーメッセージを出力して終了します。
- スクリプトは、提供されたポート番号を
port変数に割り当てます。 - スクリプトは、
timeoutコマンドを使用して 3 秒間のタイムアウトを設定し、次にtcpdumpコマンドを使用して指定されたポートのパケット数をカウントします。-c 0オプションは、tcpdumpにすべてのパケットをキャプチャするように指示し、"port $port"フィルタは、指定されたポートのパケットのみがカウントされることを確認します。 - スクリプトは、
tcpdumpコマンドの出力をキャプチャし、wc -lを使用して行数をカウントします。これにより、パケットの総数が得られます。 - 最後に、スクリプトは
echo "パケット: $packages"を使用してパケットのカウントを出力します。
おめでとうございます!ネットワーク通信状態を監視するための netcheck.sh スクリプトを正常に作成してテストしました。必要に応じて、さらにスクリプトを探索して変更することができます。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたのスキルを向上させるために、LabEx でさらに多くの実験を行って練習することができます。



