+
+int parse_ip(char *ip_o) {
+ struct iphdr *ip_hdr;
+ int i;
+
+ printf("ip protocol:\n");
+ ip_hdr=(struct iphdr *)ip_o;
+ 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",
+ (ip_hdr->saddr&(0xff<<(8*i)))>>(8*i),
+ (i==3?"\n":"."));
+ }
+ printf("destination_ip: ");
+ for(i=0;i<=3;++i) {
+ printf("%d%s",
+ (ip_hdr->daddr&(0xff<<(8*i)))>>(8*i),
+ (i==3?"\n":"."));
+ }
+ printf("ip_id = %x ",ntohs(ip_hdr->id));
+ 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;
+}