2010-04-29 14 views
8

में आईपी पते में बदलाव का पता लगाना क्या किसी को लिनक्स में आईपी पते में बदलाव का पता लगाने का कोई तरीका पता है। मान लें कि मेरे पास dhcpcd चल रहा है, और यह एक नया आईपी पता निर्दिष्ट करता है, क्या कोई तरीका है जब मैं इसे बदलता हूं तो अधिसूचना प्राप्त कर सकता हूं? मैं डी-बस का उपयोग नहीं कर सकता, क्योंकि यह एक एम्बेडेड ucLinux निर्माण है जिसमें यह नहीं है।लिनक्स

कुछ/proc/net/में किसी चीज़ पर inotify?

+0

आप कितनी जल्दी जानना चाहेंगे? क्या यह काफी लंबा है कि कुछ प्रकार के मतदान स्वीकार्य हैं? (अगर उचित सूचना उपलब्ध नहीं है तो मैं मतदान की सिफारिश करूंगा) –

+0

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

उत्तर

1

चूंकि डीएचसीपी गतिविधि syslogd को भेजी जाती है, इसलिए आप नामित पाइप, प्रत्यक्ष सिसॉग ट्रैफिक बना सकते हैं और आईपी एड्रेस अपडेट के लिए स्ट्रीम देख सकते हैं। 'मैन syslogd' और 'man syslog.conf' देखें।

संपादित करें: इंटरफ़ेस के लिए DHCP पट्टे फ़ाइल की निगरानी करने के लिए एक और दृष्टिकोण inotify का उपयोग करना होगा। उबंटू 9 .10 के तहत जो/var/lib/dhcp3 निर्देशिका में है।

+0

समाधान मुझे लगता है कि मैं 'मॉनीटर/प्रो/नेट/रूट को निष्क्रिय करने के लिए साथ जाएगा, और फिर रूटिंग तालिका में हर बार पता पूछने के लिए SIOCGIFADDR ioctl का उपयोग करें। –

+1

आप शायद इनोटिफ़ाई का उपयोग करके फ़ाइलों की निगरानी/proc नहीं कर सकते हैं।/proc 'वास्तव में' एक फ़ाइल सिस्टम नहीं बल्कि एक कर्नेल इंटरफ़ेस है। – Snowhare

0

मुझे लगता है कि आप आधुनिक लिनक्स वितरण पर ऐसा करने के लिए डीबीस का उपयोग कर सकते हैं। अपनी वितरण NetworkManager का उपयोग करता है, तो उसके dbus इंटरफेस के बारे में जानकारी के लिए इस दस्तावेज़ देखें:

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

+0

डी-बस अच्छा होगा, लेकिन यह ucLinux एम्बेडेड है। क्षमा करें मुझे यह स्पष्ट करना चाहिए था। –

12

आदेश

ip monitor 

आप हो रहा बात इस तरह का दिखाई देगा। यह कुछ नेटलिंक एपीआई का उपयोग करता है जो कि मुश्किल है और अच्छी तरह से प्रलेखित नहीं है (कम से कम मनुष्यों को समझने के लिए)। हालांकि, यह विभिन्न घटनाओं के कर्नेल द्वारा अधिसूचित किया जा सकता है, जैसे असाइन किए गए आईपी, रूटिंग टेबल और लिंक स्थिति (जैसे किसी ने नेटवर्क को अनप्लग किया)

+1

यह अच्छा लग रहा है - बहुत अच्छा; धन्यवाद ... लेकिन ucLinux में आईपी के BusyBox संस्करण पर उपलब्ध नहीं है! –

+0

तो धन्यवाद, बहुत उपयोगी – pylover

1

मैंने सोचा कि इस स्क्रिप्ट को क्रॉन से हर 10 या इतने मिनट, आपके लिंक के आधार पर। यदि मैंने यह अधिकार लिखा है, तो आईपी परिवर्तन होने पर यह केवल 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 

परीक्षण नहीं किया गया!

0

यदि आपके पास राउटर चलने वाला राउटर है और राउटर पर जाने पर स्थिति पृष्ठ का उपयोग है, तो आप एक स्क्रिप्ट के साथ ... स्थिति पृष्ठ wget कर सकते हैं, आईपी पते के लिए बिल्ली और इसे लिख सकते हैं तुलना के लिए फ़ाइल, एक ईमेल भेजें जब नवीनतम wget आईपी पता तुलना फ़ाइल में क्या बदल गया है से बदल गया है।

मैं एक लिंकिस wrt54g राउटर पर डीडी-wrt चला रहा हूं और इस स्क्रिप्ट का उपयोग करता हूं: यह राउटर स्थिति पृष्ठ को 1 9 2.168.3.1 से wgets करता है, पेज (index.html) पर बिल्ली का उपयोग करता है और वैन आईपी पते के लिए greps , फिर इसे एक फ़ाइल (gotip.txt) में लिखता है।

कैप्चर आईपी (gotip.txt) और वर्तमान वर्किंग आईपी (workip.txt) के बीच तुलना की जाती है। यदि आईपी पते अलग हैं, तो मुझे नए आईपी के मेल भेजकर एक ईमेल भेजा जाता है, और नया काम करने वाला आईपी कार्यपटल.txt फ़ाइल में लिखा जाता है।

क्रॉन इस हर 5 मिनट या तो चलाने के लिए और मैं क्रॉन उत्पादन/dev को खामोश कर दिया है/बातिल

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

यह एक पुरानी सवाल है, लेकिन मैं जो लोग गूगल द्वारा आ जाएगा के लिए जवाब देंगे (जैसे खुद के रूप में)। थोड़ी देर के लिए संघर्ष करने के बाद, मुझे पता चला कि आपको इसके लिए सी समाधान बनाने या जरूरी नहीं है। मेरे मामले के लिए, जब मैं आईपी बदलता हूं तो मैं अपने होम सर्वर (गतिशील डीएनएस) डोमेन को अपडेट करना चाहता था।

यदि आप dhcpcd चला रहे हैं, तो आप भाग्यशाली हैं।dhcpcd कुछ भी होने पर हुक स्क्रिप्ट चलाएगा। man dhcpcd-run-hooks(online here) देखें। मूल रूप से आप ईवेंट द्वारा प्रदान किए गए डेटा के साथ क्या करना चाहते हैं इसके आधार पर आप अपना खुद का dhcpcd.enter-hook या dhcpcd.exit-hook संशोधित करना या बनाना चाहते हैं।

1

यह एक पुराना धागा है, लेकिन अगर किसी को ऐसा लगता है कि मैंने ऐसा किया है, तो मैंने कुछ लिखा है जो कुछ समय पहले लिनक्स में नेटवर्क परिवर्तन का पता लगाने/अधिसूचना करता है (ज्यादातर वीपीएन उपयोगकर्ताओं की मदद करने के लिए लक्षित), और कुछ धक्का देने वाले दोस्तों के लिए धन्यवाद दूसरों के उपयोग के लिए यह। यह अब एक पालतू परियोजना है और मैं सक्रिय रूप से इसे बनाए रख रहा हूं, इसलिए सुविधा अनुरोध और प्रतिक्रिया का स्वागत है।

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