2012-11-28 5 views
7

http.request 또는 net.connect에는 네트워크 인터페이스를 지정하여 연결을 시작할 수있는 옵션이 있습니까?Node.js에서 net 요청을 할 때 네트워크 인터페이스를 지정하는 방법은 무엇입니까?

OS 레벨에서 AFAIK는 주소 수준을 지정하거나 라우팅 테이블에로드 균형을 지정할 수 있습니다. 그러나 제 소프트웨어에서 인터페이스를 선택하는 방법은 그 이상입니다. 코드에서 그렇게 할 수 있는지 알고 싶습니다.

답변

3

노드이 내장되어 사용할 수 있습니다 사용하고 싶다.

+1

나는이 질문을 한 후에 이것이 가장 좋은 방법이라고 생각했다. os.networkInterfaces()로 주소를 그룹화 할 수 있습니다. – Vicary

3

EDIT : 사용자 인터페이스에서 네트워크 인터페이스를 지정할 수 있습니다. 나는 교정했다. 그러나 노드와 함께 사용할 수있는 모듈을 아직 찾지 못했습니다.

기본적으로 네트워크 인터페이스는 OS 라우팅 테이블에 의해 결정됩니다.

Unix 시스템 (OSX 포함)에서이 테이블을 netstat -r과 함께 나열 할 수 있습니다. 터미널을 열고 명령을 입력하십시오.

laurent ~ $ netstat -r 
Routing tables 

Internet: 
Destination  Gateway   Flags  Refs  Use Netif Expire 
default   192.168.1.1  UGSc   153  0  en0 
127    localhost   UCS    0  0  lo0 
localhost   localhost   UH    2  42  lo0 
... 

Netif 필드는 경로에 사용되는 네트워크 인터페이스를 제공합니다. 이것은 더 저기 serverfault 것입니다

laurent ~ $ route get google.fr 
    route to: par03s02-in-f23.1e100.net 
destination: default 
     mask: default 
    gateway: 192.168.1.1 
    interface: en0 
     flags: <UP,GATEWAY,DONE,STATIC,PRCLONING> 
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount  mtu  expire 
     0   0   0   0   0   0  1500   0 

,하지만 당신은 route 명령 경로를 변경할 수 있습니다 당신은 또한 route와 호스트 이름에 도달하는 데 사용되는 인터페이스를 얻을 수 있습니다. 예를 들어,이 의지 경로 트래픽이 X.Y.Z.하는 [0-254]는 eth0를에 X.Y.Z.254에 :

route add -net X.Y.Z.0/24 gw X.Y.Z.254 dev eth0 

당신이 루트가 재부팅을 유지하려는 경우, 당신은 /etc/network/interfaces에 추가 할 수 있습니다. 여러 경로 사이에서로드 균형을 조정하려면 MPLS도 확인해야합니다.

http://nodejs.org/api/net.html#net_net_connect_options_connectionlistener

http://nodejs.org/api/http.html#http_http_request_options_callback

그냥 인터페이스의 IP에 당신이 거라고 설정 localAddress를 참조하십시오

+0

정보를 얻는 방법에 대한 설명 주셔서 감사합니다. 그렇다면 어떻게 경로를 지정할 수 있습니까? 내가 더 많은 정보를 제공하기 위해 내 질문을 업데이트 할 것이다. 내가 묻는 것은 코드로 지정할 수있는 방법이다. 나는 그것이 간단한 NO일지도 모른다 이해한다. : D – Vicary

+0

실제로 수동으로 경로를 지정할 수 있습니다. 어떤 OS를 타겟팅하고 있습니까? –

+0

필자의 경우 CentOS와 OSX (Darwin)이지만, 유닉스 계열과 같은 경우가 더 많을 수있다. – Vicary

1

당신은 node cURL wrapper

curl = require('node-curl') 
curl('www.google.com', { INTERFACE: 'eth1', RAW: 1 }, function(err) { 
    console.info(this); 
}); 
+0

답변을 주셔서 감사합니다. 컬은 시작하는 좋은 방법입니다. 그러나 모든 코드를 노드 컬링으로 포팅하는 것은 옵션처럼 보이지 않습니다. 난 원래 net.connect 및 http.request 것들을 유지하고 싶다. – Vicary