gpt4 book ai didi

c - ICMP 套接字(赢)

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

我想制作一个程序作为检查网,如果地址向上,则返回 1;如果地址向下,则返回 0。代码如下:

#include <stdio.h>
#include <winsock2.h>
#include <stdint.h>
#pragma comment(lib, "ws2_32.lib")

static void init(void)
{

WSADATA wsa;
int err = WSAStartup(MAKEWORD(2, 2), &wsa);
if(err < 0)
{
puts("WSAStartup failed !");
exit(EXIT_FAILURE);
}

}

static void end(void)
{

WSACleanup();

}

int chknet(char * ip)
{
struct sockaddr_in name;
struct hostent * hent;
int sock;
int retour = 0;
init();
/* creat socket icmp */
if(!(sock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP))) return (-1);
memset(&name,0,sizeof(struct sockaddr_in));
name.sin_family = AF_INET;
name.sin_addr.s_addr = inet_addr(ip);
if(connect(sock,(struct sockaddr *) &name,sizeof(struct sockaddr))==0) retour = 1;
else retour = 0;

end();
return(retour);
}
// Fonction main ***************************
int main(int argc, char *argv[])
{
char *adress="www.stackoverflow.com";
int a= chknet(adress);
printf("result %d\n",a);
system("PAUSE");

}

当我连接到互联网时,它返回 1,但即使我没有连接,它也会返回 1,但它应该返回 0。谢谢

最佳答案

您正在将字符串“www.stackoverflow.com”传递给函数inet_addr()。此函数需要一个“IPv4 数字和点表示法”地址,例如 151.101.1.69 - 因此您需要首先使用 gethostbyname().

检查您调用的函数的返回码总是一个好主意...

关于c - ICMP 套接字(赢),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39777088/

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