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கள் ஒழுங்காக காப்பி ஆகியிருக்காது. சில டிவிடிக்கள் காப்பி ஆக மறுக்கும்.

need your response

It has been a long time... my rest hours are reduced i only sleep for 5 to 6 hours a day.. so i can't post frequently.. sorry friends.. my university is a good place to refine myself. yes..! thoughts about my programming computers are refined there.. i always wanted share my experience.. but i feared of thinking that it will helpful for you or not.. most of us don't like to hear stories of others. so i stopped blogging and of course having less time.. i have earned some good friends there... who are interested in open-source technology.. very few of us only know the linux platform.. this semester mini project also in open softwares like mysql, postgrey sql i will start blogging my experience if you are interested.. regards, Mani G