Учитывая пример сценария ниже, я подключаю TCP-соединение с одного сервера на другой, который работает нормально.Отправка метаданных соединений между двумя сетевыми серверами
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'))
Проблема я столкнулся в том, что мне нужно, чтобы передать IP-адрес (например, socket.remoteAddress
) исходного сокета к другому серверу. Не нужно переопределять цель socket.remoteAddress
, просто получить исходный IP так или иначе.
Вот как я пробовал:
$ telnet 172.0.0.50 8006
Trying 172.0.0.50...
Connected to 172.0.0.50.
Escape character is '^]'.
SendingData
что приводит:
Target ready
Front ready
Front connection from 172.0.0.1
Target connection from 127.0.0.1
Обратите внимание, что сервер target
получает IP-адрес сервера front
, и я полностью понимаю, почему.
К сожалению, я не могу использовать data
, поскольку он может быть полностью зашифрован клиентом.
х-экспедитором-за это заголовок HTTP и не имеет ничего общего с TCP потоки, к сожалению. Поток может быть зашифрован, и в этом случае я не могу проверить, является ли это HTTP, TLS или что-то еще. – WooDzu
Вам не нужно заботиться о том, зашифрованы ли данные или нет. Вы можете просто добавить данные с помощью uint32 formated ip. И когда бэкэнд получает проксированные данные, удалите добавленный ip и проанализируйте его. – Jerry
Это действительно интересная идея. Не самый чистый, но определенно стоит уйти. Спасибо Джерри – WooDzu