0

私は ZeroMq と NetMQ に基づく通信を使用しています (両方のプロジェクトで同じ問題)

ファイアウォールの背後でアプリケーションを実行していますが、

サーバー側では、受信トラフィック用に開くポートを簡単に定義できます。

ただし、クライアント側では、ターゲット(別名サーバー)のアドレスとポートのみを指定できるようです。

クライアント アプリでアウトバウンド トラフィックに使用するポートを定義することは可能ですか。

たとえば(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 ポートは特定のポートである必要があります (極端なセキュリティ環境のため)。

4

2 に答える 2

1

更新で述べているように、ソースポートは通常システムによって割り当てられます。この問題に関するZMQ固有の通信を見つけました:

このリンクでは、ZMQ プロトコルでソース IP とソース ポートを指定する方法についていくつかの議論があります。このことから、1 年前の時点では実装されていませんでした。

さらに、ここでは、最終的に今年の 4 月に実装されたことがわかります... ZMQ の最新バージョンがあり、バインディングにこの機能をブロックする特異性がない限り、次のことができるはずです。これらのガイドラインに従っている場合は、それを行ってください。

具体的には、次のようになります。

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

繰り返しますが、これはバインディングによって変更される場合と変更されない場合があります。

于 2014-09-24T20:49:59.397 に答える
0

これは NetMQ ではサポートされていません。必要に応じて、この機能を zeromq から移植してみてください。複雑ではないはずです。私がお手伝いします。

于 2014-09-24T21:59:30.513 に答える