ネットワークデータパケット統計

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、特定のポートのネットワーク通信状態を監視するZshスクリプトを作成する方法を学びます。このスクリプトは、3秒間の期間内に指定されたポートで送信および受信されたデータパケットの数をカウントします。

👀 プレビュー

## 例
$ sh /home/labex/project/netcheck.sh 22
パケット: 2

🎯 タスク

このプロジェクトでは、以下を学びます。

  • 入力パラメータとしてポート番号を受け取るZshスクリプトを作成する方法
  • tcpdumpコマンドを使用して、指定されたポートのパケットをキャプチャしてカウントする方法
  • timeoutコマンドを使用して、スクリプトの実行に3秒間のタイムアウトを設定する方法
  • ユーザーに親切な形式でパケットのカウントを出力する方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • 特定のポートのネットワーク通信状態を監視できるスクリプトを開発する
  • Zshスクリプトでtcpdumptimeoutのような一般的なLinuxコマンドをどのように使用するかを理解する
  • 実際の問題を解決するためのシェルスクリプトの作成とテストの経験を得る

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/wc("Text Counting") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/RemoteAccessandNetworkingGroup -.-> linux/ssh("Secure Connecting") linux/RemoteAccessandNetworkingGroup -.-> linux/netstat("Network Monitoring") subgraph Lab Skills linux/echo -.-> lab-301481{{"ネットワークデータパケット統計"}} linux/wc -.-> lab-301481{{"ネットワークデータパケット統計"}} linux/cd -.-> lab-301481{{"ネットワークデータパケット統計"}} linux/ssh -.-> lab-301481{{"ネットワークデータパケット統計"}} linux/netstat -.-> lab-301481{{"ネットワークデータパケット統計"}} end

netcheck.sh スクリプトを作成する

このステップでは、3秒間の期間内に指定されたポートで送信および受信されたパケットの数をカウントする netcheck.sh スクリプトを作成します。

  1. テキストエディタを開き、/home/labex/project ディレクトリに netcheck.sh という名前の新しいファイルを作成します。
  2. 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"
  1. netcheck.sh ファイルを保存します。

netcheck.sh スクリプトをテストする

このステップでは、netcheck.sh スクリプトが期待通りに機能していることを確認するために、それをテストします。

  1. ターミナルを開き、/home/labex/project ディレクトリに移動します。
  2. 引数としてポート番号 22 を使って netcheck.sh スクリプトを実行します。
sh /home/labex/project/netcheck.sh 22
  1. スクリプトは、3秒間の期間内にポート 22 で送信および受信されたパケットの数を出力するはずです。たとえば:
パケット: 2
  1. スクリプトを異なるポート番号で実行して、正しく機能することを確認してください。

netcheck.sh スクリプトを理解する

このステップでは、netcheck.sh スクリプトのコードを理解します。

  1. スクリプトは、Zshシェルを使用して実行することを指定するシバン行 #!/bin/zsh で始まります。
  2. スクリプトは、ポート番号の引数が提供されているかどうかを確認します。そうでない場合は、エラーメッセージを出力して終了します。
  3. スクリプトは、提供されたポート番号を port 変数に割り当てます。
  4. スクリプトは、timeout コマンドを使用して3秒間のタイムアウトを設定し、次に tcpdump コマンドを使用して指定されたポートのパケット数をカウントします。-c 0 オプションは、tcpdump にすべてのパケットをキャプチャするように指示し、"port $port" フィルタは、指定されたポートのパケットのみがカウントされることを確認します。
  5. スクリプトは、tcpdump コマンドの出力をキャプチャし、wc -l を使用して行数をカウントします。これにより、パケットの総数が得られます。
  6. 最後に、スクリプトは echo "パケット: $packages" を使用してパケットのカウントを出力します。

おめでとうございます!ネットワーク通信状態を監視するための netcheck.sh スクリプトを正常に作成してテストしました。必要に応じて、さらにスクリプトを探索して変更することができます。

✨ 解答を確認して練習

まとめ

おめでとうございます!このプロジェクトを完了しました。あなたのスキルを向上させるために、LabExでさらに多くの実験を行って練習することができます。