13

LinuxでIPアドレスの変更を検出する方法を知っている人はいますか? dhcpcd を実行していて、新しい IP アドレスが割り当てられているとします。変更されたときに通知を受け取る方法はありますか? これは組み込みの ucLinux ビルドであり、D-Bus を使用していないため、D-Bus を使用できません。

/proc/net/ 内の何かを inotify しますか?

4

7 に答える 7

23

これは古い質問ですが、Googleで到着する人(私など)のために答えます。しばらく苦労した後、これには必ずしも C ソリューションをポーリングまたはハッキングする必要がないことがわかりました。私の場合、IP が変更されたときにホーム サーバーの (動的 dns) ドメインを更新したいと考えていました。

あなたが走っているならdhcpcd、あなたは幸運です。dhcpcd何かが起こったときにフックスクリプトを実行します。man dhcpcd-run-hooks (オンラインはこちら)を参照してください。基本的には、イベントによって提供されるデータで何をしたいdhcpcd.enter-hookかによって、独自に変更または作成する必要があります。dhcpcd.exit-hook

于 2013-12-13T19:22:38.680 に答える
17

コマンド

ip monitor

このようなことが起こっていることを示します。それはかなりトリッキーで、十分に文書化されていないネットリンク API を使用します (少なくとも人間が理解するには)。ただし、割り当てられた IP の変更、ルーティング テーブル、リンク ステータス (誰かがネットワークからプラグを抜いたなど) など、さまざまなイベントのカーネルからの通知を受け取ることができます。

于 2010-04-29T22:16:01.647 に答える
1

私が考えたのは、リンクに応じて、10分ごとにcronからこのスクリプトを実行することでした。私がこれを正しく書いていれば、IP が変更されたときにのみ nsupdates が実行されるため、ゾーンのマスター サーバーに過度の負荷がかかることはありません。

#!/bin/bash

OLD_IP=`cat ip.txt`

NEW_IP=`/sbin/ifconfig  | awk -F "[: ]+'{ print $4}'` #adapted from something I got from the internets.

if [ $NEW_IP != OLD_IP ]; then
    nsupdate <commands> #it seems like the keys need to be in the same directory from where nsupdate was called
fi

echo $NEW_IP > ip.txt

exit 0 #not sure if this is necessary

未検証!

于 2011-06-14T01:36:37.990 に答える
1

DHCP アクティビティは syslogd に送信されるため、名前付きパイプを作成し、そこに syslog トラフィックを送信して、ストリームで IP アドレスの更新を監視できます。「man syslogd」および「man syslog.conf」を参照してください。

編集: 別のアプローチは、inotify を使用してインターフェイスの DHCP リース ファイルを監視することです。/var/lib/dh​​cp3 ディレクトリにある Ubuntu 9.10 の下。

于 2010-04-29T21:00:27.913 に答える
0

DD-WRTを実行しているルーターがあり、ルーターにアクセスするときにステータスページを使用している場合、スクリプトを使用して...ステータスページを取得し、IPアドレスをcatし、比較のためにファイルに書き込みます。最新の wget IP アドレスが比較ファイルの内容から変更されたときにメールを送信します。

linksys wrt54g ルーターで dd-wrt ​​を実行しており、このスクリプトを使用しています。192.168.3.1 からルーター ステータス ページを取得し、ページ (index.html) で cat を使用し、wan IP アドレスを grep してから、次のように書き込みます。ファイル (gotip.txt)。

キャプチャされた ip (gotip.txt) と現在の作業 ip (workingip.txt) の間で比較が行われます。IP アドレスが異なる場合、send mail によって新しい IP のメールが送信され、新しい作業 IP が workingip.txt ファイルに書き込まれます。

これを 5 分ごとに Cron で実行すると、cron の出力が /dev/null にサイレンシングされます。

#!/bin/bash

getip=$(wget http://192.168.3.1/)
cat index.html | grep "wan_ipaddr" > gotip.txt

gotip=$(cat gotip.txt)
compare=$(cat workingip.txt)

if [[ "$compare" != "$gotip" ]]
    then 
    EMAIL="youremail@foo.net"
    EMAILMESSAGE="/home/pi/ipmessage.txt"
    echo "ip address is now $gotip" >> $EMAILMESSAGE
    /usr/sbin/sendmail -t "$EMAIL" < $EMAILMESSAGE
    rm ipmessage.txt
    cp gotip.txt workingip.txt
    rm index.html

else
echo "done"
rm index.html
fi
于 2013-10-16T17:05:20.627 に答える
0

最新の Linux ディストリビューションでは、dbus を使用してこれを行うことができると思います。ディストリビューションで NetworkManager を使用している場合、その dbus インターフェイスに関する情報については、次のドキュメントを参照してください。

http://people.redhat.com/dcbw/NetworkManager/NetworkManager%20DBUS%20API.txt

于 2010-04-29T21:03:00.500 に答える