Find antal servere

Tags:    c++

Hej.
Jeg er i gang med at lave et program som kan tælle antallet af servere som en meddelelse kommer forbi, før den når frem til modtageren, via at bruge rawsockets og TTL.
Men jeg støder ind i et problem når jeg kalder "setsockopt(*s, IPPROTO_IP, IP_HDRINCL, (char *)&bOpt, sizeof(bOpt))" da dette returnerer en SOCKET_ERROR, med værdien 10022, så hvad gør jeg galt?
koden er som følger:
Fold kodeboks ind/udKode 




10022 betyder: "Der blev angivet et ugyldigt argument."
Måske skal bOpt være en DWORD?



10022 betyder: "Der blev angivet et ugyldigt argument."
Måske skal bOpt være en DWORD?

Ja det løste problemet, men nu får jeg en fejl ved "sendto(*s, datagram, sizeof(datagram), 0, (SOCKADDR *)sin, sizeof(*sin))" hvoraf jeg får SOCKET_ERROR med værdien 10004.
ifølge msdn er det noget med at en blokeringsoperation var blokeret af et kald til "WSACancelBlockingCall", hvilket ikke siger mig særlig meget??



Jeg er ikke sikker på at jeg forstår den besked i denne sammenhæng.

Beskeden får man typisk hvis man har lavet en læsning der er sat til at blokere indtil man har fået det man ønsker, men nogen har kaldt WSACancelBlockingCall, inden data blev modtaget, hvilket typisk gøres for at lukke for socket'en

Jeg kan godt kikke på det hvis du sender mig hele sourcen.



Her er sourcen (sendto er i Sending funktionen):
Fold kodeboks ind/udKode 

Hvis det skulle have betydning, så er headeren (ip.h) her:
Fold kodeboks ind/udKode 




Jeg ved det ikke, jeg forsøgte at køre programmet, men bliver ved med at få fejl 10049 ("Adressen, der blev anmodet om, er ikke gyldig i sin kontekst.")

Er du sikker på at dette er rigtigt?
iph->ip_ttl = (unsigned char)"5";

Jeg ville have forventet:
iph->ip_ttl = '5';

Eller blot:
iph->ip_ttl = 255

Betyder ttl ikke TimeToLive?



Jeg ved det ikke, jeg forsøgte at køre programmet, men bliver ved med at få fejl 10049 ("Adressen, der blev anmodet om, er ikke gyldig i sin kontekst.")

Er du sikker på at dette er rigtigt?
iph->ip_ttl = (unsigned char)"5";

Jeg ville have forventet:
iph->ip_ttl = '5';

Eller blot:
iph->ip_ttl = 255

Betyder ttl ikke TimeToLive?

ja det er Time To Live, og der skulle bare stå 255, jeg blev bare lidt forvirret da jeg så at ip_ttl havde formen unsigned char.
Det løser dog stadig ikke problemet, desuden ved jeg ikke hvordan du får 10049, jeg får konstant fejlen 10004, også efter at have ændret til "iph->ip_ttl = 255".
Det kunne muligvis være fordi der står at afsenderen er "192.168.0.128" hvilket muligvis ikke er din ip, ellers har jeg har ingen anelse om hvad problemet er...?

[Redigeret d. 15/08-05 23:33:43 af Andreas]



t