用C++实现udp扫描端口
时间: 2023-07-18 12:09:34 浏览: 112
下面是一个用C++实现UDP端口扫描的示例代码:
```c++
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define BUF_SIZE 1024
int main(int argc, char *argv[]) {
if (argc != 3) {
std::cerr << "Usage: " << argv[0] << " <IP> <PORT>" << std::endl;
exit(1);
}
int sockfd;
struct sockaddr_in server_addr, client_addr;
char buf[BUF_SIZE];
// 创建socket
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0) {
perror("socket error");
exit(1);
}
// 准备服务器地址
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(atoi(argv[2]));
if (inet_pton(AF_INET, argv[1], &server_addr.sin_addr) != 1) {
perror("inet_pton error");
exit(1);
}
// 绑定本地地址
memset(&client_addr, 0, sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_port = htons(0);
client_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(sockfd, (struct sockaddr *)&client_addr, sizeof(client_addr)) < 0) {
perror("bind error");
exit(1);
}
// 设置超时时间
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
if (setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) < 0) {
perror("setsockopt error");
exit(1);
}
// 发送UDP数据包
if (sendto(sockfd, buf, strlen(buf), 0, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
perror("sendto error");
exit(1);
}
// 接收UDP数据包
socklen_t addrlen = sizeof(client_addr);
int n = recvfrom(sockfd, buf, BUF_SIZE, 0, (struct sockaddr *)&client_addr, &addrlen);
if (n < 0) {
perror("recvfrom error");
exit(1);
} else {
std::cout << "Port " << atoi(argv[2]) << " is open." << std::endl;
}
close(sockfd);
return 0;
}
```
这个示例中,我们使用了socket()函数创建了一个UDP Socket,并将其绑定到本地地址。然后设置了一个超时时间,发送UDP数据包,然后等待接收服务器返回的数据包。如果在超时时间内收到了数据包,就说明这个端口是打开的。否则,就说明这个端口是关闭的。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)