Ich wollte ein Programm als CheckNet machen, wenn die Adresse oben ist Rückkehr 1, wenn es Rückkehr 0. Hier unten ist der Code:ICMP-Buchse (win)
#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");
}
Als ich mit dem Internet verbunden bin es gibt 1 zurück, aber selbst wenn ich es nicht zu 1 verbunden bin zurück, aber es sollte 0 THX
aber ich bin ein 1 in dem beiden Fällen bekommen. Zum Beispiel, wenn ich in der Adresse = "12.2" mache, wird es 1 zurückgeben. Jedoch gibt es keine solche Adresse in meinem Netzwerk. – Tarik
Es ist möglich, dass 'connect()' wegen eines zufälligen Wertes in 's_addr' ok ist. Wie wäre es mit einer tatsächlichen Adresse von etwas in Ihrem lokalen Netzwerk? Und überprüfen Sie den tatsächlichen Wert der zurückgegebenen Fehlercodes, vielleicht Drucken sie mit 'perror()'. Sonst raten Sie nur. – gilez
Können Sie den Code explizit angeben? Thx viel – Tarik