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.