2010-04-29 23 views
8

Linux'ta bir IP adresi değişikliği algılamanın bir yolu bilen var mı? Dhcpcd'yi çalıştırdığımı varsayalım ve yeni bir IP adresi atar, değiştiğinde bir bildirim alabilir miyim? D-Bus kullanamıyorum çünkü buna sahip olmayan gömülü bir ucLinux yapısı.Linux'ta IP adresinde bir değişikliğin algılanması

/proc/net /?

+0

Ne kadar hızlı bilmek istersiniz? Bir tür anketin kabul edilebilir olması yeterli mi? (uygun bir bildirim mevcutsa yoklamayı öneririm) –

+0

http://stackoverflow.com/questions/8542253/how-to-get-notified-for-ip-address-changes-automatically – LtWorf

cevap

1

DHCP etkinliği syslogd'a gönderildiği için, adlandırılmış bir boru oluşturabilir, ona doğrudan syslog trafiği oluşturabilir ve IP adresi güncellemeleri için akışı izleyebilirsiniz. Bakınız 'man syslogd' ve 'man syslog.conf'.

Düzenleme: Başka bir yaklaşım arabirim için DHCP kiralama dosyasını izlemek için inotify kullanmak olmalıdır. Ubuntu 9.10 altında/var/lib/dhcp3 dizinindedir.

+0

Çözüm Ben düşünüyorum 'ile devam etmek monitör/proc/net/rotayı inotify etmektir ve yönlendirme tablosunun her değiştiğinde adresi sorgulamak için SIOCGIFADDR ioctl kullanın. –

+1

Muhtemelen inotify kullanarak/proc dosyalarını izleyemiyorsunuz./proc bir dosya sistemi değil, bir çekirdek arayüzüdür. – Snowhare

12

komut

ip monitor 

size oluyor bu tür şeyleri gösterecektir. Oldukça zor olan ve iyi belgelenmemiş netlink API'sini kullanır (en azından insanlar için). Bununla birlikte, atanmış IP'lerin, yönlendirme tablolarının ve bağlantı durumunun (örneğin ağın takılı olduğu biri) değişiklikleri gibi çeşitli olayların çekirdeği tarafından bildirilebilir.

+1

Bu iyi görünüyor - çok iyi; teşekkür ederim ... ama ucLinux ipin BusyBox sürümünde mevcut değil! –

+0

Çok teşekkürler, çok yararlı – pylover

1

Bu betiğin her 10’da cron’dan bağlantınıza bağlı olarak veya dakikalar. Bu hakkını yazmış olsaydım, yalnızca bir IP değişikliği olduğunda, nsupdates olur, bu nedenle bölgenin ana sunucusunda gereksiz bir yükleme olmaz.

#!/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 

Test edilmedi!

0

DD-WRT çalıştıran bir yönlendiriciniz varsa ve yönlendiriciye giderken durum sayfasının kullanılmasını sağladıysanız, komut dosyası ile ... durum sayfasını, ip adresi için kediyi yazabilir ve bir Karşılaştırma için dosya, en son wget ip adresi karşılaştırma dosyasında ne değiştiğinde bir e-posta gönderin.

Ben bir Linksys WRT54G yönlendirici üzerinde gg-wrt çalışan ve bu komut dosyasını kullanmak ediyorum: Bu 192.168.3.1 dan yönlendirici durumu sayfasını wgets wan ip adresi için sayfa (index.html) ve greps üzerinde kedi kullanır ve sonra bir dosyaya (gotip.txt) yazar.

Yakalanan ip (gotip.txt) ve geçerli çalışan ip (workingip.txt) arasında bir karşılaştırma yapılır. Ip adresleri farklıysa, yeni ipin gönderim postasıyla gönderilen bir e-posta alıyorum ve yeni çalışma ipi workingip.txt dosyasına yazılır.

Cron (örneğin bu 5 dk ya da öylesine her koşmak ve ben cron çıkış işlemi/dev susturulmuş olması/Bu eski bir sorudur

#!/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="[email protected]" 
    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 
13

boş ama Google tarafından gelecek olanlar için cevap verecektir kendim gibi). Bir süre uğraştıktan sonra, bunun için bir C çözümüne gerek duymadığınızı ya da yok etmenizin gerekmediğini öğrendim. Benim durumumda, IP değiştiğinde ev sunucum (dinamik dns) etki alanını güncellemek istedim.

dhcpcd kullanıyorsan, şansın var.dhcpcd, bir şey olduğunda kanca komut dosyalarını çalıştıracaktır. Bakınız man dhcpcd-run-hooks(online here). Temel olarak, etkinlik tarafından sağlanan verilerle ne yapmak istediğinize bağlı olarak kendi dhcpcd.enter-hook veya dhcpcd.exit-hook'unuzu değiştirmek veya oluşturmak isteyeceksiniz.

1

Daha eski bir iş parçacığıdır, ancak birisi benim yaptığım gibi bulduğunda, Linux'u bir süre sonra (çoğunlukla VPN kullanıcılarına yardım etmeyi hedefleyen) ağda algılama/bildirim yapan bir şey yazdım ve eklediğim bazı saldırgan arkadaşlar sayesinde Başkalarının kullanması için. Şimdi bir evcil hayvan projesi ve aktif olarak bunu sürdürüyorum, bu yüzden özellik istekleri ve geri bildirimler bekliyoruz.

http://code.google.com/p/ipcheck/source/browse/ipcheck.sh

İlgili konular