如何扫描网络中的给定端口号(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的向量。现在我将逐个扫描每一个给定的端口。下面的函数是针对windows,在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 :(得分:0)
您使用的是错误的程序。只需阅读netstat的输出。
答案 1 :(得分:0)
使用nmap。
或者在循环中,使用非阻塞套接字调用“connect”到每个端口。保存您收集的所有文件描述符,使用“select()”确认它们是否已连接;