[GetServbyNameとGetServbyPortの関数との違いは何ですか?また、どのシナリオに適していますか? ]
PHPでは、 GetServbyNameとGetServByportは、ネットワークプログラミングに関連する2つの機能です。これらは、サービスのポート番号とサービス名の間のマッピング関係を取得するために使用され、開発者がネットワーク通信に関連する機能を処理する際に便利なクエリを提供するのに役立ちます。機能的な類似性がありますが、アプリケーションシナリオとパラメーター配信方法は異なります。
GetServbyName関数は、サービス名を介して対応するポート番号を取得するために使用されます。その基本的な構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">getservbyname</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$service</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$protocol</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
$サービス: 「http」 、 「ftp」 、 「smtp」などのサービス名を表します。
$プロトコル:プロトコルタイプ、通常は「TCP」または「UDP」を指定して、サービスが実行されるプロトコルを指定します。
この関数は、サービス名と一致するポート番号を返します。
GetServbyNameとは対照的に、 GetServByPort関数は、ポート番号を介してサービス名を取得するために使用されます。その基本的な構文は次のとおりです。
<span><span><span class="hljs-title function_ invoke__">getservbyport</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$port</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$protocol</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
$ポート:ポート番号、通常は整数値(たとえば、80、443、21など)を表します。
$プロトコル:指定されたプロトコルタイプ、通常は「TCP」または「UDP」 。
この関数は、ポート番号に一致するサービス名を返します。
両方ともgetServbyNameとgetServbyport関数を使用して、サービスとポートのマッピング関係を照会するために使用されますが、それらのコアの違いは、クエリの開始点が異なることです。
異なるクエリ方法:
GetServbyNameサービス名に基づいてポート番号を見つけます。
GetServbyPortは、ポート番号に基づいてサービス名を見つけます。
該当するさまざまなシナリオ:
サービス名(HTTP、FTPなど)を知っているが、使用するポート番号を照会する必要がある場合は、 getServbyNameを使用します。
ポート番号(80、443など)を知っているが、どのサービスがそのポートを使用しているかを知りたい場合は、 GetServbyPortを使用します。
返品値は異なります:
GetServbyNameポート番号を返します。
GetServbyPortはサービス名を返します。
サービスが使用するポートを決定します。
ネットワークサービスを開発している場合は、サービス名に基づいて対応するポート番号を照会する必要がある場合があります。たとえば、Webアプリケーションを開発するときは、HTTPサービスで使用されるポート番号(通常80)、またはHTTPSサービスで使用されるポート番号(通常443)を確認することをお勧めします。この時点でgetServbyNameを使用できます。
サンプルコード:
<span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getservbyname</span></span><span>(</span><span><span class="hljs-string">'http'</span></span><span>, </span><span><span class="hljs-string">'tcp'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"HTTP サービスのポート番号はです: <span class="hljs-subst">$port</span></span></span><span>";
</span></span>
ネットワークアプリケーション用のポート構成:
ネットワークプロトコルに関連するコードを作成する場合、ソケットバインディングまたはネットワーク通信構成のポート番号を取得する必要がある場合があります。この時点で、 GetServbyName関数を使用してポート番号を取得できます。
ポート番号でサービスを見つける:
ネットワークのトラブルシューティングまたはセキュリティ監査を実施する場合、ポート番号のみを知っているが、どのサービスではない状況に遭遇する可能性があります。現時点では、 getServbyportを使用して、ポートに対応するサービス名を取得できます。
サンプルコード:
<span><span><span class="hljs-variable">$service</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getservbyport</span></span><span>(</span><span><span class="hljs-number">80</span></span><span>, </span><span><span class="hljs-string">'tcp'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ポート 80 対応するサービスはです: <span class="hljs-subst">$service</span></span></span><span>";
</span></span>
ポート番号とサービスマッピングを処理します:
ネットワーク監視ツールまたはファイアウォールルール構成ツールを開発している場合は、ルール設定とサービス識別のために、ポート番号から対応するサービス名を取得する必要があります。この時点で、 GetServbyPortを使用してサービス名をすばやく取得できます。
GetServbyNameとGetServByportはどちらも、ネットワークサービスとポート関係を処理するための便利なツールです。適切な関数を選択すると、開発者がサービスとネットワークのデバッグを効率的に管理するのに役立ちます。
サービス名を知っていて、ポートを照会したい場合は、 GetServbyNameを使用してください。
ポート番号を知っていて、そのポートを使用してサービスを照会したい場合は、 getServbyportを使用します。
これら2つの機能の違いは、主にクエリの開始点と返された結果に反映されており、開発者は特定のニーズに応じて使用することを選択します。