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/passwd
.files
passwd
다른 형태의 데이터베이스를 가질 수도 있습니다. GNU 시스템에서 다음이 있는 경우xyz
나열된 데이터베이스는 libnss_xyz.so
요청 시 로드된 공유 라이브러리를 사용하여 쿼리됩니다.
또한 files
일반적인 것에는 db
,,,... 가 포함됩니다.nis
nisplus
ldap
단순 배포에는 일반적 files
으로 /etc/services
.