2012-11-28 8 views
7

In http.request o net.connect, esiste un'opzione che è possibile specificare un'interfaccia di rete per avviare una connessione?Come specificare un'interfaccia di rete quando si effettuano richieste net da Node.js?

MODIFICA: AFAIK nel livello di sistema operativo È possibile specificare il livello di indirizzo o il bilanciamento del carico nelle tabelle di routing. Ma il modo di scegliere l'interfaccia nel mio software è più di questo, voglio sapere se posso farlo nei codici.

risposta

3

EDIT: Come sottolineato da mak, è infatti possibile specificare un'interfaccia di rete da un processo utente. Sono corretto. Tuttavia, non ho ancora trovato un modulo che lo consenta con il nodo.

Per impostazione predefinita, l'interfaccia di rete è determinata dalla tabella di routing del sistema operativo.

È possibile elencare questa tabella con netstat -r su sistemi Unix (incluso OSX). Basta aprire un terminale e digitare il comando. Si otterrà una lista come:

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 
... 

Il campo Netif fornisce l'interfaccia di rete utilizzata per il percorso. È inoltre possibile ottenere l'interfaccia utilizzata per raggiungere un hostname con route:

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 

Questo è più una cosa serverfault, ma è possibile modificare le rotte con il comando route. Ad esempio, questo il traffico volontà di X.Y.Z. [0-254] per X.Y.Z.254 su eth0:

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

Se si desidera percorsi a persistere un riavvio, è possibile aggiungerli al /etc/network/interfaces. Se si desidera caricare il bilanciamento tra diversi percorsi, è necessario controllare anche MPLS.

+0

Grazie per la spiegazione su come ottenere le informazioni. Quindi, come posso specificare un percorso? Aggiornerò la mia domanda per dare maggiori informazioni, quello che sto chiedendo è un metodo che può specificare con il codice. Capisco che potrebbe essere un semplice NO. : D – Vicary

+0

È infatti possibile specificare manualmente i percorsi. Quale sistema operativo stai prendendo di mira? –

+0

Il mio caso è CentOS e OSX (Darwin), ma altri potrebbero venire, per lo più unix-like. – Vicary

1

È possibile utilizzare node cURL wrapper

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

Grazie per la risposta, arricciatura è un buon modo per iniziare. Ma il porting di tutti i miei codici in node-curl non sembra un'opzione. Voglio davvero mantenere le cose originali net.connect e http.request. – Vicary

Problemi correlati