gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r12025 - gnunet/src/vpn


From: gnunet
Subject: [GNUnet-SVN] r12025 - gnunet/src/vpn
Date: Mon, 28 Jun 2010 14:37:41 +0200

Author: toelke
Date: 2010-06-28 14:37:41 +0200 (Mon, 28 Jun 2010)
New Revision: 12025

Modified:
   gnunet/src/vpn/packet.c
   gnunet/src/vpn/packet.h
   gnunet/src/vpn/pretty-print.c
   gnunet/src/vpn/pretty-print.h
   gnunet/src/vpn/test.c
Log:
vpn: parse and pretty-print tcp-packets

Modified: gnunet/src/vpn/packet.c
===================================================================
--- gnunet/src/vpn/packet.c     2010-06-28 12:37:39 UTC (rev 12024)
+++ gnunet/src/vpn/packet.c     2010-06-28 12:37:41 UTC (rev 12025)
@@ -125,3 +125,33 @@
 
        return pkt6;
 }}}
+
+struct ip6_tcp* parse_ip6_tcp(struct ip6_pkt* pkt) {{{
+       struct ip6_tcp* res = (struct ip6_tcp*) malloc(sizeof(struct ip6_tcp));
+       memcpy(&(res->hdr), &(pkt->hdr), sizeof(struct ip6_hdr));
+       
+       res->data.spt = (pkt->data[0] << 8) | pkt->data[1];
+       res->data.dpt = (pkt->data[2] << 8) | pkt->data[3];
+
+       res->data.seq = (pkt->data[4] << 24) | (pkt->data[5] << 16) | 
(pkt->data[6] << 8) | pkt->data[7];
+       res->data.ack = (pkt->data[8] << 24) | (pkt->data[9] << 16) | 
(pkt->data[10] << 8) | pkt->data[11];
+
+       res->data.off = pkt->data[12] >> 4;
+       res->data.rsv = pkt->data[12] & 0xF;
+
+       res->data.flg = pkt->data[13];
+
+       res->data.wsz = (pkt->data[14] << 8) | pkt->data[15];
+
+       res->data.crc = (pkt->data[16] << 8) | pkt->data[17];
+
+       res->data.urg = (pkt->data[18] << 8) | pkt->data[19];
+
+       res->data.opt = (unsigned char*) malloc((res->data.off - 5)*4);
+       memcpy(res->data.opt, pkt->data+20, (res->data.off - 5)*4);
+
+       res->data.data = (unsigned char*) malloc(payload(pkt) - 
4*(res->data.off));
+       memcpy(res->data.data, pkt->data+4*(res->data.off), payload(pkt) - 
4*(res->data.off));
+
+       return res;
+}}}

Modified: gnunet/src/vpn/packet.h
===================================================================
--- gnunet/src/vpn/packet.h     2010-06-28 12:37:39 UTC (rev 12024)
+++ gnunet/src/vpn/packet.h     2010-06-28 12:37:41 UTC (rev 12025)
@@ -23,15 +23,28 @@
        unsigned char* data;
 };
 
+struct tcp_pkt {
+       unsigned short spt, dpt;
+       unsigned int seq, ack;
+       unsigned char off, rsv, flg;
+       unsigned short wsz;
+       unsigned short crc, urg;
+       unsigned char* opt;
        unsigned char* data;
 };
 
+struct ip6_tcp {
+       struct ip6_hdr hdr;
+       struct tcp_pkt data;
+};
+
 extern void send_pkt(int fd, struct ip6_pkt* pkt);
 extern int recv_ipv6pkt(int fd, struct pkt_tun** pkt, unsigned char*);
 extern int recv_pkt(int fd, struct pkt_tun** pkt);
 extern struct ip6_pkt* parse_ip6(struct pkt_tun* pkt);
-extern void pkt_printf(struct ip6_pkt* pkt);
 
+struct ip6_tcp* parse_ip6_tcp(struct ip6_pkt*);
+
 extern long payload(struct ip6_pkt* pkt);
 
 #endif

Modified: gnunet/src/vpn/pretty-print.c
===================================================================
--- gnunet/src/vpn/pretty-print.c       2010-06-28 12:37:39 UTC (rev 12024)
+++ gnunet/src/vpn/pretty-print.c       2010-06-28 12:37:41 UTC (rev 12025)
@@ -94,6 +94,9 @@
                case 0x3a:
                        memcpy(dest, "ICMPv6)", 7);
                        break;
+               case 0x06:
+                       memcpy(dest, "TCP)", 4);
+                       break;
                default:
                        memcpy(dest, "unknown)", 8);
                        break;
@@ -139,3 +142,24 @@
        printf(buf);
        free(buf);
 }}}
+
+void pkt_printf_ip6tcp(struct ip6_tcp* pkt) {{{
+       printf("spt: %u\n", pkt->data.spt);
+       printf("dpt: %u\n", pkt->data.dpt);
+       printf("seq: %u\n", pkt->data.seq);
+       printf("ack: %u\n", pkt->data.ack);
+       printf("off: %u\n", pkt->data.off);
+       printf("wsz: %u\n", pkt->data.wsz);
+       printf("crc: %u\n", pkt->data.crc);
+       printf("urg: %u\n", pkt->data.urg);
+       printf("flags: %c%c%c%c%c%c%c%c\n",
+                       pkt->data.flg & 0x80 ? 'C' : '.',
+                       pkt->data.flg & 0x40 ? 'E' : '.',
+                       pkt->data.flg & 0x20 ? 'U' : '.',
+                       pkt->data.flg & 0x10 ? 'A' : '.',
+                       pkt->data.flg & 0x08 ? 'P' : '.',
+                       pkt->data.flg & 0x04 ? 'R' : '.',
+                       pkt->data.flg & 0x02 ? 'S' : '.',
+                       pkt->data.flg & 0x01 ? 'F' : '.'
+                       );
+}}}

Modified: gnunet/src/vpn/pretty-print.h
===================================================================
--- gnunet/src/vpn/pretty-print.h       2010-06-28 12:37:39 UTC (rev 12024)
+++ gnunet/src/vpn/pretty-print.h       2010-06-28 12:37:41 UTC (rev 12025)
@@ -1,12 +1,12 @@
 #ifndef _GNTUN_PP_H_
 #define _GNTUN_PP_H_
 
-extern static void pp_ip6adr(unsigned char* adr, char* dest);
-
 extern void pp_hexdump(unsigned char* data, char* dest, int max);
 
 extern void pp_write_header(char* dest, struct ip6_pkt* pkt);
 
 extern void pkt_printf(struct ip6_pkt* pkt);
 
+void pkt_printf_ip6tcp(struct ip6_tcp* pkt);
+
 #endif

Modified: gnunet/src/vpn/test.c
===================================================================
--- gnunet/src/vpn/test.c       2010-06-28 12:37:39 UTC (rev 12024)
+++ gnunet/src/vpn/test.c       2010-06-28 12:37:41 UTC (rev 12025)
@@ -7,6 +7,7 @@
 #include "packet.h"
 #include "tun.h"
 #include "debug.h"
+#include "pretty-print.h"
 
 int main(int c, char** v) {
        //char* dev = (char*) malloc(IFNAMSIZ);
@@ -23,7 +24,16 @@
                        case 0x86dd:
                                printf("parsing ipv6:\n");
                                struct ip6_pkt* pkt6 = parse_ip6(pkt);
-                               pkt_printf(pkt6);
+                               switch(pkt6->hdr.nxthdr) {
+                                       case 0x3a:
+                                               pkt_printf(pkt6);
+                                               break;
+                                       case 0x06:
+                                               pkt_printf(pkt6);
+                                               struct ip6_tcp* pkt6_tcp = 
parse_ip6_tcp(pkt6);
+                                               pkt_printf_ip6tcp(pkt6_tcp);
+                                               break;
+                               }
                                break;
                        default:
                                printf("unknown/unimplemented packet-type\n");




reply via email to

[Prev in Thread] Current Thread [Next in Thread]