Giusto, eccolo qui
Ci sono diverse stampe, ma comunque c'e tutta la struttura dell'accesso all'header..codice:int tcp_handle(ipq_packet_msg_t *m) { struct iphdr *ip = (struct iphdr *) m->payload; u_int32_t src_addr = ip->saddr; u_int32_t dst_addr = ip->daddr; fprintf(stderr, "TCPTCP\n"); fprintf(stderr, "IP sorgente: %s\n", inet_ntoa(src_addr)); fprintf(stderr, "IP destinazione: %s\n", inet_ntoa(dst_addr)); /* Cast the TCP Header from the raw packet */ struct tcphdr *tcp = (struct tcphdr *)(m->payload + (ip->ihl << 2)); fprintf(stderr,"DATA OFFSET == %d\n",tcp->doff); fprintf(stderr,"URG=%d ACK=%d PSH=%d RST=%d SYN=%d FIN=%d\n", tcp->urg,tcp->ack,tcp->psh,tcp->rst,tcp->syn,tcp->fin); unsigned int startdata = m+sizeof(struct iphdr)+sizeof(struct tcphdr)+tcp->doff; /* Occorre usare la memcpy per ottenere i dati */ fprintf(stderr,"m->payload = %d\n",sizeof(ipq_packet_msg_t)); fprintf(stderr,"sizeof(ip) = %d\n",sizeof(struct iphdr)); fprintf(stderr,"sizeof(tcp) = %d\n",sizeof(struct tcphdr)); fprintf(stderr,"startdata = %u\n",startdata); int dim_data = sizeof(ipq_packet_msg_t)-sizeof(struct tcphdr)-sizeof(struct iphdr); fprintf(stderr,"The dimension of the data is %d\n",dim_data); char* data = malloc(dim_data); fprintf(stderr,"Data starts at %u\n",startdata); fprintf(stderr,"data = %u\n",data); memcpy(data,startdata,dim_data); fprintf(stderr,"M=%u struct tcphdr=%d tcp->doff=%d\n",m,sizeof(struct tcphdr),tcp->doff); fprintf(stderr,"Data = %s",data); int src_port = ntohs (tcp->source); int dest_port = ntohs (tcp->dest); fprintf(stderr, "Source port = %d && Dest Port = %d", src_port, dest_port); }


Rispondi quotando