Most of the conversion specifiers used are wrong here:
printf("\tSource Port : %u\n", ntohs(tcp_hdr->tcp_sport));
printf("\tDestination Port : %u\n", ntohs(tcp_hdr->tcp_dport));
printf("\tSequence number : %u\n", ntohl(tcp_hdr->tcp_th_seq));
printf("\tAcknowledge number: %u\n", ntohl(tcp_hdr->tcp_ack));
printf("\tOffset : %d\n", tcp_hdr->tcp_off);
printf("\tReserved : %d\n", (unsigned int)tcp_hdr->tcp_res);
printf("\tUrgent Flag : %d\n", (unsigned int)tcp_hdr->tcp_uf);
printf("\tAcknoledge Flag : %d\n", (unsigned int)tcp_hdr->tcp_af);
printf("\tPush Flag : %d\n", (unsigned int)tcp_hdr->tcp_pf);
printf("\tReset Flag : %d\n", (unsigned int)tcp_hdr->tcp_rf);
printf("\tSynchronise Flag : %d\n", (unsigned int)tcp_hdr->tcp_sf);
printf("\tFinish Flag : %d\n", (unsigned int)tcp_hdr->tcp_ff);
printf("\tWindow : %d\n", ntohs(tcp_hdr->tcp_win));
printf("\tChecksum : %d\n", ntohs(tcp_hdr->tcp_sum));
printf("\tUrgent Pointer : %d", ntohs(tcp_hdr->tcp_urp));
It should be:
printf("\tSource Port : %hu\n", ntohs(tcp_hdr->tcp_sport));
printf("\tDestination Port : %hu\n", ntohs(tcp_hdr->tcp_dport));
printf("\tSequence number : %u\n", ntohl(tcp_hdr->tcp_th_seq));
printf("\tAcknowledge number: %u\n", ntohl(tcp_hdr->tcp_ack));
printf("\tOffset : %hhu\n", tcp_hdr->tcp_off);
printf("\tReserved : %u\n", (unsigned int)tcp_hdr->tcp_res);
printf("\tUrgent Flag : %u\n", (unsigned int)tcp_hdr->tcp_uf);
printf("\tAcknoledge Flag : %u\n", (unsigned int)tcp_hdr->tcp_af);
printf("\tPush Flag : %u\n", (unsigned int)tcp_hdr->tcp_pf);
printf("\tReset Flag : %u\n", (unsigned int)tcp_hdr->tcp_rf);
printf("\tSynchronise Flag : %u\n", (unsigned int)tcp_hdr->tcp_sf);
printf("\tFinish Flag : %u\n", (unsigned int)tcp_hdr->tcp_ff);
printf("\tWindow : %hu\n", ntohs(tcp_hdr->tcp_win));
printf("\tChecksum : %hu\n", ntohs(tcp_hdr->tcp_sum));
printf("\tUrgent Pointer : %hu", ntohs(tcp_hdr->tcp_urp));
If you'd removed all those castings to unsigned int
you could use hhu
as conversion specifier for printf()
ing, as all those variables are defined to be unsigned
8-bit values.