Ada beberapa baris perintah utilitas untuk nama tekad host ( host
, dig
, nslookup
), namun mereka semua nameserver digunakan secara eksklusif, sedangkan aplikasi dalam tampilan umum di /etc/hosts
pertama (menggunakan gethostbyname saya percaya).
Apakah ada utilitas baris perintah untuk menyelesaikan nama host yang berperilaku seperti aplikasi biasa, sehingga mencari /etc/hosts
terlebih dahulu dan baru kemudian menanyakan server nama?
(Saya sadar bahwa itu mungkin akan seperti 3 baris c, tapi saya membutuhkannya di dalam skrip shell yang agak portabel.)
awk '/hostname/ { print $1 }' /etc/hosts
membantu?Jawaban:
Ini mudah dicapai dengan
getent
:getent
akan melakukan pencarian untuk semua jenis data yang dikonfigurasi dalamnsswitch.conf
.sumber
dig
ataunslookup
.Salah satu alat yang akan berfungsi adalah
getent
. Jadi Anda bisa menggunakangetent hosts www.google.com
, ataugetent hosts localhost
. Ini akan mengambil entri dari database seperti yang ditentukan dalam konfigurasi Switch Layanan Nama Anda/etc/nsswitch.conf
.sumber
files dns
host, yang berarti / etc / hosts dikonsultasikan dan kemudian resolver DNS. Konfigurasi Anda mungkin berbeda.getent
. Terima kasih atas intro untuk perintah ini.Anda dapat menggunakan pembungkus gethostbyname () (usang) seperti:
Atau bungkus getaddrinfo () seperti:
Perhatikan bahwa getaddrinfo akan mengembalikan semua instance sebagai daftar. Bagian terakhir dari perintah hanya memilih tupel pertama. Ini juga dapat mengembalikan alamat IPv6.
sumber
resolveip
akan melakukan ini.Anehnya, itu adalah bagian dari paket mysql-server di RHEL dan Ubuntu.
sumber
Anda dapat menggunakan [bahasa favorit Anda di sini] untuk menulis skrip yang memanggil getnameinfo . Begitulah seharusnya biner (seperti ping) melakukannya, jadi Anda memastikan Anda mendapatkan perlakuan yang sama.
sumber
Gunakan
getent ahosts
, misalnya:Anda akan mendapatkan semua alamat IPv4 dan IPv6, melalui resolib glibc (dengan demikian menggunakan yang
/etc/hosts
pertama, seperti yang biasanya dikonfigurasi dalam/etc/nsswitch.conf
).Jangan gunakan
getent hosts
, karena itu akan memberi Anda alamat IPv6 atau IPv4 (tidak keduanya), dan protokol yang dipilih mungkin bukan salah satu yang tidak berfungsi. Memang, alamat IPv6 umumnya lebih disukai, tetapi di beberapa tempat, data IPv6 difilter (tidak didukung) oleh router.sumber
versi baris perintah "gethostbyname" :
sumber
Anda bisa benar-benar hacky dan menggunakan
arp
:tetapi itu akan sangat jelek sehingga Anda tidak harus melakukan itu.
sumber
getent hosts
rusak. Itu lebih suka alamat IPv6,gai.conf
harus dikonfigurasi untuk lebih memilih IPv4 tetapi ....Perl
gethostbyname
menggunakan prioritas di/etc/nsswitch.conf
Jadi ini berfungsi seperti
getent hosts
seharusnya bekerja untuk saya.Juga:
harus bekerja.
sumber
getent ahosts
.Coba ini:
sumber
Perintah berikut akan melakukan pencarian melalui DNS / etc / hosts melalui pencarian server DNS langsung.
Perintah ini akan mencoba melakukan ping domain (dalam hal ini, google.com) sekali dengan waktu tunggu tunggu 2 detik, dapatkan baris pertama dari perintah PING yang akan menyatakan "PING google.com (216.58.199.36) 56 (84 ) byte data ", lalu gunakan Stream Editor (sed) untuk mendeteksi set kurung pertama dan mengekstrak data di dalamnya yang merupakan alamat IP yang kami cari.
CATATAN: ekspresi regex tidak akan berfungsi jika ada tanda kurung (alias kurung bundar) di URL, tetapi ini akan menjadi kasus yang jarang terjadi.
sumber