added tcp support
authorhackbard <hackbard>
Thu, 19 Dec 2002 03:53:49 +0000 (03:53 +0000)
committerhackbard <hackbard>
Thu, 19 Dec 2002 03:53:49 +0000 (03:53 +0000)
hdw-sniff.c
hdw-sniff.h

index 8b35e82..d2e7077 100644 (file)
@@ -4,6 +4,8 @@
  * author: hackbard@hackdaworld.dyndns.org
  */
 
+#define _GNU_SOURCE
+
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -22,6 +24,7 @@
 #include <netinet/if_ether.h>  /* for ethhdr struct */
 #include <netinet/ip.h> /* ip */
 #include <netinet/in.h>        /* in_addr , inet_ntoa */
+#include <netinet/tcp.h> /* tcp header and protocols */
 
 /* IEEE 802.11 stuff -- will become one include later ... */
 #include "ieee80211.h" /* from hunz's aeolus, short hostap_wlan.h */
@@ -136,7 +139,7 @@ void pcap_process(u_char *info,const struct pcap_pkthdr *pcap_header,
        struct beacon_struct *beacon_hdr;
        struct ethhdr *e_hdr;
        struct info_struct *my_info_struct;
-       int i,p_o,w_o,e_o,i_o;
+       int i,p_o,w_o,e_o,i_o,special_o=0;
        
        my_info_struct=(struct info_struct *)info;
        ++(my_info_struct->count);
@@ -237,6 +240,7 @@ void pcap_process(u_char *info,const struct pcap_pkthdr *pcap_header,
        if((strncmp(my_info_struct->dev,"eth",3)==0)) {
                printf("ethernet: (%d bytes)\n",e_o);
                e_hdr=(struct ethhdr *)(package+p_o+w_o);
+               special_o=sizeof(struct ethhdr);
                /* what types ? */
                printf("type = ");
                printf("%x  ",ntohs(e_hdr->h_proto));
@@ -296,7 +300,7 @@ void pcap_process(u_char *info,const struct pcap_pkthdr *pcap_header,
        /* dump it */
 #ifdef SHOW_HEX
        printf("all dump: (hex)\n");
-       for(i=p_o+w_o;i<pcap_header->caplen;i++)
+       for(i=p_o+w_o+special_o;i<pcap_header->caplen;i++)
                printf("%x ",*(package+i));
        printf("\n");
 #endif
@@ -335,10 +339,10 @@ int parse_ip(char *ip_o) {
 
        printf("ip protocol:\n");
        ip_hdr=(struct iphdr *)ip_o;
-       printf("version = %x ",ntohs(ip_hdr->version));
-        printf("header_length = %x \n",ntohs(ip_hdr->ihl));
-        printf("service = %x ",ntohs(ip_hdr->tos));
-        printf("total_length(dec.) = %d \n",ntohs(ip_hdr->tot_len));
+       printf("version = %x ",ip_hdr->version);
+        printf("header_length = %x \n",ip_hdr->ihl);
+        printf("service = %x ",ip_hdr->tos);
+        printf("total_length(dec.) = %d \n",ip_hdr->tot_len);
         printf("source_ip: ");
                for(i=0;i<=3;++i) {
                         printf("%d%s",
@@ -352,8 +356,26 @@ int parse_ip(char *ip_o) {
                 (i==3?"\n":"."));
        }
        printf("ip_id = %x ",ntohs(ip_hdr->id));
-        printf("ip_offset = %x \n",ntohs(ip_hdr->frag_off));
-        printf("time2live = %x ip_proto = %x\n",ntohs(ip_hdr->ttl),
-                                                ntohs(ip_hdr->protocol));
+        printf("ip_offset = %x \n",ip_hdr->frag_off);
+        printf("time2live = %x ip_proto = %x\n",ip_hdr->ttl,ip_hdr->protocol);
+       /* how to continue */
+       if(ip_hdr->protocol==IPPROTO_TCP) 
+                       parse_tcp(ip_hdr+sizeof(struct iphdr));
+       if(ip_hdr->protocol==IPPROTO_UDP)
+                       printf("udp package! get's parsed in the future\n");
         // printf("chksum: %x\n",ntohs(ip_hdr->ip_sum));
 }
+
+int parse_tcp(char *tcp_o) {
+       struct tcphdr *tcp_hdr;
+
+       printf("tcp protocol:\n");
+       tcp_hdr=(struct tcphdr *)tcp_o;
+       printf("source port: %d - dest port: %d\n",ntohs(tcp_hdr->source),
+                                               ntohs(tcp_hdr->dest));
+       printf("sequence: %d - ack sequence: %d\n",ntohs(tcp_hdr->seq),
+                                               ntohs(tcp_hdr->ack_seq));
+       printf("offset to data: %d - checksumm: %d\n",ntohs(tcp_hdr->doff)
+                                               ,ntohs(tcp_hdr->check));
+       return 1;
+}
index 908b95b..83d4dbd 100644 (file)
@@ -28,6 +28,7 @@ struct info_struct {
 /* hop_chanel function */
 int hop_channel(struct info_struct *info,int foo_fd);
 int parse_ip(char *ip_o); 
+int parse_tcp(char *tcp_o);
 
 /* ssid struct */
 struct ssid_struct {