gpt4 book ai didi

c - 如何检查远程UDP端口是否打开? C

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:25 26 4
gpt4 key购买 nike

<分区>

测试TCP很容易,那么UDP呢?这里:Check if OpenVPN UDP Port is open我读到这是不可能的。但是,这里:How to retrieve both TCP and UDP ports with Nmap?事实证明 nmap 可以做到这一点,所以我认为这是可能的。

我写了一段很简单的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(int argc, char **argv)
{
char * ip_addr;
int port;

int sockfd;
struct sockaddr_in server_addr;

if (argc != 3)
{
fprintf(stderr,"Usage: %s IP port \n", argv[0]);
exit(1);
}

ip_addr = argv[1];
port = atoi(argv[2]);

if (port <= 0)
{
fprintf(stderr,"error: invalid port\n");
exit(1);
}

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}

server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
inet_aton(ip_addr, &server_addr.sin_addr);

char msg[] = "Just a text\n";
char buffer[255];
int recv_size, send_size;

if ((send_size = sendto(sockfd, msg, strlen(msg), 0, (struct sockaddr*) &server_addr, sizeof(server_addr))) < 0)
{
close(sockfd);
if (errno != 0)
{
perror("send");
exit(1);
}
}else if(send_size == 0)
{
printf("sent\n");
}
else if (send_size > 0)
{
printf("sent\n");
}

if ((recv_size = recvfrom(sockfd, buffer, 255, 0, NULL, NULL)) == 0)
{
close(sockfd);
if (errno != 0)
{
perror("recv");
exit(1);
}
}

buffer[recv_size] = '\0';

close(sockfd);


return 0;
}

但它什么也不打印,只是结束。所以很难说发生了什么,端口是否打开。有没有简单的方法,使用套接字,来测试远程UDP端口是否打开?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com