From a3085918e686b3e027ab831b77acda615e12460d Mon Sep 17 00:00:00 2001 From: Franciszek Malinka Date: Thu, 18 Mar 2021 17:14:01 +0100 Subject: cos tam --- Semestr 4/sieci/pracownia1/traceroute.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'Semestr 4/sieci/pracownia1/traceroute.c') diff --git a/Semestr 4/sieci/pracownia1/traceroute.c b/Semestr 4/sieci/pracownia1/traceroute.c index 7918957..88d233a 100644 --- a/Semestr 4/sieci/pracownia1/traceroute.c +++ b/Semestr 4/sieci/pracownia1/traceroute.c @@ -7,6 +7,7 @@ #include #include #include +#include #define MAX_TTL 30 #define MESSAGES_PER_TTL 3 @@ -84,12 +85,26 @@ void send_icmp_packet(int sockfd, struct sockaddr_in *destination, int ttl) { fprintf(stdout, "Bytes sent: %ld\n", bytes_sent); } +/* Return ip address of the sender of recceived package */ +in_addr_t recv_dontwait(int sockfd) { + struct sockaddr_in sender; + socklen_t sender_len = sizeof(sender); + uint8_t buffer[IP_MAXPACKET]; + + ssize_t packet_len = recvfrom(sockfd, buffer, IP_MAXPACKET, MSG_DONTWAIT, + (struct sockaddr*)&sender, &sender_len); + + if (packet_len == -1) { + fprintf(stderr, "Error while recieving a packet: %s\n", strerror(errno)); + exit(EXIT_FAILURE); + } + + return sender.sin_addr.s_addr; +} + int traceroute(struct sockaddr_in *destination) { int sockfd = create_raw_icmp_socket(); - struct sockaddr_in sender; - socklen_t sender_len = sizeof(sender); - uint8_t buffer[IP_MAXPACKET]; for (int ttl = 1; ttl <= MAX_TTL; ++ttl) { send_icmp_packet(sockfd, destination, ttl); } -- cgit v1.2.3