0
C++で単純なポートスキャナを構築したいと思います。ただし、ソケットのタイムアウトを1に設定すると、プログラムは次のポートをテストするよりもずっと時間がかかります。私は何か間違っているのですか?その名前があなたに提案する必要があるとしてsetsockoptはC++では動作しません(タイムアウトは1に設定され、それ以上待ちます)
#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <fstream>
#include <unistd.h>
#include <errno.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/time.h>
int main()
{
int socketFileDescriptor;
struct sockaddr_in server_address;
for (int i=3000; i<65535; i++)
{
std::cout<<i<<std::endl;
socketFileDescriptor = socket(AF_INET,SOCK_STREAM, 0);
struct timeval tv;
tv.tv_sec = 1;
if (setsockopt(socketFileDescriptor, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0)
{
perror("Error");
}
server_address.sin_family = AF_INET;
server_address.sin_port = htons(i);
inet_pton(AF_INET,"212.182.24.27", &(server_address.sin_addr));
int result = connect(socketFileDescriptor,
(struct sockaddr*)&server_address,sizeof(struct sockaddr));
if (result != -1)
{
std::cout<<"Port: "<<i<<std::endl;
}
close(socketFileDescriptor);
}
}
'timeval'構造体全体を初期化していないことがわかりました。 'tv_usec'の値をゼロにして再試行する必要があります。 'tv_sec'を設定する前に宣言時に構造体をゼロ初期化するか、明示的に各メンバを設定してください。 – paddy