2017-04-07 4 views
0

Ich versuche, dieses Projekt (https://github.com/alfchen/QoETrafficAnalyzer) in Windows 7 mit Cygwin zu kompilieren. Unter Linux habe ich kein Problem, aber ich brauche es in Windows. Ich habe winpcap installiert, indem ich die folgenden Schritte befolge: help installing libpcap on cygwin. Ich habe jedoch immer noch Probleme. Ich weiß, dass das Projekt arpa/inet.h verwendet und unter Windows muss man winsock2.h verwenden, aber das zu ändern, löst nichts. Im Moment habe ich den folgenden Fehler. Ich hoffe, dass mir jemand helfen kann.Fehler beim Kompilieren eines Projekts mit Cygwin

$ make 
g++ -c tcpflowstat.cpp -Wno-deprecated -I include/ -o tcpflowstat.o 
tcpflowstat.cpp: En la función miembro static ‘static int TCPFlowStat::isNewFlow(std::string, std::string, tcphdr*)’: 
tcpflowstat.cpp:33:17: error: ‘struct tcphdr’ has no member named ‘syn’ 
    if (tcphdr->syn==1 && tcphdr->ack!=1) return 1; 
       ^
tcpflowstat.cpp:33:35: error: ‘struct tcphdr’ has no member named ‘ack’ 
    if (tcphdr->syn==1 && tcphdr->ack!=1) return 1; 
           ^
tcpflowstat.cpp: En la función miembro ‘int TCPFlowStat::isMyPacket(std::string, std::string, tcphdr*)’: 
tcpflowstat.cpp:39:31: error: ‘struct tcphdr’ has no member named ‘source’ 
      && cltport==tcphdr->source && svrport==tcphdr->dest) \ 
          ^
tcpflowstat.cpp:39:58: error: ‘struct tcphdr’ has no member named ‘dest’ 
      && cltport==tcphdr->source && svrport==tcphdr->dest) \ 
                 ^
tcpflowstat.cpp:42:31: error: ‘struct tcphdr’ has no member named ‘dest’ 
      && cltport==tcphdr->dest && svrport==tcphdr->source)) return 0; 
          ^
tcpflowstat.cpp:42:56: error: ‘struct tcphdr’ has no member named ‘source’ 
      && cltport==tcphdr->dest && svrport==tcphdr->source)) return 0; 
                 ^
tcpflowstat.cpp:43:59: error: ‘struct tcphdr’ has no member named ‘source’ 
    int pktdir=getPacketDirection(ip_src, ip_dst, tcphdr->source, tcphdr->dest); 
                 ^
tcpflowstat.cpp:43:75: error: ‘struct tcphdr’ has no member named ‘dest’ 
    int pktdir=getPacketDirection(ip_src, ip_dst, tcphdr->source, tcphdr->dest); 
                     ^
tcpflowstat.cpp: En la función miembro ‘void TCPFlowStat::addPacket(std::string, std::string, int, tcphdr*, double, int, bool)’: 
tcpflowstat.cpp:109:59: error: ‘struct tcphdr’ has no member named ‘source’ 
    int pktdir=getPacketDirection(ip_src, ip_dst, tcphdr->source, tcphdr->dest); 
                 ^
tcpflowstat.cpp:109:75: error: ‘struct tcphdr’ has no member named ‘dest’ 
    int pktdir=getPacketDirection(ip_src, ip_dst, tcphdr->source, tcphdr->dest); 
                     ^
tcpflowstat.cpp:110:41: error: ‘struct tcphdr’ has no member named ‘doff’ 
    int tcpdatalen=ippayloadlen-tcphdr->doff*4; 
             ^
tcpflowstat.cpp:174:25: error: ‘struct tcphdr’ has no member named ‘syn’ 
      if (tcphdr->syn==1 && tcphdr->ack!=1){ 
         ^
tcpflowstat.cpp:174:43: error: ‘struct tcphdr’ has no member named ‘ack’ 
      if (tcphdr->syn==1 && tcphdr->ack!=1){ 
             ^
tcpflowstat.cpp:178:33: error: ‘struct tcphdr’ has no member named ‘source’ 
       cltport=tcphdr->source; 
           ^
tcpflowstat.cpp:179:33: error: ‘struct tcphdr’ has no member named ‘dest’ 
       svrport=tcphdr->dest; 
           ^
tcpflowstat.cpp:180:32: error: ‘struct tcphdr’ has no member named ‘seq’ 
       cltseq=tcphdr->seq; 
           ^
tcpflowstat.cpp:181:35: error: ‘struct tcphdr’ has no member named ‘seq’ 
       svrackseq=tcphdr->seq+1; cltinitseq=tcphdr->seq+1; 
           ^
tcpflowstat.cpp:181:61: error: ‘struct tcphdr’ has no member named ‘seq’ 
       svrackseq=tcphdr->seq+1; cltinitseq=tcphdr->seq+1; 
                  ^
tcpflowstat.cpp:192:25: error: ‘struct tcphdr’ has no member named ‘syn’ 
      if (tcphdr->syn==1 && tcphdr->ack==1 && tcphdr->ack_seq==svrackseq){ 
         ^
tcpflowstat.cpp:192:43: error: ‘struct tcphdr’ has no member named ‘ack’ 
      if (tcphdr->syn==1 && tcphdr->ack==1 && tcphdr->ack_seq==svrackseq){ 
             ^
tcpflowstat.cpp:192:61: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
      if (tcphdr->syn==1 && tcphdr->ack==1 && tcphdr->ack_seq==svrackseq){ 
                  ^
tcpflowstat.cpp:195:32: error: ‘struct tcphdr’ has no member named ‘seq’ 
       svrseq=tcphdr->seq; 
           ^
tcpflowstat.cpp:196:35: error: ‘struct tcphdr’ has no member named ‘seq’ 
       cltackseq=tcphdr->seq+1; svrinitseq=tcphdr->seq+1; 
           ^
tcpflowstat.cpp:196:61: error: ‘struct tcphdr’ has no member named ‘seq’ 
       cltackseq=tcphdr->seq+1; svrinitseq=tcphdr->seq+1; 
                  ^
tcpflowstat.cpp:197:32: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
       cltseq=tcphdr->ack_seq; 
           ^
tcpflowstat.cpp:202:30: error: ‘struct tcphdr’ has no member named ‘syn’ 
      else if (tcphdr->syn==1 && tcphdr->ack!=1 && pktdir==PKTSENDER_SVR){ 
          ^
tcpflowstat.cpp:202:48: error: ‘struct tcphdr’ has no member named ‘ack’ 
      else if (tcphdr->syn==1 && tcphdr->ack!=1 && pktdir==PKTSENDER_SVR){ 
               ^
tcpflowstat.cpp:205:32: error: ‘struct tcphdr’ has no member named ‘seq’ 
       svrseq=tcphdr->seq; 
           ^
tcpflowstat.cpp:206:35: error: ‘struct tcphdr’ has no member named ‘seq’ 
       cltackseq=tcphdr->seq+1; svrinitseq=tcphdr->seq+1; 
           ^
tcpflowstat.cpp:206:61: error: ‘struct tcphdr’ has no member named ‘seq’ 
       cltackseq=tcphdr->seq+1; svrinitseq=tcphdr->seq+1; 
                  ^
tcpflowstat.cpp:211:30: error: ‘struct tcphdr’ has no member named ‘fin’ 
      else if (tcphdr->fin==1 || tcphdr->rst==1){ 
          ^
tcpflowstat.cpp:211:48: error: ‘struct tcphdr’ has no member named ‘rst’ 
      else if (tcphdr->fin==1 || tcphdr->rst==1){ 
               ^
tcpflowstat.cpp:220:25: error: ‘struct tcphdr’ has no member named ‘syn’ 
      if (tcphdr->syn!=1 &&tcphdr->ack==1 && tcphdr->seq==cltseq && tcphdr->ack_seq==cltackseq){ 
         ^
tcpflowstat.cpp:220:42: error: ‘struct tcphdr’ has no member named ‘ack’ 
      if (tcphdr->syn!=1 &&tcphdr->ack==1 && tcphdr->seq==cltseq && tcphdr->ack_seq==cltackseq){ 
             ^
tcpflowstat.cpp:220:60: error: ‘struct tcphdr’ has no member named ‘seq’ 
      if (tcphdr->syn!=1 &&tcphdr->ack==1 && tcphdr->seq==cltseq && tcphdr->ack_seq==cltackseq){ 
                  ^
tcpflowstat.cpp:220:83: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
      if (tcphdr->syn!=1 &&tcphdr->ack==1 && tcphdr->seq==cltseq && tcphdr->ack_seq==cltackseq){ 
                       ^
tcpflowstat.cpp:231:67: error: ‘struct tcphdr’ has no member named ‘source’ 
       pktdir=getPacketDirection(ip_src, ip_dst, tcphdr->source, tcphdr->dest); 
                   ^
tcpflowstat.cpp:231:83: error: ‘struct tcphdr’ has no member named ‘dest’ 
       pktdir=getPacketDirection(ip_src, ip_dst, tcphdr->source, tcphdr->dest); 
                       ^
tcpflowstat.cpp:234:36: error: ‘struct tcphdr’ has no member named ‘seq’ 
        cltseq=tcphdr->seq+tcpdatalen; 
            ^
tcpflowstat.cpp:235:39: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
        cltackseq=tcphdr->ack_seq; 
            ^
tcpflowstat.cpp:236:36: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
        svrseq=tcphdr->ack_seq; 
            ^
tcpflowstat.cpp:239:36: error: ‘struct tcphdr’ has no member named ‘seq’ 
        svrseq=tcphdr->seq+tcpdatalen; 
            ^
tcpflowstat.cpp:240:39: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
        svrackseq=tcphdr->ack_seq; 
            ^
tcpflowstat.cpp:241:36: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
        cltseq=tcphdr->ack_seq; 
            ^
tcpflowstat.cpp:248:25: error: ‘struct tcphdr’ has no member named ‘syn’ 
      if (tcphdr->syn==1 && tcphdr->ack==1 && simulsyn==1){ 
         ^
tcpflowstat.cpp:248:43: error: ‘struct tcphdr’ has no member named ‘ack’ 
      if (tcphdr->syn==1 && tcphdr->ack==1 && simulsyn==1){ 
             ^
tcpflowstat.cpp:250:54: error: ‘struct tcphdr’ has no member named ‘seq’ 
       if (pktdir==PKTSENDER_CLT && tcphdr->seq==cltseq && tcphdr->ack_seq==cltackseq){ 
                ^
tcpflowstat.cpp:250:77: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
       if (pktdir==PKTSENDER_CLT && tcphdr->seq==cltseq && tcphdr->ack_seq==cltackseq){ 
                      ^
tcpflowstat.cpp:257:54: error: ‘struct tcphdr’ has no member named ‘seq’ 
       if (pktdir==PKTSENDER_SVR && tcphdr->seq==svrseq && tcphdr->ack_seq==svrackseq){ 
                ^
tcpflowstat.cpp:257:77: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
       if (pktdir==PKTSENDER_SVR && tcphdr->seq==svrseq && tcphdr->ack_seq==svrackseq){ 
                      ^
tcpflowstat.cpp:277:25: error: ‘struct tcphdr’ has no member named ‘syn’ 
      if (tcphdr->syn!=1) { 
         ^
tcpflowstat.cpp:280:33: error: ‘struct tcphdr’ has no member named ‘seq’ 
        if (tcphdr->seq > cltseq){ 
           ^
tcpflowstat.cpp:284:33: error: ‘struct tcphdr’ has no member named ‘seq’ 
        if (tcphdr->seq < cltseq){ 
           ^
tcpflowstat.cpp:286:50: error: ‘struct tcphdr’ has no member named ‘seq’ 
         int retxb=cltseq-tcphdr->seq; 
               ^
tcpflowstat.cpp:296:33: error: ‘struct tcphdr’ has no member named ‘seq’ 
        if (tcphdr->seq+tcpdatalen > cltseq) { 
           ^
tcpflowstat.cpp:297:40: error: ‘struct tcphdr’ has no member named ‘seq’ 
         cltseq=tcphdr->seq+tcpdatalen; 
             ^
tcpflowstat.cpp:300:33: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
        if (tcphdr->ack_seq >= cltackseq) { 
           ^
tcpflowstat.cpp:301:43: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
         cltackseq=tcphdr->ack_seq; 
             ^
tcpflowstat.cpp:309:33: error: ‘struct tcphdr’ has no member named ‘seq’ 
        if (tcphdr->seq > svrseq){ 
           ^
tcpflowstat.cpp:313:33: error: ‘struct tcphdr’ has no member named ‘seq’ 
        if (tcphdr->seq < svrseq) { 
           ^
tcpflowstat.cpp:314:50: error: ‘struct tcphdr’ has no member named ‘seq’ 
         int retxb=svrseq-tcphdr->seq; 
               ^
tcpflowstat.cpp:325:33: error: ‘struct tcphdr’ has no member named ‘seq’ 
        if (tcphdr->seq+tcpdatalen > svrseq) { 
           ^
tcpflowstat.cpp:326:40: error: ‘struct tcphdr’ has no member named ‘seq’ 
         svrseq=tcphdr->seq+tcpdatalen; 
             ^
tcpflowstat.cpp:330:33: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
        if (tcphdr->ack_seq >= svrackseq) { 
           ^
tcpflowstat.cpp:331:43: error: ‘struct tcphdr’ has no member named ‘ack_seq’ 
         svrackseq=tcphdr->ack_seq; 
             ^
tcpflowstat.cpp:337:29: error: ‘struct tcphdr’ has no member named ‘fin’ 
       if (tcphdr->fin==1 || tcphdr->rst==1){ 
          ^
tcpflowstat.cpp:337:47: error: ‘struct tcphdr’ has no member named ‘rst’ 
       if (tcphdr->fin==1 || tcphdr->rst==1){ 
              ^
make: *** [Makefile:25: tcpflowstat.o] Error 1 
+0

Welche Felder enthält 'struct tcphdr'? Einige Betriebssysteme definieren ein Bitfeld, das andere verwenden, definiert. – Jonas

+0

@Jonas: Eigentlich finde ich nicht die Dateien, wo die Struktur definiert ist. Soll es in einer Header-Datei sein? –

+0

Ich bin nicht vertraut mit Windows, so dass ich nicht weiß, welche Header enthalten sind. Sie können es selbst definieren, Beispiele unter http://www.binarytides.com/raw-sockets-packets-with-winpcap/ – Jonas

Antwort

0

über die Struktur Cygwin auf /usr/include/netinet/tcp.h
Sein Inhalt definiert ist:

struct tcphdr { 
     u_int16_t th_sport;    /* source port */ 
     u_int16_t th_dport;    /* destination port */ 
     tcp_seq th_seq;    /* sequence number */ 
     tcp_seq th_ack;    /* acknowledgement number */ 
#if __BYTE_ORDER == __LITTLE_ENDIAN 
     unsigned int th_x2:4,   /* (unused) */ 
         th_off:4;   /* data offset */ 
#endif 
#if __BYTE_ORDER == __BIG_ENDIAN 
     unsigned int th_off:4,   /* data offset */ 
         th_x2:4;   /* (unused) */ 
#endif 
     u_int8_t th_flags; 
#define TH_FIN 0x01 
#define TH_SYN 0x02 
#define TH_RST 0x04 
#define TH_PUSH 0x08 
#define TH_ACK 0x10 
#define TH_URG 0x20 
#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG) 

     u_int16_t th_win;     /* window */ 
     u_int16_t th_sum;     /* checksum */ 
     u_int16_t th_urp;     /* urgent pointer */ 
}; 

Beachten Sie, dass die meisten von Cygwin internen aus BSD genommen wird und nicht von Linux und in diesem Fall die beiden Strukturen stimmen nicht überein.

+0

Ich habe versucht, den Code zu ändern, wie es in der Struktur in/usr/include/netinet/definiert ist tcp.h aber es funktioniert nicht. Kann ich es mit Cygwin kompilieren, wenn das Programm ursprünglich für Linux erstellt wurde? Ich meine, es gibt so viele Dinge, die sehr abhängig sind von dem operativen System (Sockets), ich weiß nicht, ob das, was ich versuche, überhaupt möglich ist. –

Verwandte Themen