我在 Linux 中制作了一个简单的 C 端口扫描程序。主要算法是尝试调用connect,如果它返回-1,我无法连接,否则我连接了主机。这在我的电脑上运行良好,它列出了我的开放端口。但是,在我家有另一台计算机(在与我相同的路由器后面),我给它的 IP 但程序挂起。我尝试了 google.com、facebook.com 或任何其他网站,但他们甚至没有响应第一个请求。我究竟做错了什么?
编辑:
for(port=0; port<=65536; port++)
{
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr = *((struct in_addr *)he->h_addr);
memset(&(addr.sin_zero), '\0', 8);
if (connect(sockfd, (struct sockaddr *)&addr, sizeof(struct sockaddr)) == -1) {
printf("%i closed\n", port);
close(sockfd);
}
else {
printf("%i open\n", port);
close(sockfd);
}
}