如何扫描网络中的给定端口号(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);