用c语言遍历设置待测服务器的端口号为0000-9999所有的值并存入结构体
时间: 2023-11-22 08:54:58 浏览: 39
以下是一个示例代码,它使用C语言遍历设置待测服务器的端口号为0000-9999所有的值并存入结构体:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SERVER_ADDR "127.0.0.1"
#define START_PORT 0
#define END_PORT 9999
struct port_info {
int port;
int status; // 0: closed, 1: open
};
int main(int argc, char *argv[]) {
int sockfd, status, i;
struct sockaddr_in server_addr;
struct port_info ports[END_PORT - START_PORT + 1];
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr(SERVER_ADDR);
for (i = START_PORT; i <= END_PORT; i++) {
sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
server_addr.sin_port = htons(i);
status = connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if (status == 0) {
ports[i - START_PORT].port = i;
ports[i - START_PORT].status = 1;
} else {
ports[i - START_PORT].port = i;
ports[i - START_PORT].status = 0;
}
close(sockfd);
}
for (i = 0; i <= END_PORT - START_PORT; i++) {
printf("Port %d: %s\n", ports[i].port, ports[i].status == 1 ? "open" : "closed");
}
return 0;
}
```
该代码通过循环遍历所有端口号,创建一个套接字并尝试连接到服务器的每个端口。如果连接成功,则将该端口的状态设置为“开放”,否则设置为“关闭”。最后,将所有端口的状态打印到控制台上。