Apa cara termudah untuk menemukan, dengan skrip, jika alamat IP saya telah berubah?
Info latar belakang:
Saya memiliki koneksi modem kabel rumah standar, dan ISP saya memberikan saya IP dinamis. Itu berubah setiap sekarang dan kemudian, waktu sewa DHCP tampaknya tidak teratur.
Pada dasarnya, saya melakukan hal DNS dinamis saya sendiri, dan dapat memperbarui catatan DNS yang menunjuk ke server rumah saya dengan satu klik. Satu-satunya yang tersisa adalah mendeteksi perubahan IP sehingga saya dapat sepenuhnya mengotomatiskan proses.
Sekarang ada beberapa situs web di sini yang dapat mengembalikan alamat IP Anda, dan saya bisa menggunakan pekerjaan cron ke wget
salah satu halaman ini dan grep
alamat IP darinya ... Tapi sepertinya berlebihan dalam hal penggunaan CPU / bandwidth, dan itu tidak terlalu CIUMAN.
Apakah saya kehilangan beberapa cara sederhana dan elegan untuk mengambil IP publik saya dan memeriksa apakah IPnya telah berubah?
Info tambahan: modem / router saya adalah batu bata murah, tidak ada yang sangat menarik dalam hal itu. Server saya berjalan dengan Centos 6.
sumber
Anda dapat meminta situs web apa pun yang menampilkan IP Anda untuk tugas ini. Menggunakan checkip.dyndns.com , karena itu text.only.
Contoh:
sumber
Saya memiliki pertanyaan yang sama hari ini, dan saya tidak puas dengan jawaban yang saya lihat di sini atau di Google, jadi saya menulis skrip PowerShell untuk mengirimi saya pemberitahuan Slack setiap kali alamat IP saya berubah .
Jika Anda lebih suka menerima email, Anda bisa mengklik tautan di skrip untuk melihat versi lain yang mendukung email Outlook.
Saya harap ini membantu seseorang dan mendapatkan suara. :-)
Simpan teks berikut ke file .ps1. Edit sesuai dengan URL webhook Slack Anda sendiri. Menyimpan. Klik kanan file untuk "Jalankan dengan PowerShell".
Atau Anda dapat menjadwalkannya untuk berjalan setiap hari atau seberapa sering.
Untuk mengaktifkan Penjadwal Tugas:
Saya harus menjalankan PowerShell sebagai administrator dan kemudian menjalankan
Get-ExecutionPolicy
, yang kemudian memberi tahu saya bahwa ExecutionPolicy saya saat ini adalah "Dibatasi".Kemudian saya berlari
Set-ExecutionPolicy RemoteSigned
(seperti yang ditunjukkan di sini, tetapi itu membuat saya gugup: https://stackoverflow.com/a/26955050/470749 ).Kemudian dari prompt perintah dasar Windows, saya mencoba menjalankan perintah berikut beberapa kali:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -File "C:\code\IP_change_detection_notification.ps1"
(satu kali untuk menyimpan IP, dan yang kedua kali untuk memeriksa apakah sudah berubah).(Sampai Anda berhasil, jangan repot-repot mencoba menggunakan Penjadwal Tugas.)
Kemudian saya menjadwalkan tugas dengan
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
sebagai program dan-ExecutionPolicy ByPass -File C:\code\IP_change_detection_notification.ps1
sebagai Argumen.sumber
Jawaban sebelumnya tidak termasuk implementasi PS, tidak benar-benar memberi tahu Anda jika IP telah berubah. (Saya ingin mencintai PowerShell. Ryan telah melakukan pekerjaan yang baik untuk mengidentifikasi mengapa saya tidak melakukannya: izin keamanan eksekusi adalah gangguan).
Parsing IP tidak perlu selama output tambahan tidak berubah ketika IP tidak berubah. Misalnya checkip.dyndns.com mengembalikan sesuatu seperti Alamat IP Saat Ini: ddd.ddd.ddd.ddd. Dengan demikian cukup untuk hanya membandingkan seluruh output.
Juga jika Anda menggunakan curl, Anda mungkin ingin menyembunyikan progres menggunakan flag -s. Karena ini ditulis untuk stderr, itu tidak mencemari stdout.
Jadi, berikut ini adalah skrip .cmd sederhana, yang menggunakan curl untuk menyimpan hasilnya. Kemudian menggunakan FC untuk membandingkannya dengan output sebelumnya, jika ada. Saya tidak perlu mengatur opsi FC untuk Unicode, sensitivitas huruf, dll., Karena outputnya harus sesuai dengan biner, ketika IP tidak berubah. Unix memiliki cmp, bukan FC.
Jelas CurrentIp.txt LastIp.txt dapat diubah sesuai, misalnya awalan dengan "% TMP% \" Script ini harus bekerja dari Penjadwal Tugas, dengan perubahan kecil.
sumber
Menanggapi OP: "Apakah saya kehilangan beberapa cara sederhana dan elegan untuk mengambil IP publik saya dan memeriksa apakah telah berubah?"
Jawaban yang sangat sederhana adalah jangan. Perbarui IP Anda secara berkala.
Tampaknya boros, tetapi solusi "lebih pintar" hanya lebih kompleks dan kurang dapat diandalkan, tanpa menghemat CPU, bandwidth dll. Mengirim 1500 byte atau kurang (satu paket) satu jam sekali sangat murah. Satu tahun penuh akan mengkonsumsi 365 * 24 * 1.500 = 13 Meg Bytes atau sekitar 3 menit dari Rifleman di Netflix.
Biaya CPU / bandwidth untuk mendapatkan ip eksternal Anda dan kadang-kadang memposting ip baru Anda, kemungkinan besar lebih tinggi daripada hanya memposting secara berlebihan ip Anda secara berkala. Saya telah memposting ip saya ke duckdns setiap jam selama bertahun-tahun, tanpa masalah. Tentunya jika Anda mulai melakukan ini 1 / detik layanan domain Anda mungkin mengetahuinya dan merasa kesal. Demikian juga layanan yang Anda gunakan untuk mencari ip Anda tidak akan senang jika Anda melakukan ini.
Satu pemikiran terakhir, pertanyaan yang Anda ajukan adalah bagian dari masalah yang Anda sebutkan. Pemicu untuk menyegarkan dns dinamis Anda bisa terjadi ketika nama domain Anda tidak menyelesaikan ke server Anda. Anda bisa menggunakan ping, tetapi jika alamat ip lama Anda digunakan kembali, pemegang sewa ip yang baru mungkin merespons ping.
Dengan mengingat hal ini Anda dapat secara berkala mencoba mengunduh file tanda tangan / ajaib kecil dari server Anda. Sungguh ini bisa berupa file statis yang memberitahu Anda bahwa Anda menemukan server Anda, bahkan halaman web rumah Anda akan berfungsi, tetapi nama yang tidak biasa akan jauh lebih baik daripada default.html.
Jika d / l gagal, maka perbarui IP Anda, kosongkan cache DNS Anda dan coba lagi. Mungkin diperlukan beberapa menit agar pembaruan menjadi efektif, tergantung pada layanan DNS Anda. Pendekatan ini menghilangkan ketergantungan pada beberapa situs ip eksternal lainnya, dan sebenarnya menguji apa yang benar-benar ingin Anda ketahui: Dapatkah orang lain mencapai situs saya?
sumber
Sebagai opsi alternatif yang mungkin membantu Anda, saya telah menulis skrip python yang dirancang untuk memantau perubahan alamat IP eksternal. Saya menggunakannya di Linux tetapi karena itu python itu harus berfungsi pada Windows setelah mengatur lingkungan Python yang sesuai. Saat ini menyimpan alamat IP eksternal "saat ini" ke sebuah file dan, ketika dijalankan, mengambil alamat IP baru dan kemudian memeriksanya dengan yang lama. Ini dirancang untuk mengirimi Anda email jika ada perubahan yang terdeteksi.
Ini dirancang untuk dijalankan sebagai cronjob (Linux) atau tugas terjadwal (Windows) dan tidak berjalan sebagai daemon latar belakang sendiri.
Berikut tautan ke repositori github: https://github.com/begleysm/ipwatch
Semoga bermanfaat!
sumber
Saya menggunakan
curl ifconfig.me
, tetapi itu bukan sesuatu yang saya coba pada platform selain Debian.sumber