2017-09-29 14 views
0

私は異なるプログラム/プロトコルからのTCP接続を受け入れるサーバーアプリケーションを作成していますが、サーバーに追加情報を渡す必要があります。私は使用されているサブドメインを通してこの情報を渡すことを考えていました。つまり、somedata.example.comのようなアドレスを使用して私のサーバに接続すると、somedataは私が必要とする追加の情報になり、私のDNSはサーバに*.example.comを指します。クライアントが自分のサーバーに接続するために使用したドメイン/サブドメインを取得することは可能でしょうか?TCPソケットからサブドメインを取得

コードサンプルは歓迎され、Goではさらに優れています。

ありがとうございます。

+2

ホスト名とサブドメインは、httpプロトコルで通信されます。それらは必ずしも任意のTCPストリームで通信されるとは限りません。 – captncraig

+0

具体的にどのプロトコルを使用していますか? tlsを使用していますか? SNIハンドシェイクに必要な情報があるかもしれません。 – captncraig

+0

私のサーバーはTCPソケットレベルで動作しています。 SNIハンドシェイクからこのデータをフェッチする方法について、おそらくあなたは興味を持っている可能性があり、同じ制限を持たない他の人のために精緻化することができますか? –

答えて

1

TCP接続は概念的には各方向のバイトストリームです。サブドメインを持つホスト名が通信される方法はありません。ほとんどのプロトコルには、必要に応じて独自の通信手段があります。例:

  • httpリクエストのヘッダーはHOSTです。
  • tls接続を開始するとき、ハンドシェイクには通常、目的のホスト名が含まれます。

標準プロトコルを使用している場合は、組み込みのメタデータ機能を使用する必要があります。

独自のカスタムバイナリプロトコルを構築している場合(私はそれを避けることはできません)、いくつかの形式でいくつかのヘッダー情報を追加することを検討することがあります。おそらくlength|desired-service-name|other-dataの標準化されたヘッダーで十分でしょう。クライアントが新しい接続の開始時にそのようなものを送信した場合、サーバーはそれを読み取り、適切に接続をディスパッチできます。

+0

ありがとう、私はこれが事実になるのではないかと心配しました。 –