特定のTCPトラフィックが発生したときにアクションを実行するスクリプト(Raspberry Pi OS Bookworm)

特定のTCPトラフィックが発生したときにアクションを実行するスクリプト(Raspberry Pi OS Bookworm)

私は家の台所にあるRaspberry PiをWi-Fiブリッジとして使用して、イーサネット専用デバイスへのネットワーク接続を提供します。
私はWill Haleyのガイドを使用し、それは素晴らしい仕事をしました。その部分は解決しましたが、デバイスがNASをスムーズに起動できるようにしたいのですが、クライアントデバイスではその機能を使用できません。

etherwake[NAS用のMACADDRESS]はうまく機能し、ターミナルを使用してRaspberry PiブリッジからNASを完全に目覚めさせることができるので、トリガーに基づいてそれを自動化したいと思います。

メディアアプリがクライアントデバイスにロードされたときにNAS(閉じている)に接続しようとすると、次のことが発生します。私はpktstat以下を表示しようとしました。

603.8 0% tcp 192.168.84.100:52787 <-> 192.168.84.2:21

192.168.84.2はNAS、.100はクライアントデバイスです。私はプライマリLAN FTPサーバーを使用して家の中でメディアを共有するので、ポート21を使用します。

そのTCPトラフィックを受信し、そのトラフィックがキャプチャされたときにセカンダリスクリプトを開始する永続スクリプト/サービスをどのように生成しますか(すでにWOLがあります)。
また、NASへのping応答が絶えず目覚めようとするのを防ぐために失敗した場合にのみスクリプトを実行する必要がありますか?

Piでこれを行うことができれば、誰かが台所でメディアプレーヤーをオンにするたびにNASがオフになっても目が覚めるでしょう。これは私たちの家族にとってとても良いです。

最近の電気価格は、不要なときにNASをオフにしてスリープ状態にするのが良いことを意味します。他のほとんどのデバイスにはWOL機能があるので、ここでは手動で作成してみました。

ベストアンサー1

以下は、Ljm Dullaartの助けのおかげで問題を解決するソリューションです。

#!/bin/bash
interfacename=eth0
IPofNAS=192.168.84.2
MACADDRESSofNAS=AA:BB:CC:DD:EE:EE
timeout=300

while : ; do
    tcpdump -nt -i $interfacename -c1 dst $IPofNAS and port ftp
    if ! ping -c1 $IPofNAS ; then
        etherwake -i wlan0 $MACADDRESSofNAS
    fi
    sleep $timeout
done

最初は、tcpdumpがNAS IPに対するARPリクエストを探していたので、スクリプトは私のNASを目覚めさせました。これらの要求は、クライアントデバイスがオフになっているときに発生し、Piでのみ発生しました。これを発見するのに時間がかかりました。また、tcpdump はポート 21 を「ftp」に書き込むので、スクリプトをフィルタリングするためにポート 21 を追加すると動作が停止します。生のtcpdump出力でftpがプレーンテキストであることを確認した後、次のように追加しました。

とても感謝しています!

おすすめ記事