#pragma once #include "netinet/in.h" #include "netinet/ip_icmp.h" #include #include #include #include #include #include #include extern char *exec_name; extern int tx_count; extern int rx_count; extern char *address; extern double *times; extern int sock; extern char **hosts; extern bool verbose; typedef struct { uint32_t count; uint16_t size; uint16_t timeout; uint16_t linger; uint16_t interval; } options_t; typedef struct { struct icmphdr hdr; char *msg; } icmp_pckt_t; #define MAX_WAIT_TIME 5 #define DEFAULT_VERBOSE false #define DEFAULT_SIZE 56 #define DEFAULT_INTERVAL 1 #define DEFAULT_TIMEOUT -1 #define DEFAULT_COUNT -1 #define DEFAULT_LINGER 10 int send_ping(int socket, struct sockaddr_in *dest, options_t opt); int init_socket(options_t opt); void init_packet(char *buf, int seq, uint32_t size); int send_icmp(int socket, char *buf, struct sockaddr_in *addr, uint32_t size); int receive_icmp(int socket, char *buf, uint32_t size, struct sockaddr_in *addr); void process_icmp(char *buf, int bytes, struct sockaddr_in *addr, int seq, struct timeval *tv_start, struct timeval *tv_end); int ping(args_t *args); // Internal unsigned short get_checksum(unsigned short *addr, int count);