From ee09a2e099e424a926f1fec17ffaa3661e8bb490 Mon Sep 17 00:00:00 2001 From: starnakin Date: Tue, 18 Nov 2025 08:20:19 -0600 Subject: [PATCH] add: implement -s --- src/main.c | 14 ++++++++------ src/setting.h | 1 + 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index 3f42aa3..8b14f83 100644 --- a/src/main.c +++ b/src/main.c @@ -76,6 +76,7 @@ static int get_setting(char * const *av, struct setting *setting) {NULL, "n", OPTION, false}, {NULL, "W",ARGUMENT, "0"}, {"ttl", NULL, ARGUMENT, "116"}, + {NULL, "s", ARGUMENT, "56"}, {NULL, NULL, 0, NULL}, }; char *hostname = parsing(av, parameters); @@ -90,7 +91,9 @@ static int get_setting(char * const *av, struct setting *setting) if (parsing_number(parameters[4].value, 0, 2147483647, &setting->timeout)) return 1; if (parsing_number(parameters[5].value, 0, 255, &setting->ttl)) - return 1; + return 2; + if (parsing_number(parameters[6].value, 0, 2147483647, &setting->payload_size)) + return 3; return 0; } @@ -102,8 +105,7 @@ int main(int ac, char **av) if (get_setting(av + 1, &settings)) return 1; - size_t payload_size = 56; - size_t packet_size = sizeof(struct icmphdr) + payload_size; + size_t packet_size = sizeof(struct icmphdr) + settings.payload_size; signal(SIGINT, signal_handler); @@ -125,7 +127,7 @@ int main(int ac, char **av) return 1; } - char *packet = packet_create(payload_size); + char *packet = packet_create(settings.payload_size); if (packet == NULL) { close(sockfd); @@ -173,11 +175,11 @@ int main(int ac, char **av) double time_interval = ((stop.tv_sec - start.tv_sec) * 1000 + ((double)stop.tv_usec - (double) start.tv_usec) / 1000); struct icmphdr *hdr = (struct icmphdr *) packet; - printf("%zu bytes from %s (%s): icmp_seq=%d, ttl=%u, time=%fms\n", payload_size + sizeof(struct icmphdr), settings.dest.reverse_dns, settings.dest.ipstr, htons(hdr->un.echo.sequence), 116, time_interval); + printf("%zu bytes from %s (%s): icmp_seq=%d, ttl=%u, time=%fms\n", packet_size, settings.dest.reverse_dns, settings.dest.ipstr, htons(hdr->un.echo.sequence), 116, time_interval); sleep(1); - if (packet_update(packet, payload_size)) + if (packet_update(packet, settings.payload_size)) { close(sockfd); free(buffer); diff --git a/src/setting.h b/src/setting.h index 9f04f78..7b0f1a1 100644 --- a/src/setting.h +++ b/src/setting.h @@ -13,5 +13,6 @@ struct setting bool numeric_only; size_t timeout; size_t ttl; + size_t payload_size; struct hostenv dest; };