dnspython akan melakukan pencarian DNS saya dengan sangat baik, tetapi sepenuhnya mengabaikan konten /etc/hosts
.
Apakah ada panggilan pustaka python yang akan melakukan hal yang benar? yaitu, periksa dulu etc/hosts
, dan hanya kembali ke pencarian DNS jika tidak?
socket.gethostbyname
, untuk kueri yang lebih kompleks, gunakan dnspython.Jawaban:
Saya tidak begitu yakin apakah Anda ingin melakukan pencarian DNS sendiri atau jika Anda hanya ingin ip host. Jika Anda menginginkan yang terakhir,
sumber
nscd
dannslcd
pada kotak Unix dapat melakukan ini. Itu juga bisa di-cache oleh server nama lokal yang dikonfigurasi untuk cache (pengaturan umum, sekali waktu. Mungkin tidak begitu banyak sekarang). Sayangnya, ini bukan jawaban 'tidak' yang langsung. Hal-hal ini jarang terjadi. :)Resolusi nama normal dengan Python berfungsi dengan baik. Mengapa Anda membutuhkan DNSpython untuk itu. Hanya menggunakan socket 's
getaddrinfo
yang mengikuti aturan dikonfigurasi untuk sistem operasi Anda (pada Debian, maka/etc/nsswitch.conf
:sumber
addrs = [ str(i[4][0]) for i in socket.getaddrinfo(name, 80) ]
memberi saya daftar ips.memberi Anda daftar alamat untuk www.example.com. (ipv4 dan ipv6)
sumber
Kode ini berfungsi dengan baik untuk mengembalikan semua alamat IP yang mungkin dimiliki oleh URI tertentu. Karena banyak sistem sekarang berada dalam lingkungan yang dihosting (AWS / Akamai / dll.), Sistem dapat mengembalikan beberapa alamat IP. Lambda tersebut "dipinjam" dari @Peter Silva.
sumber
Jawaban di atas dimaksudkan untuk Python 2. Jika Anda menggunakan Python 3, berikut kodenya.
sumber
Saya menemukan cara ini untuk memperluas nama host DNS RR yang berkembang menjadi daftar IP, ke dalam daftar nama host anggota:
Yang mana, ketika saya menjalankannya, mencantumkan beberapa nama host 1e100.net:
sumber