。次のようなデバイスの1つに通知を追加したいだけです。ラップトップ、電話、タブレットがローカルネットワークに接続します。私の構成は次のとおりです。
ワイヤレスルーターを使用しています。ルーターは有線でデスクトップコンピューターに直接接続されており、LANを使用しています。他のデバイスはWI-FIを介して接続しています。
例として、次のように言ってみましょう。
ルーターのIPアドレス:192.168.1.1&MACアドレスXX:XX:XX:XX:XX:XX
Me-サーバーとして-192.168.1.101&MACアドレスYY:YY:YY:YY:YY:YY
スマートフォン-192.168.1.102&MACアドレスZZ:ZZ:ZZ:ZZ:ZZ:ZZ
ラップトップ-192.168.1.103&MACアドレスKK:KK:KK:KK:KK:KK
追伸:私は"ARP"と言いました。ただし、それが適切かどうかはわかりませんが、ARP config fileおよびnotification fileと関係があると思われます。端末または他のアプリケーションを使用した提案は受け入れられます。
誰かが私を助けてくれれば幸いです
notify-send yourmessage
を使用して通知を送信できますが、やりたいことは少し奇妙です。
ルーターは接続を処理するルーターです。ネットワークへの接続は、デバイスが実際にコンピューターに接続/対話しない限り、コンピューターによって記録または認識されません。もちろん、次のようにネットワークを定期的にスキャンしてモニターを作成することもできます。
nmap -sn 192.168.1.*
そして、ここからデータを読み込みます(または、arp、ここでそれらを見つけることができます)。ただし、基本的に接続を監視するデバイスは、PCではなくルーターです。
ルーターがサポートしている場合、ルーターのログを解析してPCのsyslogに記録できます。接続が確立されると、syslogにメッセージが表示され、必要に応じてデスクトップ環境に送信できます。
ただし、質問に答えるため、nmap -snを実行するスクリプトをcronに追加し、これを一時ファイルにパイプし、diffを使用してこれを前の状況と比較します。差分出力はオフライン、差分入力はオンラインを意味します。
大まかな例(実行ごとに最初のIP変更のみを処理する):
#!/bin/bash
#
#Script to monitor the network and put changes to notification
#
#Save previous scan
cp scan.txt previousscan.txt
#get numeric list of online hosts
nmap -n -sn 192.168.178.* > scan.txt
#collect the difference, only the lines with ip-numbers
message=$(diff previousscan.txt scan.txt | grep 192)
#get first char which indicates if the Host came up or went away
iostring="${message:0:1}"
#get first ip-number from the list
computer="${message:23:17}"
#show ip-number in notify if Host came up
if [ "$iostring" = \> ]; then
notify-send "$computer online"
fi
#show ip-number in notify if Host went away
if [ "$iostring" = \< ]; then
notify-send "$computer offline"
fi