web-dev-qa-db-ja.com

通知誰かが私のローカルネットワークに接続したとき、ARP、通知ファイル


。次のようなデバイスの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

  • 私がやりたいことは簡単です。これらのIPアドレスとMACアドレスを[〜#〜] arp [〜#〜]に追加し、それらのデバイスがローカルネットワークに接続するたびに通知ファイルを変更します。それでおしまい。

追伸:私は"ARP"と言いました。ただし、それが適切かどうかはわかりませんが、ARP config fileおよびnotification fileと関係があると思われます。端末または他のアプリケーションを使用した提案は受け入れられます。

誰かが私を助けてくれれば幸いです

1
ggalaxy

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
1
Requist