2011-12-13 4 views
2

시작 스크립트의 일부로 특정 TCP 서비스가 실제로 가동되고 있는지 확인해야합니다. 설정 파일을 읽음으로써 대상 호스트와 서비스 이름을 알 수 있습니다. 나는 nc을 사용하여이 서비스에 샘플 요청을 보내려고했는데 사용 방법을 잘 알고 있기 때문에 문제는 nc이 내 구성의 서비스 이름을 포트 번호로 확인할 수 없음을 나타냅니다.bash resolve 서비스 이름

서비스 이름을 포트 번호로 해석 할 수있는 bash 내장형 또는 일반적으로 배포되는 유틸리티 (부품 또는 RHEL 5 배포판)가 있습니까? 대신 스크립트에서 사용할 수있는 netcat 이외의 간단한 유틸리티가 있습니까?

+0

당신은 socat을 고려해야합니다. –

+0

@ jørgensen 앞으로의 사용을 위해 확실히 확인해 보겠다.하지만 대상 시스템에서는 사용할 수 없으며 서비스를 배포 할 때의 고통은 서비스 파일에서 포트 번호를 그릴 때의 최악의 경우보다 훨씬 나 빠질 것이다. – Hoons

답변

7

getent은 원하는 것입니다. 예를 들어

: getent services ftp

당신은 어쨌든 출력을 구문 분석해야합니다,하지만 당신은 포트가 있습니다.

+0

출력을 구문 분석하지 않기를 정말로 바랬습니다 ...하지만이 시점에서 가장 좋은 옵션 인 것 같습니다. – Hoons

1

시스템에 /etc/services 파일이 있습니까? 아마도 모든 휴대용 프로그램 (nc, getent 및 많은 다른 프로그램 포함)은 getservbyname(3)을 사용하여 지정된 서비스 이름의 포트 번호를 확인할 수 있습니다. 그 함수는 /etc/services 파일에서 데이터를 읽습니다.

+0

**/etc/services ** 파일이 있으며이 파일에 포함 된 내용을 알고 있습니다. 나는 특히 내가 필요로하는 가치를 grepping하는 것을 피하고 그것을 파싱하는 것을 피하고자한다. – Hoons

+1

아무것도 그릴 필요가 없습니다. 표준 libc는'getservbyname' 함수를 사용합니다. 그리고 내가 말했듯이 거의 모든 프로그램은이 함수를 사용하여 주어진 서비스에 대한 포트 번호를 얻습니다. 그리고'nc'도! 지금은 일시적으로 시스템에서/etc/services를 제거했으며'nc'는 서비스를 이름으로 해석 할 수 없었습니다. 예를 들어,'nc localhost ssh' 명령은'잘못된 포트 ssh : 해당 파일이나 디렉토리가 없습니다'라고합니다./etc/services 파일을 복원 할 때 참조 된 명령이 성공적으로 실행될 수 있습니다. 따라서/etc/services 파일의 내용이 올바른지 여부 필요한 서비스 이름이 포함되어 있습니까? –

+0

나는'getservbyname' 함수와'/ etc/services' 파일이하는 역할에 대해 알고 있습니다. 불행하게도 우리 서버 (1.84)에 설치된 nc 버전은 서비스를 해결하지 못합니다 :'nc localhost ssh'는'nc : port range not valid'를 리턴하고'getservbyname'은 22를 리턴합니다. 버전 내가 사용할 수있는'nc'의 – Hoons

관련 문제