gpt4 book ai didi

c - 如何添加扫描端口ip

转载 作者:行者123 更新时间:2023-11-30 16:19:35 25 4
gpt4 key购买 nike

我用扫描所有IP编码扫描服务器和客户端我使用套接字/C但我不明白如何为结构中的 IP 之一添加扫描端口我的扫描端口有问题我的显示错误,他没有显示任何打开的内容问题是没有显示服务器中打开的任何端口。我找不到任何解决方案我需要帮助

#include <netdb.h> 
#include "stdio.h"
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#define MAX 80
#define PORT 8080
#define SA struct sockaddr

// Driver function
int main()
{
int sockfd, connfd, len ,start , end,err;
struct sockaddr_in servaddr, cli;
struct sockaddr_in addr_remote;
char ips[2][20];
char hostname[30];

// socket create and verification
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr, sizeof(servaddr));

// assign IP, PORT
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(PORT);

// Binding newly created socket to given IP and verification
if ((bind(sockfd, (SA*)&servaddr, sizeof(servaddr))) != 0) {
printf("socket bind failed...\n");
exit(0);
}
else
printf("Socket successfully binded..\n");

// Now server is ready to listen and verification

if ((listen(sockfd, 5)) != 0) {
printf("Listen failed...\n");
exit(0);
}
else
printf("Server listening..\n");
len = sizeof(cli);

// Accept the data packet from client and verification
for(int i=0;i<2;i++){
connfd = accept(sockfd, (SA*)&addr_remote, &len);
if (connfd < 0) {
printf("server acccept failed...\n");
exit(0);
}
else
printf("server acccept the client...\n");
strcpy(ips[i], inet_ntoa(addr_remote.sin_addr));
}

// Display Ip
for(int i=0;i<2;i++){
printf("%s \n",ips[i]);}


// Scan PORT

//Get the hostname to scan
printf("Enter hostname or IP : ");
gets(hostname);

//Get start port number
printf("Enter start port number : ");
//To Handle the Input
int data;
data = scanf("%d",&start);

//Get end port number
printf("Enter end port number : ");
int data2 = scanf("%d" , &end);
int j;
//Start the port scan loop
printf("Starting the portscan loop : \n");
for( j = start ; j <= end ; j++)
{
//Fill in the port number
servaddr.sin_port = htons(j);

//Connect using that socket and sockaddr structure

err =connect(sockfd, (SA*)&servaddr, sizeof(servaddr));
if( err < 0 )
{
//printf("%s %-5d %s\r" , hostname , i, strerror(errno));
fflush(stdout);
}
//connected
else
{
printf("%-5d open\n", j);
}
}

// After chatting close the socket
close(sockfd);
}

最佳答案

当对等方根本不响应连接请求时,不仅有“打开”和“关闭”状态,还有“已过滤”状态。当主机根本无法访问时,或者当某个端口或端口范围由于数据包过滤规则而被丢弃时,可能会发生这种情况。

您可以等待 connect() 超时(可能需要几分钟),或者切换到非阻塞连接:

fcntl(sockfd, F_SETFL, O_NONBLOCK);

现在,connect() 调用将立即返回,您可以使用以下命令在文件描述符上调用 select()poll()任意超时以加快扫描速度。

此外,您可以通过这种方式并行扫描多个端口,从而显着加快总扫描时间。

然而,真正高效的扫描器在原始套接字上运行,创建 SYN 数据包并解析回复。

关于c - 如何添加扫描端口ip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55593346/

25 4 0
文章推荐: c - 如何从 .t​​xt 文件读取文本,然后将其存储在记录(数据结构)中?
文章推荐: c# - Linq to SQL 中的多值比较
文章推荐: c# - 使用