Use POSIX instead of Linux fields. Glibc has both, musl only has POSIX. --- ioctl.c +++ ioctl.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include --- ping.c +++ ping.c @@ -30,6 +30,7 @@ #include #include #include +#include #include "main.h" #include "ping.h" --- tcpdump.c +++ tcpdump.c @@ -36,6 +36,7 @@ #include #include #include +#include #include "main.h" #include "tcpdump.h" @@ -230,7 +231,7 @@ static void dump_ip(unsigned char *packet_buff, ssize_t buff_len, int time_print printf("%s: ICMP ", inet_ntoa(*(struct in_addr *)&iphdr->daddr)); printf("%s udp port %hu unreachable, length %zu\n", inet_ntoa(*(struct in_addr *)&tmp_iphdr->daddr), - ntohs(tmp_udphdr->dest), (size_t)buff_len - (iphdr->ihl * 4)); + ntohs(tmp_udphdr->uh_dport), (size_t)buff_len - (iphdr->ihl * 4)); break; default: printf("%s: ICMP unreachable %hhu, length %zu\n", @@ -261,25 +262,25 @@ static void dump_ip(unsigned char *packet_buff, ssize_t buff_len, int time_print break; case IPPROTO_TCP: tcphdr = (struct tcphdr *)(packet_buff + (iphdr->ihl * 4)); - tcp_header_len = tcphdr->doff * 4; + tcp_header_len = tcphdr->th_off * 4; LEN_CHECK((size_t)buff_len - (iphdr->ihl * 4), (size_t)tcp_header_len, "TCP"); - printf("IP %s.%i > ", inet_ntoa(*(struct in_addr *)&iphdr->saddr), ntohs(tcphdr->source)); + printf("IP %s.%i > ", inet_ntoa(*(struct in_addr *)&iphdr->saddr), ntohs(tcphdr->th_sport)); printf("%s.%i: TCP, flags [%c%c%c%c%c%c], length %zu\n", - inet_ntoa(*(struct in_addr *)&iphdr->daddr), ntohs(tcphdr->dest), - (tcphdr->fin ? 'F' : '.'), (tcphdr->syn ? 'S' : '.'), - (tcphdr->rst ? 'R' : '.'), (tcphdr->psh ? 'P' : '.'), - (tcphdr->ack ? 'A' : '.'), (tcphdr->urg ? 'U' : '.'), + inet_ntoa(*(struct in_addr *)&iphdr->daddr), ntohs(tcphdr->th_dport), + (tcphdr->th_flags & TH_FIN ? 'F' : '.'), (tcphdr->th_flags & TH_SYN ? 'S' : '.'), + (tcphdr->th_flags & TH_RST ? 'R' : '.'), (tcphdr->th_flags & TH_PUSH ? 'P' : '.'), + (tcphdr->th_flags & TH_ACK ? 'A' : '.'), (tcphdr->th_flags & TH_URG ? 'U' : '.'), (size_t)buff_len - (iphdr->ihl * 4) - tcp_header_len); break; case IPPROTO_UDP: LEN_CHECK((size_t)buff_len - (iphdr->ihl * 4), sizeof(struct udphdr), "UDP"); udphdr = (struct udphdr *)(packet_buff + (iphdr->ihl * 4)); - printf("IP %s.%i > ", inet_ntoa(*(struct in_addr *)&iphdr->saddr), ntohs(udphdr->source)); + printf("IP %s.%i > ", inet_ntoa(*(struct in_addr *)&iphdr->saddr), ntohs(udphdr->uh_sport)); - switch (ntohs(udphdr->dest)) { + switch (ntohs(udphdr->uh_dport)) { case 67: LEN_CHECK((size_t)buff_len - (iphdr->ihl * 4) - sizeof(struct udphdr), (size_t) 44, "DHCP"); printf("%s.67: BOOTP/DHCP, Request from %s, length %zu\n", @@ -294,7 +295,7 @@ static void dump_ip(unsigned char *packet_buff, ssize_t buff_len, int time_print break; default: printf("%s.%i: UDP, length %zu\n", - inet_ntoa(*(struct in_addr *)&iphdr->daddr), ntohs(udphdr->dest), + inet_ntoa(*(struct in_addr *)&iphdr->daddr), ntohs(udphdr->uh_dport), (size_t)buff_len - (iphdr->ihl * 4) - sizeof(struct udphdr)); break; } --- traceroute.c +++ traceroute.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "main.h" #include "traceroute.h"