2013-11-28 22 views
9

私はnode.jsを使用しており、ISPから提供された外部IPアドレスを取得する必要があります。 http://myexternalip.com/rawのようなサービスを使用せずにこれを達成する方法はありますか?node.jsで外部IPアドレスを取得する方法は?

+2

ないあなたがNAT – Xophmeister

+0

後ろにいる場合、私はこれを推測箱から出して使用する準備ができています私の場合です。私のラップトップIPは192.168.1.3、私のWiFiルーターは192.168.1.1、ISPから提供された私のモデムIPは201.15.1XX.XXXです。私はちょうど最後のものを手に入れたいです。 – fonini

+0

は、ノードまたはいずれかの言語に固有ではありません。これはネットワークルーティングに関する質問であり、接続することなくホストから最終的に決定することはできません。 – Joe

答えて

9

使用externalipパッケージ

https://github.com/alsotang/externalip

externalip(function (err, ip) { 
    console.log(ip); // => 8.8.8.8 
}); 
+2

これはいいですね。しかし、npmレジストリ – nilesh

+3

@nileshええに掲載されていないように見えます。私はnpmにプッシュするのを忘れます。今すぐ利用可能です! – alsotang

4

編集:これは2013年に書かれました...サイトはなくなりました。誰かが苦情を言わずに受け入れられた答えに行くのでない限り、私は今、サンプルリクエストコードを残しています。


http://fugal.net/ip.cgiであった。

か、

require('http').request({ 
    hostname: 'fugal.net', 
    path: '/ip.cgi', 
    agent: false 
    }, function(res) { 
    if(res.statusCode != 200) { 
     throw new Error('non-OK status: ' + res.statusCode); 
    } 
    res.setEncoding('utf-8'); 
    var ipAddress = ''; 
    res.on('data', function(chunk) { ipAddress += chunk; }); 
    res.on('end', function() { 
     // ipAddress contains the external IP address 
    }); 
    }).on('error', function(err) { 
    throw err; 
}).end(); 

参考することができますhttp://www.nodejs.org/api/http.html#http_http_request_options_callback

+2

良いスタートですが、必須のものが1つ欠落しています: 'end'を呼び出しています。このスクリプトを試してみる人は、最後の行を次のように変更するのを忘れないでください: '))end();' – Domi

+0

サイトはオフラインです – fonini

-1

あなたはnurlライブラリコマンドを使用することができますippublicこれを得るために。 (情報開示:私はnurlを作った)

> npm install nurl-cli -g 
> ippublic; 
// 50.240.33.6 
0

私の恥知らずなプラグ:canihazip開示:私はモジュールの作者だけど、しないメインページの。)

それはとして必要とすることができますオプションでコールバック関数を渡すことができる単一の関数を公開すると、それは約束を返します。

グローバルにインストールしてCLIとして使用することもできます。

6

彼らは、外部IPを取得し、いくつかのWebサイトに接続し、ソケット接続から、あなたの詳細を取得するために、Pythonで何をするかと同じ操作を行うことができます。

const net = require('net'); 
const client = net.connect({port: 80, host:"google.com"},() => { 
    console.log('MyIP='+client.localAddress); 
    console.log('MyPORT='+client.localPort); 
}); 

*残念ながら参考としてもう元のPythonの例を見つけることができません..

+0

これは私のために外部IPを出力しません – pixelfreak

+0

@pixelfreakどのノードのバージョンですか? v4.4.5を使用して私のために動作します – mgear

6

npm install --save public-iphere

その後

publicIp.v4().then(ip => { 
    console.log("your public ip address", ip); 
}); 

そして、あなたは、ローカルマシンのIPをしたい場合は、thisを使用することができます。

var ip = require("ip"); 
var a = ip.address(); 
console.log("private ip address", a); 
+0

毎回ipv4クエリが失敗します。 「クエリのタイムアウト」 – Tyguy7

0

は単にたSuperAgentを使用

var superagent = require('superagent'); 
var getip = function() { 
    superagent 
    .get('http://ip.cn/') 
    .set('User-Agent', 'curl/7.37.1') 
    .end(function (err, res) { 
     if (err) { 
     console.log(err); 
     } 
     var ip = res.text.match(/\d+\.\d+\.\d+\.\d+/)[0]; 
     console.log(ip) 
     // Here is the result 
    }); 
}; 
1

これはipifyの例外を除いて(任意の外部依存せずにうまく動作するはずです。ORG):

var https = require('https'); 

var callback = function(err, ip){ 
    if(err){ 
     return console.log(err); 
    } 
    console.log('Our public IP is', ip); 
    // do something here with the IP address 
}; 

https.get({ 
    host: 'api.ipify.org', 
}, function(response) { 
    var ip = ''; 
    response.on('data', function(d) { 
     ip += d; 
    }); 
    response.on('end', function() { 
     if(ip){ 
      callback(null, ip); 
     } else { 
      callback('could not get public ip address :('); 
     } 
    }); 
}); 

またhttps://httpbin.org

https://httpbin.org/ip

1

もうちょっとノードモジュールがext-ipでGET使用することができます。違いは、コーディングスタイルに合った異なる応答オプションを使用できることです。それは...

約束

let extIP = require('ext-ip')(); 

extIP.get().then(ip => { 
    console.log(ip); 
}) 
.catch(err => { 
    console.error(err); 
}); 

イベント

let extIP = require('ext-ip')(); 

extIP.on("ip", ip => { 
    console.log(ip); 
}); 

extIP.on("err", err => { 
    console.error(err); 
}); 

extIP(); 

コールバック

let extIP = require('ext-ip')(); 

extIP((err, ip) => { 
    if(err){ 
     throw err; 
    } 

    console.log(ip); 
}); 
関連する問題