2016-04-11 9 views
2

ノードjs https要求の送信元ポートを設定する方法はありますか?私は、宛先、むしろソース、すなわち要求を送信するために使用されたポートについて尋ねていません。ノードjs https要求の送信元ポートを設定する方法はありますか?

コンテキストは、ランダムなポートではなく、特定のポートからhttps要求を送信しようとしているため、iptablesをロックすることができます。ノードがルートとして実行されていないので、ポートは443ではありません。

更新: ノードにバグがあります。オプションlocalAddressとlocalPortは、少なくともTLSソケットでは動作しません。

更新: 去年同様の質問があります。答えは「do not do」です。これは、ノードが一般的なツールであると考えられているので、愚かなようです。 Nodejs TCP connection client port assignment

+0

システムのデフォルトポートを変更するか、アプリケーションのポートを変更したいだけですか? – jmugz3

+0

クライアントがアクセスしているリンクの最後に ':80'を追加します。 (80を任意のポートに置き換えてください) – Oisin

+0

特定のhttps要求にソースポートを設定したいとします。私のhttpsサーバはrootではないので、8443でリッスンしています。場合によっては、私のサーバーはリモートサーバーへのhttps要求を行う必要があります。そのような場合は、ローカルポート8444からリクエストを送信したいと思います。どうすればいいのですか?ソースポートのパラメータが表示されません。 「デフォルト」がありますが、何もしないようです。 – user3356715

答えて

0

は、残念ながら、それが見えます。明らかに、これはあまり使われていない機能ですが、可能です。このリンクは、ポートバインディングをかなりうまく説明しています。 https://blog.cloudflare.com/cloudflare-now-supports-websockets/ nodejsにこの変更を考慮させる方法がわかりません。

1

この機能は文書化されていないようですが、https.requestのoptions引数にはlocalAddresslocalPortの両方のパラメータを設定することでこれを達成できます。 https://github.com/nodejs/node/blob/b85a50b6da5bbd7e9c8902a13dfbe1a142fd786a/lib/net.js#L916

基本的な例は次のとおりです:

詳細については、こちらのコードを参照してくださいノードがクライアントポートをバインドサポートしていないよう

var https = require('https'); 

var options = { 
    hostname: 'example.com', 
    port: 8443, 
    localAddress : '192.168.0.1', 
    localPort: 8444 
}; 

var req = https.request(options, function(res) { 
    console.log(res); 
}); 

req.end(); 
+0

私はlocalPortを取得できません働くエージェントの有無にかかわらず試しました。 iptablesログにランダムなポートが表示されます。 – user3356715

関連する問題