TTL bei Sockets einstellen in C
-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum C (C89 und C99) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Homie schrieb:
WinAPI - Benutze PellesC
Ich glaube die haben die Raw Sockets beschnitten.. Welches Protokoll soll denn genutzt werden?
-
Es handelt sich um ein Programm welches TCP Verdingungen zu bestimmten Ports aufbauen soll. Die Ports und Ziel IP werden vom User eingegeben.
Durch weitere Funktioen soll eine Art Traceroute entstehen. Dafür muss ich allderdings die TTL's verändern können
-
Ich glaube mit TCP Sockets geht das nicht..
http://www.codeproject.com/KB/IP/traceroutes.aspx
Hilft das vielleicht?
-
Das muss gehen sonst muss ich Chef sagen es geht nicht
wäre net so dolleDer Quellcode hilft mir leider nicht weiter. Sehe nicht wo er TTL's editiert
-
Hier hat es geklappt:
http://www.gamedev.net/topic/143021-changing-ip-header-ttl-with-winsock/
-
IF(Das Klappt)
{ Du bist ein Gott !!! }Leider noch nicht
Meine neue eingabe im Quellcode:
int value = 128; //this should be something you want to set for TTL
setsockopt (s, SOL_IP, IP_TTL, value, sizeof(value));Ausgabe des Compilers
Programm.c(66): error #2048: Undeclared identifier 'SOL_IP'.
Programm.c(66): error #2140: Type error in argument 4 to 'setsockopt'; expected 'const char *' but found 'int'.
-
Probier mal SOL_SOCKET und &value. (&value muss dann gecastet werden, ich frage mich zwar wie das funktionieren soll, aber in dem verlinkten Thread hats ja offensichtlich geholfen..)
-
Danke das Löst schon mal das eine Prob.
Frag mich aber wieso, da auch auf dieser Homepage das eig anders aussieht:
http://www.cems.uwe.ac.uk/~irjohnso/linsock/Book Notes/Appendices/Data Tables/IP-Level Socket Options.htmlDieses ist noch über
Programm.c(95): error #2140: Type error in argument 4 to 'setsockopt'; expected 'const char *' but found 'int *'.
-
Wie gesagt, caste einfach.
setsockopt(s, SOL_SOCKET, IP_TTL, (const char*)&value, sizeof(value));Aber ob das dann auch funktioniert

Also ich glaube wie gesagt eigentlich immer noch, dass das mit TCP Sockets nicht geht. Da wirste wohl etwas mehr Arbeit reinstecken müssen.
-
mit casten gibts zwar keine Fehler, dafür bringt das nix.
Wenn ich nen Verinbung zu Google an Port 80 mit nem TTL von 1 aufbauen kann obwohl ich in nem Uni Netz bin dann passt was net.
-
Homie schrieb:
mit casten gibts zwar keine Fehler, dafür bringt das nix.
Wenn ich nen Verinbung zu Google an Port 80 mit nem TTL von 1 aufbauen kann obwohl ich in nem Uni Netz bin dann passt was net.
Wie gesagt, du brauchst vermutlich Raw Sockets.
-
SetIpTTL
-
Ihr habt doch alle keine Ahnung!!!
-
http://msdn.microsoft.com/en-us/library/ms738586(v=vs.85).aspx
IPPROTO_IP Socket Options
IP_TTLChanges the default value set by the TCP/IP service provider in the TTL field of the IP header in outgoing datagrams. IP_TTL support is not required; to check whether IP_TTL is supported, use getsockopt to get current options. If getsockopt fails, IP_TTL is not supported.
-
cooky451 schrieb:
Wie gesagt, caste einfach.
setsockopt(s, SOL_SOCKET, IP_TTL, (const char*)&value, sizeof(value));Aber ob das dann auch funktioniert

Also ich glaube wie gesagt eigentlich immer noch, dass das mit TCP Sockets nicht geht. Da wirste wohl etwas mehr Arbeit reinstecken müssen.
So:
setsockopt(s, IPPROTO_IP, IP_TTL, (const char*)&value, sizeof(value));Aber eins oben kannst du sehen was MS noch dazu schreibt.
-
[quote="-lowbyte-"]
cooky451 schrieb:
So:
setsockopt(s, IPPROTO_IP, IP_TTL, (const char*)&value, sizeof(value));Danke, der klappt.
Und schon wieder bin ich beim nächsten Prob. Könntest du mir die Liste zubekommen lassen in der du das nachschaust ? Im jetzigen Fall muss ich die Time-outs editieren da i.was um 20 sek viel zu lang ist
Danke homie
-