2010-12-08 5 views

답변

0

시도 뭔가 :

#include <netdb.h> 

char servname[50]; 
struct addrinfo *ai; 
getaddrinfo(0, "22", 0, &ai); 
getnameinfo(ai->ai_addr, ai->ai_addrlen, 0, 0, servname, sizeof servname, 0); 
freeaddrinfo(ai); 

참고 :이 코드는 불완전하다. 오류를 확인하고 포트 번호가 원래 문자열이 아니고 정수인 경우 snprintf을 사용하여 getaddrinfo으로 전달할 소수 문자열을 만들 수 있습니다.

이전의 getservbyport() 인터페이스와 달리, 제가 제공 한 솔루션은 스레드로부터 안전하며 라이브러리 코드에서 호출하기에 깨끗합니다.

+0

문제가 있다고 생각합니다. getnameinfo는 22 또는 다른 서비스 이름 ("ssh"또는 "ftp"..)을 제공하지만 OpenSSH_5와 같이 사용중인 서비스의 실제 이름과 버전이 필요합니다. 2p1, "ssh -version"명령 또는 다른 서비스와 같은 것 같습니다. –

+0

그런 다음 포트에 연결하고 프로토콜 별 방법을 사용하여 서버 이름을 요청해야합니다. 물론 서버가 당신에게 그 이름을 기꺼이 말할 것이라는 보장은 없습니다 (그리고 틀림없이, 좋은 것들은해서는 안됩니다). –

0

로컬 서비스 데이터베이스에서 포트를 검색 할 것인지 (그렇다면 R's answer을 사용할지 여부) 또는 수신 서비스를 확인하기 위해 포트를 적극적으로 검사할지 여부는 명확하지 않습니다.

가장 좋은 방법은 로컬 포트에 대해 nmap을 실행하는 것입니다.

+0

나는 OP가 자신의'nmap '을 쓰려고하거나 알려진 취약점이있는 서버를 확인하기 위해 기존 악용 스크립트를 확장하려고 시도하고 있다고 생각합니다 ... –

관련 문제