最近在做Cloud related的项目时,遇到一个问题,就是如何在Node.js中获取本机的IP地址。Node.js提供的API中,只能获取本机的hostname.

os = require('os');console.log(os.hostname());

但要希望得到本机IP的话,node.js就无能为力了。

先在Google上search了一下,发现一个关于这个问题比较好的讨论,Get local IP address in node.js。其中提到通过exec('ipconfig')+正则表达式来处理。

但是,新的问题出现了。node.js 中的exec是异步执行,我不知道什么时候exec执行完,当然也就不知道什么时候去取ip地址了。在万般无奈的情况下,只能

监听node.js中process对象的close事件,确保exec("ipconfig")执行完后,再做其他处理。

代码如下:

os = require('os');
child_proc = require('child_process');
var getIPApp = undefined;
var matches = [];
var pmHosts = [];
var filterRE = undefined;
var pingResult = null;
var pmHost = null;if ('win32' == os.platform()) {getIPApp = child_proc.spawn("ipconfig", null);// only get the IPv4 addressfilterRE = /\b(IPv4|IP\s)[^:\r\r\n]+:\s+([^\s]+)/g;
}
else {// TODO: we need try to get the local IP for other os, such as unix/mac return false;
}getIPApp.on('exit', function (code, signal) {matches = pingResult.match(filterRE) || [];for (var i = 0; i < matches.length; i++) {var host = matches[i].split(':')[1];// trim the spaces in the string's start/end position.host = host.replace(/(^[\s]*)|([\s]*$)/g,"");pmHosts.push(host);}if (pmHosts.length > 0)pmHost = pmHosts[0];// do other thingsconsole.log(pmHost);});getIPApp.stdout.on('data', function (data) {// get ping result.pingResult = pingResult + data.toString();
});

上述方法仅支持windows平台,只是用来获取IPV4格式的IP地址。在Win7 64, WinXp 32测试通过。

如果需要在其它平台下运行,请修改ipconfig.如希望获取IPV6格式的IP地址,请修改正则表达式。

Update

目前,在node.js(v0.8.16)上,可以使用以下代码来获取本IP地址

var os=require('os');
var ifaces=os.networkInterfaces();
for (var dev in ifaces) {var alias=0;ifaces[dev].forEach(function(details){if (details.family=='IPv4') {console.log(dev+(alias?':'+alias:''),details.address);++alias;}});
}

如何在Node.js中获取本机本地IP地址相关推荐

  1. js/vue获取本机的IP地址遇到的问题解决经验

    再做前端页面的时候,想获取本地的ip地址,可能是为了和服务器通信,可能是为了展示,无论哪种,目的要获取js get IP 相信大家搜到最多的是以下的js方法(都是超来抄去),我来讲讲我遇到的坑,方法虽 ...

  2. 如何在node.js中发出HTTP POST请求?

    如何在node.js中使用数据发出出站HTTP POST请求? #1楼 如果您使用请求库,这会变得更容易. var request = require('request');request.post( ...

  3. 如何在Node.js中打印堆栈跟踪?

    本文翻译自:How to print a stack trace in Node.js? 有谁知道如何在Node.js中打印堆栈跟踪? #1楼 参考:https://stackoom.com/ques ...

  4. 【Win 10 应用开发】获取本机的IP地址

    按照老规矩,也是朋友的建议,老周今天在吹牛之前,先讲一个小故事. 有朋友问我,老周,你现在还发短信吗,你每个月用多少电话费?唉,实话说,现在真的发短信不多了,套餐送的130条短信,每月都发不了一条.至 ...

  5. 使用Linux curl命令获取本机公网IP地址

    使用Linux curl命令获取本机公共IP地址 在本教程中,我们将学习如何使用Linux curl命令查找计算机的公共IP地址. 通常,如果我们想要找到我们使用的公共IP地址,我们会去谷歌并搜索&q ...

  6. Spring boot 获取本机的IP地址mac地址以及电脑名称!

    Spring boot 获取本机的IP地址mac地址以及电脑名称! package com.example.demo;import java.net.InetAddress;import java.n ...

  7. 获取本机所有IP地址的方法

    获取本机所有IP地址的方法    java.net包中的IP地址类InetAddress提供了可以获取本机IP地址的方法getLocalHost(),但是通过该方法只能获得第一个网络设备的IP地址.但 ...

  8. python项目实战:获取本机所有IP地址的方法

    2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家介绍一个利用python获取本机所有IP地址的具体代码,具有一定的参考价值,希望能够帮助到大家,代码如下: 导 ...

  9. C++获取本机的ip地址程序

    C++获取本机的ip地址程序 #include <WinSock2.h> #pragma comment(lib,"ws2_32") //链接到ws2_32动态链接库c ...

最新文章

  1. c#创建、保存excel正常执行要点补疑
  2. IJCAI 2020灭霸式拒稿,AI审稿是否更公平?
  3. 使用消息来处理多线程程序中的一些问题
  4. 使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面
  5. MySqli操作数据库
  6. Objective-C Runtime 运行时之四:Method Swizzling
  7. Linux文件管理常用命令
  8. paip.2013年技术趋势以及热点 v2.0 cae
  9. 微信服务号/企业号防止AccessToken过期的操作指南深入浅出
  10. ESP实验02-读取DS1307eerom34c32
  11. 软件设计师之朴素的模式匹配算法
  12. AMap(地图组成与名词解释)
  13. 如何用PHP完整的开发一个网站?
  14. 数据结构课后习题答案
  15. 睿智的目标检测20——利用mAP计算目标检测精确度
  16. input中blur失去焦点事件与点击事件冲突的解决方法(vue)
  17. 计算机关机键桌面,如何在电脑桌面添加一个关机图标?
  18. 黑马程序员————IO流2(day19)
  19. java代理模式-原来你是这样的代理
  20. 油脂集中润滑循环指示器XZQ-1、XZQ-2

热门文章

  1. Matlab:License Manager Error -9
  2. 低频能不能采到高频?采样定理指导硬件设计
  3. python类实例化 输入参数名字 下划线_Python 用下划线作为变量前缀和后缀指定特殊变量...
  4. Android中的缓存策略,实战打造ImageLoader
  5. OpenCV_03 Numpy库和Mat
  6. android 系统光标,如何定位android系统中光标的位置
  7. 吹塑机是什么?它的用途?
  8. APNS部署教程2(证书配置)
  9. 仿小米天气预报未来几天趋势预报折线图
  10. 产品设计中的五个层次需求,你知道吗?