SSや他のネットワークプログラムはどのようにポート番号からポート名を見つけますか?

SSや他のネットワークプログラムはどのようにポート番号からポート名を見つけますか?

SS、netstat、tcpdumpなどのプログラムは、すべてポートを識別するとポート番号を名前に変換します。したがって、例えば、ポート22の接続は「ssh」で示される。

このマッピングがどのように実行されるかを知りたいです。私はこれらのプログラムがそれぞれハードコーディングされたマッピングのリストを持っていないと仮定していますか?ネットワーク内のポート番号を名前にマッピングするのに役立つ中央プログラムまたはサービスはありますか?

関連する質問、同じLinuxバージョン(6.9、少し古いバージョン)でSSを実行すると、他の動作が発生します。仮想マシンで同じOSを使用しているベアメタルのポート11001にプログラムをリストし、ポートがMetasysとしてリストされているコマンド「ss -a」をテストしています。この問題を解決するには、スクリプトを変更するのは十分簡単ですが、なぜあるサービスがポート11001を認識し、他のサービスが認識されないのか疑問に思います。

ベストアンサー1

通常、getservbyport()APIを使用するとネームサービス額縁。

これは、IPアドレスをホスト名、ユーザー名をユーザーIDなどで解決するのと同じ機能系列です。

getservbyport()/etc/nsswitch.confアイテムを取得するためにデータベース(各カテゴリに使用するデータベースを一覧表示する)を調べるのが一般的ですservices

エントリがservices表示されると、ファイルは前述files/etc/services(ユーザーデータベース)と同様にプレーンテキストファイルとして使用されます/etc/passwdfilespasswd

他の形式のデータベースを持つこともできます。 GNUシステムに以下がある場合xyzリストされたデータベースは、libnss_xyz.so要求時にロードされた共有ライブラリを使用して照会されます。

また、files一般的なものにはdb、、、、...が含まれます。nisnisplusldap

単純な展開にはfiles通常/etc/services

おすすめ記事