c # — ZeroMQ / NetMQ — возможно ли определить исходный порт «клиента»?

Я использую связь на основе ZeroMq и NetMQ (та же проблема в обоих проектах)

У меня есть приложения, работающие за огненными стенами,

на стороне сервера легко определить, какие порты открывать для входящего трафика,

однако на стороне клиента кажется, что я могу указать только целевой адрес (сервер a.k.a) и порт.

Можно ли определить, какой порт будет использоваться для исходящего трафика в клиентском приложении.

например (в NetMQ)

      using (NetMQContext ctx = NetMQContext.Create())
{
using (NetMQSocket snapshot = ctx.CreateSocket(ZmqSocketType.Dealer))
{
// connect to remote address, no place to specify outbound port
snapshot.Connect("192.168.1.10:5555");
}
}

В простом сценарии общения у нас есть сервер и клиент

сервер работает на компьютере A (192.168.1.10) — и прослушивает порт 5555

Клиент работает на компьютере B (192.168.1.9) — и инициирует связь с сервером (A)

если мы посмотрим на информацию о клиенте, мы увидим, что система выделена
порт XXXXX (например, 51234) и его исходящий порт 192.168.1.10:5555

в большинстве случаев порт XXXXX выделяется системой (свободный порт), однако в некоторых
в крайних случаях порт XXXXX должен быть определенным портом (из-за экстремальной среды безопасности)

0

Решение

Как вы указали в своем обновлении, порт источника обычно выделяется системой. Я нашел какое-то конкретное сообщение ZMQ по этому вопросу:

По этой ссылке Существует некоторое обсуждение того, как исходный IP-адрес и исходный порт могут быть указаны в протоколе ZMQ — люди, которые здесь говорят, — это основная команда разработчиков, поддерживающая ZMQ (в частности, Питер Хинтдженс, «основавший» ZMQ), так что вы можете сделать следующее он не был реализован год назад.

Далее, здесь вы можете видеть, что это в конечном итоге было реализовано в апреле этого года … если у вас есть последняя версия ZMQ, и ваша привязка не имеет каких-либо особенностей, которые бы блокировали эту функциональность, вы сможете это сделать, если будете следовать этим рекомендациям.

В частности, это будет выглядеть примерно так:

snapshot.Connect("192.168.1.9:51234;192.168.1.10:5555");

Опять же, это может или не может быть изменено вашей привязкой.

1

Другие решения

это не поддерживается в NetMQ, если вы хотите попробовать перенести функцию из zeromq, она не должна быть сложной, и я могу вам помочь.

0

По вопросам рекламы [email protected]