tcphdr __FAVOR_BSD problem



  • Hey zusammen,

    wollte gerade ein netzwerk tool schreiben und stieß bei folgenden code auf probleme:

    tcp->th_sport = htons(sport);
     tcp->th_dport = htons(dport);
     tcp->th_seq = rand() + rand();
     tcp->th_ack = rand() + rand();
     tcp->th_off = 5;
     tcp->th_flags = flags;
     tcp->th_win = htons(2048);
     tcp->th_sum = in_cksum((unsigned short *)pseudo, sizeof(struct tcphdr) + 
                           sizeof(struct pseudohdr) + datalen);
    

    Es wurde moniert, dass die member nicht in der struktur vorhanden wären. Jedoch steht in der tcp.h, dass wenn __FAVOR_BSD definiert ist, ich die bsd header verwenden kann.

    Hier meine präprozessor anweisungen:

    #define   __FAVOR_BSD		1		
    #define   __BSD_SOURCE      1
    #define   __USE_BSD			1
    
    #define   WAIT_SEC			4		// Time to wait for an answer (sec)
    #define   WAIT_USEC			0		// Time to wait for an answer (msec)
    
    #define   CONSCAN			10		// Connect scan
    #define   SYNSCAN			20		// Tcp stealth (syn) scan
    #define   FINSCAN			30		// Tcp fin scan
    #define   XMASSCAN			40   	// Tcp xmas scan
    #define   NULLSCAN			50   	// Tcp null scan
    
    #define   OPEN              2   	// Return-value for an open port
    #define   CLOSE             3   	// Return-value for a closed one
    
    #define   MIN_PORT			1		// default starting ports to scan
    #define   MAX_PORT			65534	// default ending ports to scan
    

    Obwohl ich __FAVOR_BSD definiert hab, scheint er es nicht zu akzeptieren.

    Wo liegt der fehler?

    Danke



  • Ich hoffe mal, diese #define's (für den Moment speziell das erste) stehen VOR der #include "tcp.h" - andernfalls wäre es nämlich nutzlos 😉 (der Präprozessor und Compiler bearbeiten deine Source-Files von oben nach unten)

    (wenn du ganz sicher sein willst, daß das Makro rechtzeitig angelegt wird, übergib es doch direkt dem Compiler (je nach System in die Projektoptionen eintragen oder per "/D__FAVOR_BSD" beim Compilieren angeben))



  • Meine defines stehen vor den include-anweisungen. trotzdem kommen die fehler. Ja, habe bisher immer mit gcc -o foo foo.c -D_BSD_SOURCE kompiliert, wollte aber, dass der kompiliervorgang durch das weglassen des arguments vereinfacht wird.


Anmelden zum Antworten