Самый быстрый способ поиска открытого порта в сети

Как я могу найти данный порт (скажем, 8000) в сети?
Я попробовал это с использованием общих сокетов TCP-соединения. хотя это работает, это занимает много времени, если число живых ip больше 15. Цель состоит в том, чтобы получить список ip из сети, у которой данный порт открыт.
Вот так я получаю список IP из моей сети

    std::vector<std::string> resultIPList;
FILE* pipe = popen("arp-scan --localnet","r");
if(!pipe)
{
fprintf(stderr,"Unable to open pipe");
return resultIPList;
}
char buffer[128];
while(!feof(pipe))
{
if(fgets(buffer, 128, pipe) != NULL)
{
stringBuffer += buffer;
}
}
pclose(pipe);

Теперь у моего stringBuffer есть список ip. Я написал парсер, который извлекает ip из строки и дает мне вектор этих ip. Теперь я буду сканировать каждого из них по одному для данного порта. Функция ниже для окон, в Linux я делаю то же самое, используя boost :: asio

    struct sockaddr_in client;
int sock;
client.sin_family      = AF_INET;
client.sin_port        = htons(portNo);
client.sin_addr.s_addr = inet_addr( Ip.c_str() );
sock = (int) socket(AF_INET, SOCK_STREAM, 0);
return (::connect(sock, (struct sockaddr *) &client,sizeof(client)) == 0);

0

Решение

Вы используете не ту программу. Просто прочитайте вывод netstat.

0

Другие решения

Используйте nmap.

Или в цикле, вызовите «connect» для каждого порта, используя неблокирующие сокеты. Сохраните все дескрипторы файлов, которые вы собираете, проверьте, подключены ли они, используя «select ()»;

0

По вопросам рекламы [email protected]