[go: up one dir, main page]

0% found this document useful (0 votes)
36 views7 pages

CN Lab Program 9

The document contains a C program that implements applications using TCP and UDP sockets, specifically for DNS, SNMP, and file transfer. It includes server and client functions for each application, allowing for domain name resolution, network management, and file sharing. The main menu enables users to select the desired application and mode (server or client) for execution.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
36 views7 pages

CN Lab Program 9

The document contains a C program that implements applications using TCP and UDP sockets, specifically for DNS, SNMP, and file transfer. It includes server and client functions for each application, allowing for domain name resolution, network management, and file sharing. The main menu enables users to select the desired application and mode (server or client) for execution.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

Program 9:- Applications using TCP and UDP sockets like d.DNS e. SNMP f.

File transfer

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <arpa/inet.h>

#include <fcntl.h>

#define BUFFER_SIZE 1024

// =================== DNS (UDP) =====================

void dns_server() {

int sockfd;

char buffer[BUFFER_SIZE];

struct sockaddr_in servaddr, cliaddr;

socklen_t len = sizeof(cliaddr);

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(5353);

servaddr.sin_addr.s_addr = INADDR_ANY;

bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));

printf("DNS Server ready...\n");


recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&cliaddr, &len);

printf("Client asked for domain: %s\n", buffer);

char *response = "142.250.182.206"; // IP for google.com

sendto(sockfd, response, strlen(response), 0, (struct sockaddr*)&cliaddr, len);

close(sockfd);

void dns_client() {

int sockfd;

char buffer[BUFFER_SIZE] = "google.com";

struct sockaddr_in servaddr;

socklen_t len = sizeof(servaddr);

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(5353);

servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr*)&servaddr, len);

recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&servaddr, &len);

printf("DNS Response: %s\n", buffer);

close(sockfd);

}
// =================== SNMP (UDP) =====================

void snmp_server() {

int sockfd;

char buffer[BUFFER_SIZE];

struct sockaddr_in servaddr, cliaddr;

socklen_t len = sizeof(cliaddr);

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(161);

servaddr.sin_addr.s_addr = INADDR_ANY;

bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));

printf("SNMP Server ready...\n");

recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&cliaddr, &len);

printf("SNMP Request: %s\n", buffer);

char *response = "Uptime: 10234 seconds";

sendto(sockfd, response, strlen(response), 0, (struct sockaddr*)&cliaddr, len);

close(sockfd);

void snmp_client() {
int sockfd;

char buffer[BUFFER_SIZE] = "GET uptime";

struct sockaddr_in servaddr;

socklen_t len = sizeof(servaddr);

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(161);

servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

sendto(sockfd, buffer, strlen(buffer), 0, (struct sockaddr*)&servaddr, len);

recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&servaddr, &len);

printf("SNMP Response: %s\n", buffer);

close(sockfd);

// =================== File Transfer (TCP) =====================

void file_server() {

int sockfd, new_sock;

struct sockaddr_in servaddr, cliaddr;

socklen_t len = sizeof(cliaddr);

char buffer[BUFFER_SIZE];

sockfd = socket(AF_INET, SOCK_STREAM, 0);

servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(2121);

servaddr.sin_addr.s_addr = INADDR_ANY;

bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));

listen(sockfd, 1);

printf("File Server waiting for connection...\n");

new_sock = accept(sockfd, (struct sockaddr*)&cliaddr, &len);

printf("Client connected.\n");

int file = open("file.txt", O_RDONLY);

int n;

while ((n = read(file, buffer, sizeof(buffer))) > 0) {

send(new_sock, buffer, n, 0);

close(file);

close(new_sock);

close(sockfd);

printf("File sent.\n");

void file_client() {

int sockfd;

struct sockaddr_in servaddr;

char buffer[BUFFER_SIZE];
sockfd = socket(AF_INET, SOCK_STREAM, 0);

servaddr.sin_family = AF_INET;

servaddr.sin_port = htons(2121);

servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));

printf("Connected to file server.\n");

int file = open("received.txt", O_WRONLY | O_CREAT, 0666);

int n;

while ((n = recv(sockfd, buffer, sizeof(buffer), 0)) > 0) {

write(file, buffer, n);

close(file);

close(sockfd);

printf("File received and saved as 'received.txt'\n");

// =================== MAIN MENU =====================

int main() {

int choice, mode;

printf("Select Application:\n");

printf("1. DNS (UDP)\n");


printf("2. SNMP (UDP)\n");

printf("3. File Transfer (TCP)\n");

printf("Enter choice: ");

scanf("%d", &choice);

printf("Select Mode:\n1. Server\n2. Client\nEnter: ");

scanf("%d", &mode);

if (choice == 1 && mode == 1) dns_server();

else if (choice == 1 && mode == 2) dns_client();

else if (choice == 2 && mode == 1) snmp_server();

else if (choice == 2 && mode == 2) snmp_client();

else if (choice == 3 && mode == 1) file_server();

else if (choice == 3 && mode == 2) file_client();

else printf("Invalid choice.\n");

return 0;

You might also like