На моем компьютере запущена простая программа node.js, и я хочу получить локальный IP-адрес ПК, на котором запущена моя программа. Как мне получить его с помощью node.js?
javascript
node.js
ip
yojimbo87
источник
источник
Ответы:
источник
if( details.family=='IPv4' && details.internal === false ) {
если вы просто хотите внешние IP-адреса.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 на данный момент не работает на Windows.Запускать программы для анализа результатов кажется немного сомнительным. Вот что я использую.Это должно вернуть ваш первый сетевой интерфейс локальный IP.
источник
https://github.com/indutny/node-ip
источник
Любой IP-адрес вашей машины вы можете найти с помощью модуля os - и это родной для NodeJS
Все, что вам нужно сделать, это вызвать os.networkInterfaces (), и вы получите простой управляемый список - проще, чем запуск ifconfig по лигам
http://nodejs.org/api/os.html#os_os_networkinterfaces
Лучший
Эдоардо
источник
var address = networkInterfaces['venet0:0'][0].address
Вот фрагмент кода node.js, который будет анализировать вывод
ifconfig
и (асинхронно) возвращать первый найденный IP-адрес:(протестировано только на MacOS Snow Leopard; надеюсь, оно работает и на Linux)
Пример использования:
Если вторым параметром является
true
, функция будет каждый раз выполнять системный вызов; в противном случае используется кэшированное значение.Обновленная версия
Возвращает массив всех локальных сетевых адресов.
Протестировано на Ubuntu 11.04 и Windows XP 32
Пример использования для обновленной версии
источник
filterRE = /\bIP-?[^:\r\n]+:\s*([^\s]+)/g;
. Помимо этого, отличный сценарий, настоящий спасатель. Большое спасибо!Вот мой метод получения локального IP-адреса, при условии, что вы ищете адрес IPv4, и у машины есть только один реальный сетевой интерфейс. Он может быть легко реорганизован для получения массива IP-адресов для машин с несколькими интерфейсами.
источник
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"
Установите модуль под названием ip like
затем используйте этот код.
источник
Вызов ifconfig очень зависит от платформы, и сетевой уровень знает, по каким IP-адресам включен сокет, поэтому лучше спросить об этом. Node не предоставляет прямого способа сделать это, но вы можете открыть любой сокет и спросить, какой локальный IP-адрес используется. Например, открывая сокет для www.google.com:
Случай использования:
источник
Ваш локальный IP-адрес всегда 127.0.0.1.
Затем есть сетевой IP-адрес, который вы можете получить из
ifconfig
(* nix) илиipconfig
(win). Это полезно только внутри локальной сети.Кроме того, существует ваш внешний / публичный IP-адрес, который вы можете получить только в том случае, если вы каким-либо образом попросите маршрутизатор указать его, или вы можете настроить внешнюю службу, которая будет возвращать IP-адрес клиента всякий раз, когда он получает запрос. Существуют и другие подобные сервисы, такие как whatismyip.com.
В некоторых случаях (например, если у вас есть подключение к глобальной сети), IP-адрес сети и общедоступный IP-адрес совпадают и оба могут использоваться для доступа к вашему компьютеру.
Если ваша сеть и общедоступные IP-адреса различаются, вам может потребоваться, чтобы сетевой маршрутизатор переадресовывал все входящие соединения на ваш ip сети.
Обновление 2013:
Там новый способ сделать это сейчас, вы можете проверить объект сокета вашего соединения для свойства под названиемlocalAddress
, напримерnet.socket.localAddress
. Он возвращает адрес на вашем конце сокета.Самый простой способ - просто открыть случайный порт и прослушать его, затем получить свой адрес и закрыть сокет.Обновление 2015:
Предыдущее больше не работает.
источник
ifconfig
илиipconfig
и проанализировать строку ответа?ifconfig
net.socket
возвращениеundefined
с 2015 года, так что «новый способ сделать это» больше не работает. Естьnet.Socket
, но у него нетlocalAddress
собственности.использовать модуль npm ip
источник
Правильная подкладка для подчеркивания и lodash :
источник
.find({family: 'IPv4', internal: false})
а также для более короткого и элегантного кодаВот что может быть самым чистым и простым ответом без зависимостей, который работает на всех платформах.
источник
Все, что я знаю, я хотел, чтобы IP-адрес начинался с
192.168.
. Этот код даст вам следующее:Конечно, вы можете просто изменить цифры, если вы ищете другой.
источник
192.168
?192.168.
этого, поэтому я выбрал его.для Linux и MacOS использует, если вы хотите получить ваши IP-адреса синхронным способом, попробуйте это.
результат будет примерно таким.
источник
Я написал модуль Node.js который определяет ваш локальный IP-адрес, посмотрев, какой сетевой интерфейс содержит ваш шлюз по умолчанию.
Это более надежно, чем выбор интерфейса
os.networkInterfaces()
или DNS-поиска имени хоста. Он может игнорировать виртуальные интерфейсы VMware, петлевые и VPN-интерфейсы и работает в Windows, Linux, Mac OS и FreeBSD. Под капотом он выполняетroute.exe
илиnetstat
и анализирует вывод.источник
Вот упрощенная версия ванильного javascript для получения одного ip:
источник
Для тех, кто интересуется краткостью, вот некоторые «однострочные», которые не требуют плагинов / зависимостей, которые не являются частью стандартной установки Node:
Общедоступные IPv4 и IPv6 из eth0 в качестве массива:
Первый публичный IP-адрес eth0 (обычно IPv4) в виде строки:
источник
en0
иen1
для ethernet и wifi. На винде у меняLocal Area Connection
иWireless Network Connection
.Google направил меня на этот вопрос при поиске «node.js get server ip» , поэтому давайте дадим альтернативный ответ тем, кто пытается добиться этого на своем сервере node.js программе (может быть, в случае с оригинальным постером).
В наиболее тривиальном случае, когда сервер связан только с одним IP-адресом, не нужно определять IP-адрес, поскольку мы уже знаем, к какому адресу мы его привязали (например, второй параметр передается в
listen()
функции).В менее тривиальном случае, когда сервер связан с несколькими IP-адресами, нам может потребоваться определить IP-адрес интерфейса, к которому подключен клиент. И как кратко предложил Tor Valamo, в настоящее время мы можем легко получить эту информацию из подключенного сокета и его
localAddress
свойства.Например, если программа является веб-сервером:
И если это универсальный TCP-сервер:
При запуске серверной программы это решение предлагает очень высокую мобильность, точность и эффективность.
Для более подробной информации смотрите:
источник
Основываясь на комментарии выше, вот что работает для текущей версии Node:
В комментарии к одному из ответов выше пропущен призыв к
values()
. Похоже,os.networkInterfaces()
теперь возвращает объект вместо массива.источник
_.chain(..)
Может быть переписано в виде_(...)
, то.filter(..)
может быть переписано , как.where({family: 'IPv4', internal: false})
и вы можете оставить окончательные ,value()
потому что.first()
делает это для вас , когда сцепления.Вот вариант приведенных выше примеров. Это требует фильтрации интерфейсов vMware и т. Д. Если вы не передадите индекс, он вернет все адреса, в противном случае вы можете установить его по умолчанию на 0, а затем просто передать null, чтобы получить все, но вы разберетесь с этим. Вы также можете передать другой аргумент для фильтра регулярных выражений, если хотите добавить
источник
Я смог сделать это, используя только узел JS
As Node JS
Как скрипт bash (нужен установленный узел js)
источник
Вот мой вариант, который позволяет получать адреса IPv4 и IPv6 переносимым способом:
Вот версия CoffeeScript той же функции:
Пример вывода для
console.log(getLocalIPs())
источник
Если вам нравится вся эта краткость, то здесь используется lodash :
источник
Аналогично другим ответам, но более кратко:
источник
Object.keys(interfaces).reduce(...)
с ,Object.values(interfaces).flat()
и это было бы то же самое.Один вкладыш для MAC только по первому локальному адресу.
Когда вы разрабатываете приложения для Mac OS и хотите проверить это на телефоне, вам нужно, чтобы ваше приложение автоматически выбирало IP-адрес localhost.
источник
Вот небольшая аккуратная строчка для вас, которая делает это функционально:
источник
reduce
и заменить вызовmap
вызовомflatMap
.Много раз я нахожу Есть несколько интерфейсов внутренней и наружной облицовки недоступно (например
10.0.75.1
,172.100.0.1
,192.168.2.3
), и это внешний один , что я действительно после того, как (172.100.0.1
).В случае, если у кого-то еще есть подобные проблемы, вот еще один вариант, который, надеюсь, может быть полезным ...
источник
Я использую node.js 0.6.5
Вот что я делаю
источник
hostname -I
(в верхнем регистре я). Возвращает список всех назначенных IP-адресов аппарата. Первый IP-адрес - это то, что вам нужно. Этот IP-адрес тот, который подключен к текущему интерфейсу, который работает.Вот версия ответа Джурлимана для нескольких ip:
источник
Я понимаю, что это старая ветка, но я бы хотел предложить лучший ответ по следующим причинам:
Перечисление for ... in ... должно быть проверено, чтобы убедиться, что перечисляемый объект содержит искомое свойство. Поскольку javsacript свободно напечатан и for ... in ... может быть передан любой произвольный объект для обработки; безопаснее подтвердить, что свойство, которое мы ищем, доступно.
источник