This is a socre code to detect a change in an IP address on a Mobile Node

 

/* Detecting end-of-file. */


#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define BUFSIZE 50
char OldIP[100];
char holdOldIP[100];
char wirelessname[4];
char wirelessIP[50];
char command[50];
char interface_address[50];
char wired_interface_address[50];
char wiredIP[50];
//char holdOldIP[100];

int main( void )
{
while(1)
{
getOldIP();
wireless();
IP();

printf("OldIP = %s\n",OldIP);
printf("holdOldIP = %s\n",holdOldIP);
printf("wirelessname = %s\n", wirelessname);
printf("Sleeping \n\n");
sleep(10);
}



return 0;
}

int getOldIP()
{

char buf[BUFSIZE]; //temporary buffer
int i=0;
FILE *fp;
char *length;
int lengthofstr = 0;



/* Open the file for reading. */
if ( (fp = fopen("OldIP.txt", "r")) == NULL)
{
fprintf(stderr, "Error opening file.");
exit(1);
}

/* If end of file not reached, read a line and display it. */


fgets(buf, BUFSIZE, fp);
lengthofstr = strlen(buf);
sprintf(holdOldIP,"%s",buf);
//printf("holdOldIP = %s",holdOldIP);
// sprintf(holdOldIP,"%s",buf);

fclose(fp);
//printf("OldIP = %s\n",OldIP);


for (i = 0; i < lengthofstr; i++)
{
if (buf[i] == '/')
{
break;
}
else
{
OldIP[i] = buf[i];
}
}
OldIP[i+1] = '/0';
//IP = temp;
return 1;
}

int IP()
{
FILE *fpipe;
int lengthofstr = 0;
int i;

{
sprintf (command,"ifconfig %s | grep Scope:G | awk -F ' ' '{print $3}'",wirelessname);
//system (command);
//fpipe is a temp file
fpipe = (FILE*)popen(command,"r");

if (fpipe == null)
{
return -1;
}

wirelessIP[0] = '\0';

fgets(wirelessIP, 50, fpipe);

// printf("fpipe = %s",wirelessIP);

pclose(fpipe);


if (wirelessIP[0] == '\0' )
{
printf("Unable to find Wireless IP. Checking Lan \n");
lanIP();
compareIP();
}
else
{
printf("wirelessIP = %s\n", wirelessIP);
lengthofstr = strlen(wirelessIP);

for (i = 0; i < lengthofstr; i++)
{
if (wirelessIP[i] == '/')
{
break;
}
else
{
interface_address[i] = wirelessIP[i];
}
}
interface_address[i+1] = '\0';
//printf("interface_address = %s\n", interface_address);

if(strcmp(wirelessIP,holdOldIP) == 0)
{
printf("same IPaddress\n");
lanIP();

}
else
{
//printf("from main");

if (SplitIPforWireless()==-1)
{
return -1;
}
if (sendupdate()== -1)
{
return -1;
}

}
}


}

return 1;
}

int wireless() //open a wireless file and get only a name of wireless card
{
char buf[1500]; //temporary buffer
FILE *fp;
int i=0;

char *length;
int lengthofstr = 0;



/* Open the file for reading. */
if ( (fp = fopen("/proc/net/wireless", "r")) == NULL)
{
fprintf(stderr, "Error opening file.");
return -1;
//exit(1);
}

/* If end of file not reached, read a line and display it. */


fgets(buf, 1500, fp);
fgets(buf, 1500, fp);
buf[0] = '\0';
fgets(buf, 1500, fp);

fclose(fp);
for ( i = 0; i < 4; i++)
{
wirelessname[i] = buf[i+2];
}
return 1;

}

int lanIP() // To check wired IP
{
FILE *fpipe;
int lengthofstr = 0;
int i;
//char ethWire = "eth0";


sprintf (command,"ifconfig eth0 | grep Scope:G | awk -F ' ' '{print $3}'");
//system (command);
//fpipe is a temp file
fpipe = (FILE*)popen(command,"r");

if (fpipe == null)
{
printf("LanIP: fpipe = null");
return -1;

}
fgets(wiredIP, 50, fpipe);

pclose(fpipe);


lengthofstr = strlen(wiredIP);

for (i = 0; i < lengthofstr; i++)
{
if (wiredIP[i] == '/')
{
break;
}
else
{
wired_interface_address[i] = wiredIP[i];
}
}
wired_interface_address[i+1] = '\0';
printf("wiredIP = %s\n", wiredIP);
printf("wired_interface_address = %s\n", wired_interface_address);

return 1;
}

int sendupdate() // wireless update
{
FILE *fp;

int i;
char *buf[6];
char buffer[BUFSIZE];
buf[0] = "server ns1.mylinux.lan";
buf[1] = "zone mylinux.lan.";
buf[2] = "update delete eins.mylinux.lan. AAAA";

char *IP = interface_address;
char buf4[80] = "update add eins.mylinux.lan. 86400 IN AAAA ";
strcat(buf4,IP);

buf[3] = buf4;
buf[4] = "send";

if ( (fp = fopen("my-nsupdate1.txt", "w")) == NULL)
{
fprintf(stderr, "Error opening file.");
return -1;
//exit(1);
}



for(i=0; i < 5; i++)
{
fprintf(fp,buf[i]);
fprintf(fp, "\n");
}

fclose(fp);



if ( (fp = fopen("OldIP.txt", "w")) == NULL)
{
fprintf(stderr, "Error opening file.");
return -1;
//exit(1);
}

fgets(buffer, BUFSIZE, fp);

fprintf(fp,wirelessIP);
fclose(fp);

system("/home/pangcake/Desktop/do-nsupdate.sh my-nsupdate.txt");

return 1;
}

int LANsendupdate()
{
FILE *fp;

int i;
char *buf[6];
buf[0] = "server ns1.mylinux.lan";
buf[1] = "zone mylinux.lan.";
buf[2] = "update delete eins.mylinux.lan. AAAA";

char *IP = wired_interface_address;
char buf4[80] = "update add eins.mylinux.lan. 86400 IN AAAA ";
strcat(buf4,IP);

buf[3] = buf4;
buf[4] = "send";

// printf("updatinglan %s",IP);

if ( (fp = fopen("my-nsupdate1.txt", "w")) == NULL)
{
fprintf(stderr, "Error opening file.");
return -1;
//exit(1);
}



for(i=0; i < 5; i++)
{
fprintf(fp,buf[i]);
fprintf(fp, "\n");
}

fclose(fp);

if ( (fp = fopen("OldIP.txt", "w")) == NULL)
{
fprintf(stderr, "Error opening file.");
return -1;
//exit(1);
}

fprintf(fp,wiredIP);
fclose(fp);

system("/home/pangcake/Desktop/do-nsupdate.sh my-nsupdate.txt");

return 1;
}

void compareIP() // compare old IP and new IP of wired
{

if(strcmp(wiredIP,holdOldIP) == 0)
{
printf("same IPaddress\n");
//exit(1);

}
else
{
printf("LANsendupdate\n");
SplitIP();
LANsendupdate();
}
}

void SplitIP()
{


//char *str = "1aa:2bb:000:000:5ee:6ff:7gg:8hh";
char subst[8][5];
int lengthofstr = strlen(wired_interface_address);
int nextStr = 0;
int charIndex = 0;
int i;


for (i = 0; i < lengthofstr; i++)
{
if (wired_interface_address[i] == ':')
{
subst[nextStr][charIndex] = '\0';
nextStr++;
charIndex = 0;
//printf("Next %i \n",nextStr);

}
else
{
subst[nextStr][charIndex] = wired_interface_address[i];
charIndex++;
}
}
subst[7][charIndex] = '\0';

if(nextStr == 8)//xxxx:xxxx:xxxx:Xxxx:xxxx:xxxx:xxxx:xxxx
{
if(subst[2] != '\0')
{
sprintf(wired_interface_address,"%s:%s::%s:%s:%s:%s",subst[0],subst[1],subst[4],subst[5],subst[6],subst[7]);
printf("split wired_interface_address = %s \n",wired_interface_address);
printf("split wired_interface_address = %s \n",wired_interface_address);
}
}
else if(nextStr == 7)//xxxx:xxxx:xxxx:Xxxx:xxxx:xxxx:xxxx
{
if(subst[2] != '\0')
{

sprintf(wired_interface_address,"%s:%s::%s:%s:%s",subst[0],subst[1],subst[4],subst[5],subst[6]);
printf("split wired_interface_address = %s \n",wired_interface_address);
printf("split wired_interface_address = %s \n",wired_interface_address);
}
}
else if(nextStr == 6)//xxxx:xxxx:xxxx:Xxxx:xxxx:xxxx
{
if(subst[2] != '\0')
{

sprintf(wired_interface_address,"%s:%s::%s:%s",subst[0],subst[1],subst[4],subst[5]);
printf("split wired_interface_address = %s \n",wired_interface_address);
printf("split wired_interface_address = %s \n",wired_interface_address);
}
}
else if(nextStr == 5)//xxxx:xxxx:xxxx:Xxxx:xxxx
{
if(subst[2] != '\0')
{
sprintf(wired_interface_address,"%s:%s::%s",subst[0],subst[1],subst[4]);
printf("split wired_interface_address = %s \n",wired_interface_address);
printf("split wired_interface_address = %s \n",wired_interface_address);
}
}
}

void SplitIPforWireless()
{
char subst[8][5];
int lengthofstr = strlen(interface_address);
int nextStr = 0;
int charIndex = 0;
int i;


for (i = 0; i < lengthofstr; i++)
{
if (interface_address[i] == ':')
{
subst[nextStr][charIndex] = '\0';
nextStr++;
charIndex = 0;
//printf("Next %i \n",nextStr);

}
else
{
subst[nextStr][charIndex] = interface_address[i];
charIndex++;
}
}
subst[7][charIndex] = '\0';

if(nextStr == 8)//xxxx:xxxx:xxxx:Xxxx:xxxx:xxxx:xxxx:xxxx
{
if(subst[2] != '\0')
{
sprintf(wired_interface_address,"%s:%s::%s:%s:%s:%s",subst[0],subst[1],subst[4],subst[5],subst[6],subst[7]);
printf("split wired_interface_address = %s \n",wired_interface_address);
printf("split wired_interface_address = %s \n",wired_interface_address);
}
}
else if(nextStr == 7)//xxxx:xxxx:xxxx:Xxxx:xxxx:xxxx:xxxx
{
if(subst[2] != '\0')
{

sprintf(wired_interface_address,"%s:%s::%s:%s:%s",subst[0],subst[1],subst[4],subst[5],subst[6]);
printf("split wired_interface_address = %s \n",wired_interface_address);
printf("split wired_interface_address = %s \n",wired_interface_address);
}
}
else if(nextStr == 6)//xxxx:xxxx:xxxx:Xxxx:xxxx:xxxx
{
if(subst[2] != '\0')
{

sprintf(wired_interface_address,"%s:%s::%s:%s",subst[0],subst[1],subst[4],subst[5]);
printf("split wired_interface_address = %s \n",wired_interface_address);
printf("split wired_interface_address = %s \n",wired_interface_address);
}
}
else if(nextStr == 5)//xxxx:xxxx:xxxx:Xxxx:xxxx
{
if(subst[2] != '\0')
{
sprintf(wired_interface_address,"%s:%s::%s",subst[0],subst[1],subst[4]);
printf("split wired_interface_address = %s \n",wired_interface_address);
printf("split wired_interface_address = %s \n",wired_interface_address);
}
}


}


 

Domain Name System for Locator Identity Mapping

 


 

Home

Dissertation Report

Mobile Node Program

Mapping Table Program

Correspondent Node Program

Shell Script