Запустить сервисный демон C на определенном порту? - PullRequest
0 голосов
/ 08 декабря 2010

Мне нужно получить демон (и, возможно, его версию), который работает в определенном порту, полученном от ввода.Что-то вроде «22» -> «SSH».

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2010

Не ясно, хотите ли вы просто найти порт в локальной базе данных службы (если да, используйте ответ R ), или хотите ли вы активно исследовать порт, чтобы попытаться определить прослушивание сервис.

Если это последнее, то, вероятно, лучше всего запустить nmap против локального порта интереса.

0 голосов
/ 08 декабря 2010

Попробуйте что-то вроде этого:

#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()интерфейс, решение, которое я дал, является поточно-ориентированным и чистым для вызова из кода библиотеки.

...