Jadi, saya mungkin kehilangan sesuatu yang sederhana di sini, tetapi sepertinya saya tidak dapat menemukan cara untuk mendapatkan nama host tempat objek permintaan yang saya kirimi tanggapan.
Apakah mungkin untuk mencari tahu hostname apa yang saat ini dikunjungi dari node.js?
request.headers.host
- terima kasih!Jawaban:
Jika Anda berbicara tentang permintaan HTTP, Anda dapat menemukan host permintaan di:
Tapi itu bergantung pada permintaan masuk.
Lebih lanjut di http://nodejs.org/docs/v0.4.12/api/http.html#http.ServerRequest
Jika Anda mencari informasi mesin / asli, coba objek proses.
sumber
request.headers.host
kembalihttp://127.0.0.1
tetapi bukan nama domain server produksireq.headers.host
disediakan oleh pengguna. Saya dapat membuat permintaan dalam 1 baris python dan mengirimi Anda permintaan tanpa bidang itu membuat kode Anda macetAnda dapat menggunakan Modul os:
Lihat http://nodejs.org/docs/latest/api/os.html#os_os_hostname
Peringatan:
jika Anda dapat bekerja dengan alamat IP - Mesin mungkin memiliki beberapa Kartu Jaringan dan kecuali Anda menentukannya, node akan mendengarkan semuanya, jadi Anda tidak tahu NIC mana yang meminta, sebelum masuk.
Hostname adalah masalah DNS - Jangan lupa bahwa beberapa alias DNS dapat mengarah ke mesin yang sama.
sumber
hostname
perintah yang seharusnya merupakan nama DNS yang valid tetapi tidak harus. Misalnya, di bawah OS X Anda akan mendapatkan nama-nama sepertimy-machine.local
yang tidak dapat diselesaikan dengan DNS. Untuk mengetahui IP eksternal mesin Anda harus menekan layanan yang melakukan fungsi ini atau menggunakan protokol STUN untuk mengetahuinya.Inilah alternatifnya
Baca tentang hal itu di Express Documents .
sumber
Jika Anda memerlukan nama domain yang sepenuhnya memenuhi syarat dan tidak memiliki permintaan HTTP, di Linux, Anda dapat menggunakan:
sumber
hostname
perintah di Windows (tetapi Anda menjalankannya tanpa parameter)Pertama-tama, sebelum memberikan jawaban saya ingin dimuka tentang fakta bahwa dengan mempercayai header Anda membuka pintu untuk kerentanan keamanan seperti phishing. Jadi untuk tujuan pengalihan, jangan gunakan nilai dari header tanpa terlebih dahulu memvalidasi URL.
Kemudian, nama host sistem operasi Anda mungkin tidak cocok dengan yang DNS. Bahkan, satu IP mungkin memiliki lebih dari satu nama DNS. Jadi untuk tujuan HTTP tidak ada jaminan bahwa nama host yang ditetapkan untuk mesin Anda dalam konfigurasi sistem operasi Anda dapat digunakan.
Pilihan terbaik yang bisa saya pikirkan adalah untuk mendapatkan IP publik pendengar HTTP Anda dan menyelesaikan namanya melalui DNS. Lihat
dns.reverse
metode untuk info lebih lanjut. Namun, sekali lagi, perhatikan bahwa IP mungkin memiliki beberapa nama yang dikaitkan dengannya.sumber