Angesichts der Beispiel-Skript unten bin ich eine TCP-Verbindung von einem Server zu einem anderen, die funktioniert gut.Senden von Verbindungsmetadaten zwischen zwei Net-Servern
net = require "net"
log = console.log
# This server needs to receive custom data eg. (remoteAddress or an uuid)
target = net.createServer (socket) ->
log('Target connection from ' + socket.remoteAddress)
target.listen(10000, '0.0.0.0',() -> log('Target ready'))
# User-facing server that pipes to the target server
front = net.createServer (socket) ->
log('Front connection from ' + socket.remoteAddress)
socket.on 'data', (data) ->
socket.proxy = net.createConnection 10000,() ->
socket.proxy.write(data)
socket.pipe(socket.proxy).pipe(socket)
front.listen(8006, '0.0.0.0',() -> log('Front ready'))
Das Problem, das ich bin vor ist, dass ich die IP-Adresse übergeben müssen (zB. socket.remoteAddress
) der ursprünglichen Fassung auf den anderen Server. Es muss socket.remoteAddress
des Zieles nicht überschrieben werden, nur die ursprüngliche IP auf die eine oder andere Weise abrufen.
Hier ist, wie ich dies zu testen:
$ telnet 172.0.0.50 8006
Trying 172.0.0.50...
Connected to 172.0.0.50.
Escape character is '^]'.
SendingData
die Ergebnisse:
Target ready
Front ready
Front connection from 172.0.0.1
Target connection from 127.0.0.1
Beachten Sie, dass die target
-Server die IP-Adresse des front
Server empfängt, und ich völlig verstehen, warum.
Ich kann die data
leider nicht verwenden, da sie vom Client vollständig verschlüsselt werden könnte.
x-Forwarder-für ist ein HTTP-Header und nichts mit TCP leider Strömen zu tun hat. Der Stream könnte verschlüsselt sein. In diesem Fall kann ich nicht prüfen, ob es sich um HTTP, TLS oder etwas anderes handelt. – WooDzu
Sie müssen sich nicht darum kümmern, ob die Daten verschlüsselt sind oder nicht. Sie könnten die Daten einfach mit der formatierten iutin32-IP voranstellen. Und wenn das Backend die Proxy-Daten empfängt, entfernen Sie die vorhergehende IP-Adresse und parsen Sie sie. – Jerry
Das ist eigentlich eine interessante Idee. Nicht der sauberste, aber definitiv einen Versuch wert. Danke Jerry – WooDzu