저는 Linux를 처음 접했기 때문에 제 질문은 다음과 같습니다. SRV 레코드(포트 전달)에 필요한 서비스 이름을 찾는 명령이나 다른 방법(인터넷 검색 제외)이 있습니까? 저는 Teamspeak3의 뮤직 봇(Sinusbot)을 사용하고 있으며 bot.mydomain.com을 통해 봇에 액세스하고 싶습니다. 일반적인 액세스 방법은 mydomain.com:8087입니다. 의미: "_ts3", "_minecraft" 등과 같은 것이 필요하지만 가능하면 명령을 통해 찾아야 합니다)
답변1
DNS SRV 레코드는 정의된 서비스 엔드포인트를 게시하는 방법입니다. 클라이언트는 정의된 DNS 레이블을 검색하여 서비스를 찾을 수 있습니다.
여기서 핵심은 등록되었거나 적어도 서비스 사용자와 제공자 사이에 잘 알려진 "정의"입니다. 서비스를 실행하는 프로세스의 이름을 결정하는 것은 관련이 없기를 바랍니다. 수신 대기 중인 포트를 아는 것이 중요하며 lsof
주석에 제공된 참조 nick064를 사용하여 찾을 수 있습니다. Linux에서 수신 대기 포트를 결정할 때 더 일반적으로 사용되는 것은 netstat -ltunp | grep ${processname}
또는 입니다 ss -ltunp | grep ${processname}
. (${processname}은 관심 있는 실제 이름입니다.)
서비스를 실행하는 애플리케이션 또는 프로그램의 이름은 게시된 서비스 레이블과 동일할 필요는 없습니다. 다양한 프로그램이 서로 다른 환경에서 동일한 서비스를 제공할 수 있으며 DNS 레이블이라는 의미에서 동일한 서비스 이름과 연결될 수 있습니다.
각 운영자가 동일한 서비스에 대해 서로 다른 레이블을 선택하면 클라이언트가 DNS에서 무엇을 찾아야 할지 모르기 때문에 DNS SRV 레코드는 본질적으로 쓸모가 없게 됩니다.
Gareth가 언급한 것처럼 IANA는 등록된 서비스 목록(인터넷 의미에서)을 유지 관리합니다. 그 중 일부에는 연결된 DNS SRV 태그가 정의되어 있습니다. 이 목록은 공통 서비스를 IETF RFC에 편리하게 매핑한 것입니다. Teamspeak는 이 목록에 없습니다. 즉, DNS 레이블이 무엇인지 알아보려면 사용 중인 서비스의 사용자 커뮤니티에 문의해야 합니다.
RFC 3263, 섹션 4.2예시를 참고하시면 도움이 될 것 같습니다.
답변2
다음을 사용하여 모든 서비스를 찾을 수 있습니다.
service --status-all
이것을 grep하여 표시된 목록에서 검색할 수 있습니다.
service --status-all | grep pattern
이 경우 특정 프로세스를 찾아야 할 수도 있습니다.
ps aux | grep pattern
예를 들어 다음을 실행합니다.ps aux | grep "_ts3"