입력에서받은 특정 포트에서 작동하는 데몬 (및 아마도 그 버전)을 얻었습니다. "22"-> "SSH"와 같은 것.특정 포트에서 C로 실행중인 서비스 데몬을 얻으시겠습니까?
어떻게하면됩니까? 이 같은
입력에서받은 특정 포트에서 작동하는 데몬 (및 아마도 그 버전)을 얻었습니다. "22"-> "SSH"와 같은 것.특정 포트에서 C로 실행중인 서비스 데몬을 얻으시겠습니까?
어떻게하면됩니까? 이 같은
시도 뭔가 :
#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()
인터페이스와 달리, 제가 제공 한 솔루션은 스레드로부터 안전하며 라이브러리 코드에서 호출하기에 깨끗합니다.
문제가 있다고 생각합니다. getnameinfo는 22 또는 다른 서비스 이름 ("ssh"또는 "ftp"..)을 제공하지만 OpenSSH_5와 같이 사용중인 서비스의 실제 이름과 버전이 필요합니다. 2p1, "ssh -version"명령 또는 다른 서비스와 같은 것 같습니다. –
그런 다음 포트에 연결하고 프로토콜 별 방법을 사용하여 서버 이름을 요청해야합니다. 물론 서버가 당신에게 그 이름을 기꺼이 말할 것이라는 보장은 없습니다 (그리고 틀림없이, 좋은 것들은해서는 안됩니다). –
로컬 서비스 데이터베이스에서 포트를 검색 할 것인지 (그렇다면 R's answer을 사용할지 여부) 또는 수신 서비스를 확인하기 위해 포트를 적극적으로 검사할지 여부는 명확하지 않습니다.
가장 좋은 방법은 로컬 포트에 대해 nmap
을 실행하는 것입니다.
나는 OP가 자신의'nmap '을 쓰려고하거나 알려진 취약점이있는 서버를 확인하기 위해 기존 악용 스크립트를 확장하려고 시도하고 있다고 생각합니다 ... –
무엇? 여기있는 사람들은 도움이되지만 투시가 아닙니다. 질문을 실제 질문에 접근하여 편집하십시오. – Duck