fix: packet size recv
This commit is contained in:
@@ -216,7 +216,7 @@ int main(int ac, char **av)
|
|||||||
if (ret >= (ssize_t) sizeof(struct icmphdr) && ((struct icmphdr *) buffer + sizeof(struct iphdr))->type == 0)
|
if (ret >= (ssize_t) sizeof(struct icmphdr) && ((struct icmphdr *) buffer + sizeof(struct iphdr))->type == 0)
|
||||||
{
|
{
|
||||||
stats.packets_received++;
|
stats.packets_received++;
|
||||||
print_recv(&settings, (struct icmphdr*) (buffer + sizeof(struct iphdr)), &start, &stop, &sender);
|
print_recv(&settings, buffer, &start, &stop, &sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
|||||||
11
src/print.c
11
src/print.c
@@ -68,13 +68,16 @@ static const char *get_message_description(const uint8_t type, const uint8_t cod
|
|||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_recv(const struct setting *settings, const struct icmphdr *header, const struct timeval *start, const struct timeval *stop, struct sockaddr_in const *sender)
|
void print_recv(const struct setting *settings, const char *packet, const struct timeval *start, const struct timeval *stop, struct sockaddr_in const *sender)
|
||||||
{
|
{
|
||||||
|
const struct iphdr *ip_hdr = (const struct iphdr *) packet;
|
||||||
|
const struct icmphdr *icmp_hdr = (const struct icmphdr *) packet + sizeof(struct iphdr);
|
||||||
|
|
||||||
char *ipstr = inet_ntoa(sender->sin_addr);
|
char *ipstr = inet_ntoa(sender->sin_addr);
|
||||||
printf("%zu", settings->payload_size + sizeof(struct icmphdr) + ((header->type == 0) ? 0 : sizeof(struct iphdr)));
|
printf("%ld bozo", ntohs(ip_hdr->tot_len) - sizeof(struct iphdr));
|
||||||
printf(" bytes from %s: ", ipstr);
|
printf(" bytes from %s: ", ipstr);
|
||||||
printf(get_message_description(header->type, header->code),
|
printf(get_message_description(icmp_hdr->type, icmp_hdr->code),
|
||||||
htons(header->un.echo.sequence),
|
htons(icmp_hdr->un.echo.sequence),
|
||||||
settings->ttl,
|
settings->ttl,
|
||||||
get_interval(start, stop)
|
get_interval(start, stop)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ void print_err(const char *format, ...);
|
|||||||
|
|
||||||
void print_header(struct setting const *settings);
|
void print_header(struct setting const *settings);
|
||||||
void print_statistics(struct statistics const *stats, struct setting const *settings);
|
void print_statistics(struct statistics const *stats, struct setting const *settings);
|
||||||
void print_recv(const struct setting *settings, const struct icmphdr *header, const struct timeval *start, const struct timeval *stop, struct sockaddr_in const *sender);
|
void print_recv(const struct setting *settings, const char *packet, const struct timeval *start, const struct timeval *stop, struct sockaddr_in const *sender);
|
||||||
Reference in New Issue
Block a user