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

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

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

விண்டோஸை விட லினக்ஸ் சிறந்தது: பத்து காரணங்கள்

லினக்ஸ் பயன்படுத்த கடினம், விண்டோஸே சிறந்தது என கருதுபவர்களுக்காக 1. வைரஸ் அபாயம் கிடையாது: ஆம். பொரும்பாலான வைரஸ் நிரல்கள் விண்டோஸிற்காக எழுதப்படுபவை. லினக்ஸால் win32  நிரல்களை  செயல்படுத்த முடியாது. எனவே வைரஸ் வரும் என்ற கவலை வேண்டாம். 2. திற-மூலமென்பொருள் - விண்டோஸ் போல் அல்லாமல் லினக்ஸ் ஆனது திற-மூல-இயங்குதளம்(open-source).  எனவே நம்முடைய தேவைக்கு ஏற்ப நாம் இதனை மாற்றவே, பிறருக்கு அளிக்கவோ முழு சுதந்திரம் உண்டு.

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

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