Skip to main content

ARP/RARP full simulation program

server.c

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/types.h"
#include "sys/socket.h"
#include "arpa/inet.h"
#include "netinet/in.h"
#define SA struct sockaddr

struct IPmac {
			 char ip[100];
			 char mac[100];
	   };


int main() {
	   int sockfd,len,i;
	   struct sockaddr_in servaddr;
	   char buff[30],temp[30],ip[30],mac[30];
	   int flag=0;

	   struct IPmac in[3]={ 
			 {"10.1.1.8","44:dd:22:11:33"},
			 {"127.0.0.1","33:aa:fe:4e:2d"},
			 {"10.1.8.5","23:a3:5d:33:9d"}
	    };

	   //printing table
	   printf("ip\t\tmac\n");
	   for(i=0;i<3;i++) 
	   {
			 printf("%s\t%s\n",in[i].ip,in[i].mac);
	   }

	   //create socket
	   sockfd = socket(AF_INET,SOCK_DGRAM,0);

	   //fill structure
	   servaddr.sin_family = AF_INET;
	   servaddr.sin_port = htons(9999);
	   servaddr.sin_addr.s_addr = INADDR_ANY;

	   //bind
	   bind(sockfd,(SA*)&servaddr,sizeof(servaddr));

	   //get ip from client
	   len=sizeof(servaddr);
	   recvfrom(sockfd,ip,sizeof(ip),0,(SA*)&servaddr,&len);

	   for(i=0;i<strlen(ip)-1;i++) {
			 temp[i]=ip[i];
	   }
	   temp[i]='\0';
	   printf("received IP :%s\n",temp);

	   //searching in table for equivalent mac
	   for(i=0;i<3;i++) {
			 if(strcmp(temp,in[i].ip)==0) {
				    strcpy(mac,in[i].mac);
				    break;
			 }
	   }

	   printf("mac address is %s\n",mac);
	   sendto(sockfd,mac,sizeof(mac),0,(SA*)&servaddr,len);

	   //rarp simulation
	   //recv mac address
	   bzero(mac,sizeof(mac));
	   recvfrom(sockfd,mac,sizeof(mac),0,(SA*)&servaddr,&len);
	   printf("received mac address :%s",mac);
	   //store in temp
	   bzero(temp,sizeof(temp));
	   for(i=0;i<strlen(mac)-1;i++) {
			 temp[i]=mac[i];
	   }
	   temp[i]='\0';
	   bzero(ip,sizeof(ip));

	   //check in table
	   for(i=0;i<3;i++) {
			 if(strcmp(temp,in[i].mac)==0) {
				    strcpy(ip,in[i].ip);
				    break;
			 }
	   }
	   printf("ip address :%s\n",ip);
	   sendto(sockfd,ip,sizeof(ip),0,(SA*)&servaddr,len);
	   return 0;
}


client.c

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "sys/types.h"
#include "sys/socket.h"
#include "arpa/inet.h"
#include "netinet/in.h"
#define SA struct sockaddr

int main() {
	   int sockfd,len;
	   char ip[30],mac[30];
	   struct sockaddr_in servaddr;

	   //creating socket
	   sockfd = socket(AF_INET,SOCK_DGRAM,0);

	   //fill structure
	   servaddr.sin_family = AF_INET;
	   servaddr.sin_port = htons(9999);
	   servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");

	   //send ip address
	   printf("ARP SIMULATION\n");
	   printf("enter ip address :");
	   fgets(ip,sizeof(ip),stdin);
	   sendto(sockfd,ip,sizeof(ip),0,(SA*)&servaddr,sizeof(servaddr));
	   len=sizeof(servaddr);
	   recvfrom(sockfd,mac,sizeof(mac),0,(SA*)&servaddr,&len);
	   printf("MAC address is: %s\n",mac);

	   printf("RARP simulation\n");
	   printf("enter mac address :");
	   bzero(mac,sizeof(mac));
	   fgets(mac,sizeof(mac),stdin);
	   sendto(sockfd,mac,sizeof(mac),0,(SA*)&servaddr,len);
	   recvfrom(sockfd,ip,sizeof(ip),0,(SA*)&servaddr,&len);
	   printf("IP address is: %s\n",ip);

	   return 0;
}

Comments

Post a Comment

Popular posts from this blog

கட்டற்றமென்பொருள் பற்றிய மாத மின்இதழ்

உலகெங்கிலும் உள்ள தமிழ் மக்களுக்கு கணினிதொழில்நுட்பத்தை பற்றி அறிமுகம் செய்யும் கணியம் என்ற புதிய மாத மின்னிதழை வெளியிடுவதில் பெருமகிழ்ச்சி அடைகிறோம். கணினி கற்க ஆங்கிலம் தடையாக இருந்த காலம் மாறி தொழில்னுட்பங்கள் யாவும் தமிழில் பெருகும் இந்த காலத்தில் மென்பொருள் பற்றிய நுட்பங்களை தமிழில் வழங்குவதில் பெருமை கொள்கிறோம். இந்த இதழின் கட்டுரைகள் : கட்டற்ற மென்பொருள் லினக்ஸ் பயனர் குழு – ஓர் அறிமுகம் உபுண்டு நிறுவுதல்

படங்களை 700mbயில் தரமாக உருமாற்றம் செய்ய

நம்மிடம் இருக்கும் டிவிடிபடங்களில் பிடித்தவற்றை அவ்வப்போது பார்த்துக்கொள்ள நாம் அவற்றை தனியாகவோ அல்லது, இமேஜாகவோ காபி செய்து வைத்துக்கொள்வோம். அவை அதிக இடத்தை பிடித்துக்கொள்ளும் ஒவ்வொன்றும் படத்திற்கேற்ற மாதிரி 2 முதல் 4 ஜிபி வரை கொள்ளளவு கொண்டிருக்கும். எனவே நாம் அவற்றை அதன் அளவில் குறைத்து அதனை வேறு உருமாட்டில் சேமித்து வைத்துக்கொள்ள விரும்புவோம். அவ்வாறு அதனை மாற்றுவதால் நம்முடைய கணினியின் இடம் மிச்சமாகிறது, மேலும் எளிதாக அவற்றை நம் நண்பர்களுடன் பகிர்ந்து கொள்ளலாம். அளவில் குறைவாக இருப்பதால் இணையத்திலும் அவற்றை ஏற்றி அதனை மற்றவர்களுடன் எளிதாக பகிர்ந்துகொள்ளலாம். ஆனால் இதில் இருக்கும் ஒரு குறைபாடு அதன் தரம். அதில் மாற்றத்தை நன்றாக பார்க்கமுடியும். சில மாற்றப்பட்ட வீடியோக்கள் தரம் குறைவாக இருக்கும். வீடியோ கன்வர்ட்டர்களை பயன்படுத்தும் பலருக்கு இது நன்கு தெரிந்திருக்கும். இணையங்களில் டோரண்ட்களை பயன்படுத்தி படம் இறக்குபவர்க்கள் 700mb களில் தரமான படங்கள் இருப்பதை பார்த்திருக்கலாம். நாம் எவ்வாறு இதுபோன்று தரமாக வீடியோக்களை மாற்றுவது என்று பார்ப்போம்.

சிடி/டிவிடிகளை காப்பி செய்யாதீர்கள்.

நாம் பொதுவாக டிவிடி படங்களை நம்முடைய கணினிகளில் டிவிடி டிரைவ்களில் போட்டு பார்ப்பது பழக்கம். நாம் நண்பர்களிடம் இருந்தோ அல்லது வேறுயாரிடமாவது இருந்தோ படங்களை வாங்கி உடனே பார்த்துவிட்டு தருவதற்கு முடியவில்லை என்றால் நாம் படங்களை காப்பி செய்து அதனை நம் கணினீயில் சேமிப்போம். அவ்வாறு சேமித்த படங்களை டிவிடி டிரைவில் போட்டு பார்ப்பது போன்றே சௌகரியமாக பார்ப்பது என்பது இயலாது. ஒவ்வொரு fileஐயும் நாம் விடியோ ப்ளேயரில் திறக்க வேண்டும். அதில் பலவிதமான fileகள் இருக்கும். நாம் ஒவ்வொன்றாக திறந்து நாம் பார்க்க வேண்டிய அந்த படத்தை பார்ப்பதற்குள் நேரம் ஆகிவிடும். சில fileகள் ஒழுங்காக காப்பி ஆகியிருக்காது. சில டிவிடிக்கள் காப்பி ஆக மறுக்கும்.