102 lines
2.3 KiB
C
102 lines
2.3 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <arpa/inet.h>
|
|
|
|
#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;
|
|
}
|
|
|