* author: hackbard@hackdaworld.dyndns.org
*/
+#define _GNU_SOURCE
+
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#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 */
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);
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));
/* 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
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",
(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;
+}