गतिशील आईपी परिवर्तन की जांच करने का सबसे सरल तरीका


12

यदि मेरा आईपी पता बदल गया है, तो स्क्रिप्ट के साथ सबसे आसान तरीका क्या होगा?


पृष्ठभूमि की जानकारी:

मेरे पास एक मानक होम केबल मॉडेम कॉन्सेक्सन है, और मेरा आईएसपी मुझे एक गतिशील आईपी प्रदान करता है। यह अब हर बार बदलता है, डीएचसीपी लीज समय अनियमित लगता है।

असल में, मैं अपनी डायनेमिक DNS चीज़ कर रहा हूं, और एक क्लिक के साथ अपने होम सर्वर की ओर इशारा करते हुए डीएनएस रिकॉर्ड अपडेट कर सकता हूं। केवल एक चीज शेष है एक आईपी परिवर्तन का पता लगाने के लिए ताकि मैं पूरी तरह से प्रक्रिया को स्वचालित कर सकूं।

अब यहाँ कई वेबसाइटें हैं जो आपके आईपी पते को वापस कर सकती हैं, और मैं wgetइनमें से किसी एक पृष्ठ पर क्रोन जॉब और grepउसमें से आईपी पते का उपयोग कर सकता हूं ... लेकिन यह सीपीयू / बैंडविड्थ उपयोग के संदर्भ में ओवरकिल लगता है, और यह बहुत अधिक नहीं है चुम्मा।

क्या मैं अपने सार्वजनिक आईपी को पुनः प्राप्त करने के लिए कुछ सरल और सुरुचिपूर्ण तरीका याद कर रहा हूं और जांचता हूं कि क्या यह बदल गया है?

अतिरिक्त जानकारी: मेरा मॉडेम / राउटर एक सस्ती ईंट है, यह उस संबंध में बहुत दिलचस्प नहीं है। मेरा सर्वर Centos 6 के साथ चलता है।

जवाबों:


6

मान लें कि आप NAT के पीछे हैं, सबसे सुंदर तरीका है जिसके बारे में मैं सोच सकता हूं कि राउटर पर एक क्रॉन जॉब को चलाने के लिए, समय-समय पर ifconfigअपने वर्तमान WAN पते की भी जाँच करें। यदि आप कस्टम फ़र्मवेयर स्थापित करने में सक्षम हैं, तो यह 'सस्ते ईंट' पर भी संभव हो सकता है। हालांकि सुरुचिपूर्ण, शायद ही सरल।

जैसा कि यहां चर्चा की गई है , विंडोज पर, लेकिन तर्क सेंटोस के लिए समान रूप से मान्य है, NAT के पीछे से वान आईपी को प्रदूषित करने में, आप इस समस्या में भाग लेते हैं कि आपके पास तकनीकी रूप से बाहरी पता नहीं है। इसके बजाय, आपको राउटर के विवेक पर एक के माध्यम से रूट किया जाता है। जाहिर है, आपके पास अभी भी इस जानकारी तक पहुंच होगी जब तक कि राउटर आपके नियंत्रण में है, लेकिन स्थानीय नेटवर्क पर मेजबान को इस आईपी पते को संचार करने का कोई सार्वभौमिक तरीका नहीं है। नतीजतन, आपका सर्वर केवल बाहरी आईपी के लिए राउटर से पूछ नहीं सकता है जो इसका उपयोग करेगा।

सबसे कुशल विकल्प सिर्फ राउटर को अपना जादू करने देना होगा और वास्तव में एक बाहरी सर्वर से संबंध बनाना होगा, फिर इसे उस पते को वापस करने के लिए कहें, जो अनुरोध से उत्पन्न हुआ है। इस उद्देश्य के लिए विशेष रूप से बहुत सारे वेबसर्वर स्थापित किए गए हैं। स्क्रिप्टिंग के लिए, मैं http://icanhazip.com/ की सिफारिश कर सकता हूं , क्योंकि इसके लिए आपकी ओर से और पार्सिंग की आवश्यकता नहीं है (केवल सादे पाठ में आईपी लौटा दिया गया है)।

यदि आवश्यक हो, तो कार्यान्वयन से पहले युक्तियों के लिए बहुत सारे सुझाव दिए जाने चाहिए।


अच्छे विचार और लिंक। +1, यदि केवल icanhazip वेबसाइट के लिए जिसे मैं नहीं जानता था, और अतिरिक्त HTML को डाउनलोड करने और अनावश्यक पार्स करने के लिए बनाता है।
सिल्वर क्वाटियर

1
या checkip.net-me.net/plain
एलेक्स

2
इसके अलावा ifconfig.me/ip और wtfismyip.com/text
दिमित्री

6

आप इस कार्य के लिए अपने आईपी को प्रदर्शित करने वाली किसी भी वेबसाइट को क्वेरी कर सकते हैं। Checkip.dyndns.com का उपयोग करते हुए , क्योंकि यह text.only है।

उदाहरण:

wget -q -O - checkip.dyndns.com | grep -Po "[\d\.]+"

0

आज भी मेरे पास यही सवाल था, और मैं यहाँ या Google पर देखे गए उत्तरों से संतुष्ट नहीं था, इसलिए जब भी मेरा IP पता बदलता है , तो मुझे एक Slack सूचना भेजने के लिए एक PowerShell स्क्रिप्ट लिखता हूँ ।

यदि आप एक ईमेल प्राप्त करना चाहते हैं, तो आप Outlook ईमेल का समर्थन करने वाले भिन्न संस्करण को देखने के लिए स्क्रिप्ट के लिंक पर क्लिक कर सकते हैं।

मुझे उम्मीद है कि यह किसी की मदद करता है और एक वोट कमाता है। :-)

निम्न पाठ को एक .ps1 फ़ाइल में सहेजें। इसे अपने स्वयं के स्लैक वेबहूक URL के साथ उपयुक्त रूप से संपादित करें। सहेजें। "PowerShell के साथ चलाएँ" फ़ाइल को राइट-क्लिक करें।

या आप इसे दैनिक या फिर अक्सर चलाने के लिए शेड्यूल कर सकते हैं।

#Script to compare current IP with old IP and sends Slack notification if different (and do nothing if there was no change).
#We can put this as a scheduled task to run daily.
#ScriptName: IP_change_detection_notification.ps1

$slackWebhookUrl = "XXXXXXXXXX" #put yours here
$ipDetectionUrl = "https://wtfismyip.com/text"
$IPAddFile = "C:\code\IP_change_detection_notification.dat" #absolute path to file that stores the old IP record
$slackOutputFile = "C:\code\IP_change_detection_notification_Slack.txt"
$optionalDebuggingFile = "C:\code\IP_change_detection_notification_debugging.txt"

$Request = Invoke-WebRequest $ipDetectionUrl
$IP_new = ($Request.Content.Trim())
Write-Host "Current IP address: [$IP_new]"

#Check if old IP record exists
If(Test-Path "$IPAddFile")
{
#Get old IP
$IP_old = Get-Content "$IPAddFile"
    #Compare IPs
    if(-not($IP_new -eq $IP_old))
    {
        Write-Host "Old IP address: [$IP_old]"
        $msg = "Your WAN IP has changed to $IP_new (was $IP_old)!"
        Write-Host "$msg"               
        $body = $("{""text"":""$msg""}")
        Write-Host "$body"
        Invoke-RestMethod -Uri $slackWebhookUrl -Method Post -ContentType 'application/json' -Body $body -OutFile $slackOutputFile

        "Notification Sent"     

        #Overwrite and update new IP
        $IP_new |  Out-File $IPAddFile

    }
    else
    {"No change, no notification"}

}
else
{
#Create new, as file not found
$IP_new |  Out-File $IPAddFile
"File created"
}
$(get-date -f yyyy-MM-dd_HH_mm_ss)  |  Out-File $optionalDebuggingFile
#Read-Host -Prompt "Press Enter to exit" #Comment out this line if this script will be run by a cron job. Otherwise, uncomment it so that you can see the results of the script in the console.

#This script was adapted from https://gallery.technet.microsoft.com/scriptcenter/Detect-IP-address-change-aeb51118 by Satyajit

कार्य शेड्यूलर प्राप्त करने के लिए:

मुझे पॉवरशेल को एक प्रशासक के रूप में चलाना था और फिर चलाना था Get-ExecutionPolicy, जिसने तब मुझे बताया था कि मेरा वर्तमान एक्सक्लूसिव पॉलीसी "रिस्ट्रिक्शन" था।

फिर मैं भागा Set-ExecutionPolicy RemoteSigned(जैसा कि यहां दिखाया गया है, लेकिन यह मुझे परेशान करता है: https://stackoverflow.com/a/26955050/470749 )।

फिर एक बेसिक विंडोज कमांड प्रॉम्प्ट से, मैंने निम्न कमांड को एक दो बार चलाने की कोशिश की: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -File "C:\code\IP_change_detection_notification.ps1"(एक बार आईपी स्टोर करने के लिए, और दूसरी बार यह जांचने के लिए कि क्या यह बदल गया था)।

(जब तक आपको वह काम न मिले, टास्क शेड्यूलर का उपयोग करने की कोशिश न करें।)

फिर मैंने कार्यक्रम के C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exeरूप में और -ExecutionPolicy ByPass -File C:\code\IP_change_detection_notification.ps1तर्क के रूप में एक कार्य निर्धारित किया ।


इसका एक शानदार समाधान है, लेकिन दुर्भाग्य से ओपी ने उल्लेख किया कि वह CentOS का उपयोग कर रहे हैं, इसलिए यह तकनीकी रूप से इस सवाल का जवाब नहीं देता है।
MaQleod

0

पीएस कार्यान्वयन को छोड़कर पिछले जवाब, वास्तव में आपको नहीं बताते हैं कि क्या आईपी बदल गया है। (मैं PowerShell से प्यार करना चाहता हूं। रयान ने पहचानने का एक अच्छा काम किया है कि मैं क्यों नहीं: निष्पादन सुरक्षा अनुमतियाँ उपद्रव हैं)।

आईपी ​​को पार्स करना तब तक आवश्यक नहीं है जब तक कि कोई अतिरिक्त आउटपुट नहीं बदलता है जब तक कि आईपी बदल नहीं गया है। उदाहरण के लिए checkip.dyndns.com वर्तमान आईपी पते की तरह कुछ देता है: ddd.ddd.ddd.ddd। इस प्रकार यह केवल पूरे आउटपुट की तुलना करने के लिए पर्याप्त है।

इसके अलावा यदि आप कर्ल का उपयोग कर रहे हैं, तो आप -s ध्वज का उपयोग करके प्रगति को छिपाना चाह सकते हैं। चूँकि यह stderr को लिखा जाता है, यह stdout को प्रदूषित नहीं करता है।

तो, यहाँ एक सरल .cmd स्क्रिप्ट है, जो आउटपुट को बचाने के लिए कर्ल का उपयोग करता है। यह एफसी का उपयोग पिछले आउटपुट से तुलना करने के लिए करता है, यदि कोई हो। मुझे यूनिकोड, केस सेंसिटिविटी आदि के लिए FC विकल्प सेट करने की आवश्यकता नहीं है, क्योंकि आउटपुट बाइनरी मैच होना चाहिए, जब आईपी नहीं बदला है। यूनिक्स में एफसी के बजाय सीएमपी है।

@REM 12/30/2017 The following work:
@REM                checkip.dyndns.com
@REM                wtfismyip.com/text
@REM                icanhazip.com
@REM                ifconfig.me/ip -- can be slow

curl icanhazip.com > CurrentIp.txt
fc /B LastIp.txt CurrentIp.txt 1> nul: 2>>&1

if ERRORLEVEL 1 (
    ECHO Ip Changed
    REM Remember for next time
    MOVE /Y CurrentIp.txt LastIp.txt 1>nul:
    exit /b 1
) else (
    ECHO Ip not Changed
)

जाहिर है CurrentIp.txt LastIp.txt को सूट में बदला जा सकता है, उदाहरण के लिए "% TMP% \" के साथ उपसर्ग। यह स्क्रिप्ट कार्य शेड्यूलर से मामूली बदलाव के साथ काम करना चाहिए।


0

ओपी के जवाब में: "क्या मैं अपने सार्वजनिक आईपी को पुनः प्राप्त करने के लिए कुछ सरल और सुरुचिपूर्ण तरीके से गायब हूं और जांचें कि क्या यह बदल गया है?"

वास्तव में सरल उत्तर नहीं है। बस समय-समय पर अपने आईपी को अपडेट करें।

यह बेकार लगता है, लेकिन "होशियार" समाधान सीपीयू, बैंडविड्थ आदि को बचाने के बिना बस अधिक जटिल और कम विश्वसनीय हैं, एक घंटे में एक बार 1500 बाइट्स या कम (एक पैकेट) भेजना बहुत सस्ता है। एक पूरे वर्ष में नेटफ्लिक्स पर 365 * 24 * 1,500 = 13 मेग बाइट्स या राइफलमैन के लगभग 3 मिनट का उपभोग होगा।

सीपीयू / बैंडविड्थ की लागत आपके बाहरी आईपी को प्राप्त करने और कभी-कभी आपके नए आईपी को पोस्ट करने की होती है, यह समय-समय पर आपके आईपी को अनावश्यक रूप से पोस्ट करने की तुलना में सबसे अधिक होता है। मैं समस्या के बिना, वर्षों से हर घंटे duckdns को अपना आईपी पोस्ट कर रहा हूं। जाहिर है अगर आप यह 1 / सेकंड करना शुरू करते हैं तो आपकी डोमेन सेवा इसे समझ सकती है और नाराज हो सकती है। इसी तरह आपके द्वारा अपने आईपी को देखने के लिए उपयोग की जाने वाली कोई भी सेवा यदि आप ऐसा करते हैं तो खुश नहीं होंगे।

एक अंतिम विचार, आपके द्वारा पूछा गया प्रश्न उस समस्या का एक हिस्सा है जिसका आप उल्लेख करते हैं। जब आपका डोमेन नाम आपके सर्वर पर हल नहीं होता है तो आपके डायनामिक डीएनएस को ताज़ा करने का ट्रिगर हो सकता है। आप पिंग का उपयोग कर सकते हैं, लेकिन यदि आपके पुराने आईपी पते का पुन: उपयोग किया जाता है, तो नया आईपी लीज़ धारक अच्छी तरह से पिंग का जवाब दे सकता है।

इसे ध्यान में रखते हुए आप समय-समय पर अपने सर्वर से एक छोटी हस्ताक्षर / मैजिक फाइल डाउनलोड करने का प्रयास कर सकते हैं। वास्तव में यह कोई भी स्थिर फ़ाइल हो सकती है जो आपको बताती है कि आपको अपना सर्वर मिल गया, यहां तक ​​कि आपका होम वेब पेज भी काम करेगा, लेकिन एक असामान्य नाम default.html से बहुत बेहतर होगा।

यदि d / l विफल रहता है, तो अपने IP को अपडेट करें, अपने DNS कैश को साफ़ करें और पुनः प्रयास करें। आपकी DNS सेवा के आधार पर, अपडेट को प्रभावी होने में कुछ मिनट लग सकते हैं। यह दृष्टिकोण कुछ अन्य बाहरी आईपी साइट पर निर्भरता को हटाता है, और वास्तव में परीक्षण करता है कि आप वास्तव में क्या जानना चाहते हैं: क्या अन्य मेरी साइट तक पहुंच सकते हैं?


0

एक वैकल्पिक विकल्प के रूप में जो आपकी मदद कर सकता है, मैंने बाहरी आईपी पते परिवर्तनों के लिए मॉनिटर करने के लिए डिज़ाइन किया गया एक पायथन स्क्रिप्ट लिखी है। मैं इसे लिनक्स के तहत उपयोग करता हूं, लेकिन चूंकि यह अजगर है तो इसे उचित पायथन वातावरण की स्थापना के बाद विंडोज पर ठीक काम करना चाहिए। यह वर्तमान में एक फ़ाइल के लिए "वर्तमान" बाहरी आईपी पते को बचाता है और, जब चलाया जाता है, तो एक नया आईपी पता पकड़ता है और फिर इसे पुराने के खिलाफ जांचता है। यदि कोई परिवर्तन पाया जाता है, तो यह आपको ईमेल करने के लिए डिज़ाइन है।

इसे एक क्रोनजोब (लिनक्स) या अनुसूचित कार्य (विंडोज) के रूप में चलाने के लिए डिज़ाइन किया गया है और यह अपने आप में एक पृष्ठभूमि डेमॉन के रूप में नहीं चलता है।

यहाँ github रिपॉजिटरी का लिंक दिया गया है: https://github.com/begleysm/ipwatch

उम्मीद है कि यह मदद करता है!


-2

मैं उपयोग करता हूं curl ifconfig.me, लेकिन यह ऐसा कुछ नहीं है जिसे मैंने डेबियन के अलावा अन्य प्लेटफार्मों पर आजमाया है।


मैंने (अन्य लोगों ने) इसे कमांड लाइन से धीमा पाया। देखें "कर्ल ifconfig.me" कमांड लाइन # 4 github.com/learn-co-curriculum/fe-how-the-web-works/issues/4
एंड्रयू डेनीसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.