Saya memiliki program node.js sederhana yang berjalan di mesin saya dan saya ingin mendapatkan alamat IP lokal PC tempat program saya berjalan. Bagaimana cara mendapatkannya dengan node.js?
javascript
node.js
ip
yojimbo87
sumber
sumber
Jawaban:
sumber
if( details.family=='IPv4' && details.internal === false ) {
jika Anda hanya menginginkan IP eksternal.Object.values(require('os').networkInterfaces()).reduce((r, list) => r.concat(list.reduce((rr, i) => rr.concat(i.family==='IPv4' && !i.internal && i.address || []), [])), [])
os.networkInterfaces pada saat ini tidak berfungsi di windows.Menjalankan program untuk mem-parsing hasil tampaknya agak rapuh. Inilah yang saya gunakan.Ini akan mengembalikan ip jaringan lokal antarmuka pertama Anda.
sumber
https://github.com/indutny/node-ip
sumber
IP apa pun dari mesin Anda dapat Anda temukan dengan menggunakan modul os - dan itu asli dari NodeJS
Yang perlu Anda lakukan hanyalah memanggil os.networkInterfaces () dan Anda akan mendapatkan daftar yang mudah dikelola - lebih mudah daripada menjalankan ifconfig oleh liga
http://nodejs.org/api/os.html#os_os_networkinterfaces
Terbaik
Edoardo
sumber
var address = networkInterfaces['venet0:0'][0].address
Berikut ini adalah potongan kode node.js yang akan mem-parsing output dari
ifconfig
dan (asinkron) mengembalikan alamat IP pertama yang ditemukan:(diuji hanya pada MacOS Snow Leopard; harap ini berfungsi di linux juga)
Contoh penggunaan:
Jika parameter kedua adalah
true
, fungsi akan melakukan panggilan sistem setiap kali; jika tidak, nilai yang di-cache digunakan.Versi terbaru
Mengembalikan array semua alamat jaringan lokal.
Diuji pada Ubuntu 11.04 dan Windows XP 32
Contoh Penggunaan untuk versi yang diperbarui
sumber
filterRE = /\bIP-?[^:\r\n]+:\s*([^\s]+)/g;
. Selain itu, naskah yang bagus, penyelamat sejati. Terimakasih banyak!Inilah metode utilitas saya untuk mendapatkan alamat IP lokal, dengan asumsi Anda mencari alamat IPv4 dan mesin hanya memiliki satu antarmuka jaringan nyata. Itu bisa dengan mudah di refactored untuk mengembalikan array IPs untuk mesin multi-interface.
sumber
getLocalIP = (interfaceName = "en0",version = "IPv4")-> iface = require('os').networkInterfaces()[interfaceName] for alias in iface if (alias.family == version && !alias.internal) return alias.address return "0.0.0.0"
Instal modul yang disebut ip like
kemudian gunakan kode ini.
sumber
Memanggil ifconfig sangat bergantung pada platform, dan lapisan jaringan tidak tahu alamat ip yang digunakan soket, jadi yang terbaik adalah menanyakannya. Node tidak memaparkan metode langsung untuk melakukan ini, tetapi Anda dapat membuka soket apa pun, dan bertanya apa alamat IP lokal yang digunakan. Misalnya, membuka soket ke www.google.com:
Kasus penggunaan:
sumber
IP lokal Anda selalu 127.0.0.1.
Lalu ada IP jaringan, yang bisa Anda dapatkan dari
ifconfig
(* nix) atauipconfig
(win). Ini hanya berguna dalam jaringan lokal.Lalu ada IP eksternal / publik Anda, yang hanya bisa Anda dapatkan jika Anda entah bagaimana bisa meminta router untuk itu, atau Anda dapat mengatur layanan eksternal yang mengembalikan alamat IP klien setiap kali mendapat permintaan. Ada juga layanan lain yang ada, seperti whatismyip.com.
Dalam beberapa kasus (misalnya jika Anda memiliki koneksi WAN) IP jaringan dan IP publik adalah sama, dan keduanya dapat digunakan secara eksternal untuk mencapai komputer Anda.
Jika IP jaringan dan publik Anda berbeda, Anda mungkin harus meminta router jaringan Anda meneruskan semua koneksi yang masuk ke ip jaringan Anda.
Pembaruan 2013:
Ada cara baru untuk melakukan ini sekarang, Anda dapat memeriksa objek soket koneksi Anda untuk properti bernamalocalAddress
, misalnyanet.socket.localAddress
. Ini mengembalikan alamat di ujung soket Anda.Cara termudah adalah dengan hanya membuka port acak dan mendengarkannya, lalu dapatkan alamat Anda dan tutup soketnya.Pembaruan 2015:
Sebelumnya tidak berfungsi lagi.
sumber
ifconfig
atauipconfig
dan menguraikan string respons?ifconfig
cukup banyak satu-satunya cara.net.socket
pengembalianundefined
pada 2015, jadi "cara baru untuk melakukan ini" tidak berfungsi lagi. Adanet.Socket
, tetapi tidak memilikilocalAddress
properti.gunakan modul ip npm
sumber
Satu liner yang tepat untuk garis bawah dan lodash adalah:
sumber
.find({family: 'IPv4', internal: false})
juga untuk kode yang lebih pendek dan eleganInilah yang mungkin jawaban paling bersih dan paling sederhana tanpa ketergantungan & yang bekerja di semua platform.
sumber
Yang saya tahu adalah saya ingin alamat IP dimulai dengan
192.168.
. Kode ini akan memberi Anda hal itu:Tentu saja Anda hanya dapat mengubah angka jika Anda mencari yang berbeda.
sumber
192.168
?192.168.
itu sebabnya saya memilih itu.untuk penggunaan Linux dan MacOS, jika Anda ingin mendapatkan IP Anda dengan cara sinkron, coba ini.
hasilnya akan seperti ini.
sumber
Saya menulis modul Node.js yang menentukan alamat IP lokal Anda dengan melihat antarmuka jaringan mana yang berisi gateway default Anda.
Ini lebih dapat diandalkan daripada memilih antarmuka dari
os.networkInterfaces()
atau pencarian DNS dari nama host. Ia dapat mengabaikan antarmuka virtual VMware, loopback, dan antarmuka VPN, dan itu berfungsi pada Windows, Linux, Mac OS, dan FreeBSD. Di bawah tenda, ia menjalankanroute.exe
ataunetstat
mem-parsing output.sumber
Berikut ini adalah versi sederhana dalam javascript vanilla untuk mendapatkan satu ip:
sumber
Bagi siapa pun yang tertarik dengan singkatnya, berikut adalah beberapa "satu-liners" yang tidak memerlukan plugins / dependensi yang bukan bagian dari instalasi Node standar:
IPv4 publik dan IPv6 dari eth0 sebagai Array:
IP Publik pertama eth0 (biasanya IPv4) sebagai String:
sumber
en0
danen1
untuk ethernet dan wifi. Di Windows, saya punyaLocal Area Connection
danWireless Network Connection
.Google mengarahkan saya ke pertanyaan ini sambil mencari "node.js mendapatkan server ip" , jadi mari kita berikan jawaban alternatif bagi mereka yang mencoba mencapai ini dalam program server node.js mereka (mungkin seperti poster asli).
Dalam kasus yang paling sepele di mana server hanya terikat pada satu alamat IP, seharusnya tidak perlu menentukan alamat IP karena kita sudah tahu ke alamat mana kita mengikatnya (mis. Parameter kedua dilewatkan ke
listen()
fungsi).Dalam kasus yang kurang sepele di mana server terikat ke beberapa alamat IP, kita mungkin perlu menentukan alamat IP dari antarmuka yang terhubung dengan klien. Dan seperti yang disarankan oleh Tor Valamo, saat ini, kita dapat dengan mudah mendapatkan informasi ini dari soket yang terhubung dan
localAddress
propertinya.Misalnya, jika programnya adalah server web:
Dan jika itu adalah server TCP generik:
Saat menjalankan program server, solusi ini menawarkan portabilitas, akurasi, dan efisiensi yang sangat tinggi.
Untuk detail lebih lanjut, lihat:
sumber
Berdasarkan komentar di atas, inilah yang bekerja untuk versi Node saat ini:
Komentar pada salah satu jawaban di atas tidak ada panggilan
values()
. Sepertinyaos.networkInterfaces()
sekarang mengembalikan objek, bukan array.sumber
_.chain(..)
dapat ditulis ulang sebagai_(...)
, yang.filter(..)
dapat ditulis ulang sebagai.where({family: 'IPv4', internal: false})
, dan Anda bisa drop finalvalue()
karena.first()
melakukannya untuk Anda ketika chaining.Berikut adalah variasi dari contoh di atas. Dibutuhkan perhatian untuk menyaring antarmuka vMware dll. Jika Anda tidak lulus indeks itu mengembalikan semua alamat jika tidak, Anda mungkin ingin menetapkannya secara default ke 0 kemudian hanya lulus nol untuk mendapatkan semua, tetapi Anda akan mengatasinya. Anda juga bisa menambahkan argumen lain untuk filter regex jika ingin menambahkan
sumber
Saya bisa melakukan ini hanya dengan menggunakan simpul js
Sebagai Node JS
Sebagai skrip bash (perlu simpul js diinstal)
sumber
Inilah varian saya yang memungkinkan mendapatkan alamat IPv4 dan IPv6 secara portabel:
Berikut adalah versi CoffeeScript dari fungsi yang sama:
Contoh output untuk
console.log(getLocalIPs())
sumber
Jika Anda menyukai semua singkatnya, ini dia menggunakan lodash :
sumber
Mirip dengan jawaban lain tetapi lebih ringkas:
sumber
Object.keys(interfaces).reduce(...)
denganObject.values(interfaces).flat()
dan itu akan menjadi hal yang sama.Satu liner untuk MAC atau alamat localhost pertama saja.
Saat mengembangkan aplikasi di mac os, dan ingin mengujinya di telepon, dan perlu aplikasi Anda untuk memilih ip hosting lokal secara otomatis.
sumber
Berikut adalah satu-liner kecil yang rapi untuk Anda yang melakukan ini secara fungsional:
sumber
reduce
dan mengganti panggilanmap
dengan panggilan keflatMap
.Sering kali saya menemukan ada beberapa interface menghadap internal dan eksternal yang tersedia (misalnya:
10.0.75.1
,172.100.0.1
,192.168.2.3
), dan itu adalah salah satu eksternal bahwa aku benar-benar setelah (172.100.0.1
).Jika ada orang lain yang memiliki kepedulian yang sama, berikut ini satu lagi yang diharapkan dapat membantu ...
sumber
Saya menggunakan node.js 0.6.5
Inilah yang saya lakukan
sumber
hostname -I
(huruf besar i). Ini mengembalikan daftar semua alamat IP yang ditetapkan mesin. Alamat IP pertama adalah yang Anda butuhkan. IP itu adalah yang terpasang pada antarmuka saat ini yang aktif.Berikut ini adalah versi multi-ip dari jawaban jhurliman di atas:
sumber
Saya menyadari ini adalah utas lama, tetapi saya ingin menawarkan peningkatan pada jawaban teratas karena alasan berikut:
untuk ... dalam ... enumerasi harus divalidasi untuk memastikan objek yang disebutkan di atas berisi properti yang Anda cari. Karena javsacript diketik secara longgar dan for ... in ... dapat diserahkan objek arbitrase apa pun untuk ditangani; lebih aman untuk memvalidasi properti yang kami cari tersedia.
sumber