#include #include #include #include #include #include "rep.h" int get_ip_from_dns(const char *domain, char *ip) { int sock; struct sockaddr_in serv_addr; char buffer[BUFFER_SIZE] = {0}; sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("Socket creation error"); return -1; } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(RNS_PORT); if (inet_pton(AF_INET, DNS_SERVER_ADDR, &serv_addr.sin_addr) <= 0) { perror("Invalid address / Address not supported"); return -1; } if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { perror("Connection failed"); return -1; } send(sock, domain, strlen(domain), 0); read(sock, buffer, BUFFER_SIZE); close(sock); if (strcmp(buffer, "Domain not found\n") == 0) { return -1; } strcpy(ip, buffer); return 0; } int main() { char domain[BUFFER_SIZE] = "nky.xyz"; char ip[BUFFER_SIZE] = {0}; char query[BUFFER_SIZE] = {0}; char response[BUFFER_SIZE] = {0}; int sock; struct sockaddr_in serv_addr; printf("Resolving %s's IP =>\n", domain); if (get_ip_from_dns(domain, ip) < 0) { printf("Failed to resolve domain\n"); return -1; } // Step 2: Connect to the search engine server printf("Resolved IP from rns: %s\n", ip); sock = socket(AF_INET, SOCK_STREAM, 0); if (sock < 0) { perror("Socket creation error"); return -1; } serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(V12_PORT); if (inet_pton(AF_INET, ip, &serv_addr.sin_addr) <= 0) { perror("Invalid address / Address not supported"); return -1; } if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { perror("Connection failed"); return -1; } printf("Enter search query: "); fflush(stdout); fgets(query, BUFFER_SIZE, stdin); query[strcspn(query, "\n")] = '\0'; // Remove the newline character send(sock, query, strlen(query), 0); printf("Repositories found:\n"); while (read(sock, response, BUFFER_SIZE) > 0) { printf("%s", response); memset(response, 0, BUFFER_SIZE); // Clear the buffer for the next read } close(sock); return 0; }