diff --git a/.gitignore b/.gitignore index c07dfad..2ec987a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,5 @@ -<<<<<<< HEAD .vscode .cache generate_json.py ft_ping -======= -*.o -a.out -.vscode ->>>>>>> 00fcdacf31561477259f851446360c0b7fc79eb6 diff --git a/includes/ft_ping.h b/includes/ft_ping.h index 5d753ee..b34f7c8 100644 --- a/includes/ft_ping.h +++ b/includes/ft_ping.h @@ -17,7 +17,7 @@ #include #include -#define PACKET_SIZE 64 +#define PACKET_SIZE 56 struct icmp_header { diff --git a/objs/src/main.o b/objs/src/main.o deleted file mode 100644 index bb24153..0000000 Binary files a/objs/src/main.o and /dev/null differ diff --git a/objs/src/utils.o b/objs/src/utils.o deleted file mode 100644 index 2fa6a00..0000000 Binary files a/objs/src/utils.o and /dev/null differ diff --git a/src/main.c b/src/main.c index fabf241..a0ce149 100644 --- a/src/main.c +++ b/src/main.c @@ -5,7 +5,7 @@ bool loop = true; int ft_ping(int sock, uint16_t seq, struct sockaddr_in *dst) { - unsigned char data[64]; + unsigned char data[PACKET_SIZE]; struct icmp_header *icmp_hdr = (struct icmp_header *)data; memset(data, 0, sizeof(data)); @@ -25,9 +25,9 @@ int ft_ping(int sock, uint16_t seq, struct sockaddr_in *dst) return (1); } -void ft_recv(int sock, uint16_t seq, char *ip, double start) +int ft_recv(int sock, uint16_t seq, double start) { - unsigned char data[64]; + unsigned char data[PACKET_SIZE]; struct icmp_header *icmp_hdr = (struct icmp_header *)(data + 20); int n_bytes; struct sockaddr_in addr; @@ -38,16 +38,16 @@ void ft_recv(int sock, uint16_t seq, char *ip, double start) memset(data, 0, sizeof(data)); n_bytes = recvfrom(sock, data, sizeof(data), 0, (struct sockaddr *)&addr, (socklen_t *)&len); if (n_bytes < 1) - return; + return (1); time = (get_timestamp() - start) * 1000; checksum = icmp_hdr->checksum; icmp_hdr->checksum = 0; if (icmp_hdr->seq != seq || make_checksum((uint16_t *)icmp_hdr, sizeof(*icmp_hdr)) != checksum) - return; + return (0); fill_timestamp_array(&stats, time); stats.n_packet_recv++; - printf("%d bytes from %s: icmp_seq=%d ttl=%d time=%5.3fms\n", n_bytes, ip, icmp_hdr->seq, (uint8_t)data[8], time); - return; + printf("%d bytes from %s: icmp_seq=%d ttl=%d time=%5.3fms\n", n_bytes, inet_ntoa(addr.sin_addr), icmp_hdr->seq, (uint8_t)data[8], time); + return (1); } void handler(int code) @@ -90,7 +90,7 @@ bool init_socket(int *sock, struct sockaddr_in *dst, char *host) void print_recap(char *ip) { printf("--- %s ping statistics ---\n", ip); - printf("%d packed transmitted, %d received, %0.0f%% packet loss\n", stats.n_packet_sent, stats.n_packet_recv, (double)(100 - (stats.n_packet_recv / stats.n_packet_sent) * 100)); + printf("%d packed transmitted, %d received, %0.0f%% packet loss\n", stats.n_packet_sent, stats.n_packet_recv, (double)(stats.n_packet_sent - stats.n_packet_recv) / stats.n_packet_sent * 100); printf("round-trip min/avg/max/stddev = %5.3f/%5.3f/%5.3f/%5.3f ms\n", get_min(stats.timestamp_array), get_avg(stats.timestamp_array), get_max(stats.timestamp_array), get_stddev(stats.timestamp_array)); } @@ -116,7 +116,7 @@ int main(int argc, char **argv) return (1); } } - if (argc < 2 || argv[optind] == NULL || argv[optind][0] == 0) + if (argc < 2 || argv[optind] == NULL || argv[optind][0] == 0) // optind is a value given by getopt() that's equal to the first argument that isn't a flag { fprintf(stderr, "ERROR : usage : %s {-v?} [ADRESS]\n", argv[0]); return (0); @@ -134,7 +134,7 @@ int main(int argc, char **argv) start = get_timestamp(); if (ft_ping(sock, seq, &dst) == 0) break; - ft_recv(sock, seq, ip, start); + while (!ft_recv(sock, seq, start)); seq++; sleep(1); }