0% found this document useful (0 votes)
3 views

NETWORK PROGRAMMING LAB

Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

NETWORK PROGRAMMING LAB

Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 48

1

Exeperiment1:

AIM: Implement the data link layer framing methods such as character stuffing and bit stuffing.

CHARACTER STUFFINIG

DESCRIPTION:

The first framing method is used in the header to specify the number of characters in frame.

In second method delimit by DLESTX DLEETX.

One way to solve this is to have the senders data link layer, insert an ASCII DLE char just
before each accidental flag bit character in data.
FOR EXAMPLE:

‘AB’

Data send by network layer is A B X.

Data after being character stuffing by data link layer DLE STX A DLE ETX.

After destuffing we get original data.

i.e., AB \0

BIT STUFFING:

DESCRIPTION:

Starting and ending flags with bit stuffing is one of the framing methods to specify the number
of characters or bits in a frame.

Each frame in this techniques begins and ends with a special bit pattern 01111110 called a
flag byte.

Whenever the sender’s data link layer encodes five consecutive ones in the data, it automatically stuffs
a 0 bit into the outgoing bit stream.

FOR EXAMPLE:

Original data

011011111111111111110010

Data as they appear on the line

01101111101111101111100010
ACOE NETWORK PROGRAMMING LAB CSE
2

Stuffed Bits

Data stored in the receiver’s memory after destuffing

011011111111111111110010

C CODE FOR BIT STUFFING:

#include<stdio.h>

#include<conio.h>

void ins(char,int);

void del(int);

char fr[50];

main()

int i,cnt=0;

clrscr();

printf("Enter the frame:\t");

gets(fr);

for(i=0;i<strlen(fr);i++)

if(fr[i]!='0'&&fr[i]!='1')

printf("ivalid input\n press any key to exit");

getch();

exit(0);
ACOE NETWORK PROGRAMMING LAB CSE
3

/*Stuffing the given bit*/

for(i=0;i<strlen(fr);i++)

if(cnt==5)

cnt=0;

ins('0',i);

if(fr[i]=='1'){cnt+=1;}else{cnt=0;}

printf("\n\nStuffed Frame is \t%s\n\n",fr);

getch();

/*Destuffing of aframe*/

cnt=0;

for(i=0;i<strlen(fr);i++)

if(cnt==5)

cnt=0;

del(i);

if(fr[i]=='1'){cnt+=1;}else{cnt=0;}

}
ACOE NETWORK PROGRAMMING LAB CSE
4

printf("Destuffed Frame is \t%s",fr);

getch();

return 0;

void ins(char in,int p)

char dup[50];

int i;

strcpy(dup,fr);

fr[p]=in;

for(i=p+1;i<strlen(fr)+1;i++)

fr[i]=dup[i-1];

void del(int q)

int i;

for(i=q;i<strlen(fr);i++)

fr[i]=fr[i+1];

OUTPUT:

ACOE NETWORK PROGRAMMING LAB CSE


5

CODE FOR CHARACTER STUFFING

#include<stdio.h>

#include<conio.h>

void ins(char,int);

void del(int,int);

char fr[50];

main() {

int i,cnt=0,ch;

clrscr();

printf("Enter the frame:\t");

gets(fr);

/*Charecter Stuffing*/

ins('s',0);

ins('e',5);

//printf("%s",fr);

for(i=0;i<strlen(fr);i++)

ACOE NETWORK PROGRAMMING LAB CSE


6

if(fr[i]=='d'&&fr[i+1]=='l'&&fr[i+2]=='e'&&i!=3&&i!=strlen(fr)-3)

ins('m',i+3);i+=6;

printf("\n\nStuffed bit is \t%s\t",fr);getch();

/*Destuffing*/

cnt=0;

del(0,6);

del(strlen(fr)-6,6);

for(i=0;i<strlen(fr);i++) {

if(fr[i]=='d'&&fr[i+1]=='l'&&fr[i+2]=='e')

cnt+=1;

if(cnt==1)

{ del(i,3);}

}else

{cnt=0;}

printf("\n\nDestuffed bit is \t%s",fr);getch();

return 0;

void ins(char in,int p) {

char dup[50];

int i;
ACOE NETWORK PROGRAMMING LAB CSE
7

strcpy(dup,fr);

if(in=='s')

fr[p]='s';

fr[p+1]='t';

fr[p+2]='x';

fr[p+3]='d';

fr[p+4]='l';

fr[p+5]='e';

for(i=p+6;i<strlen(fr)+6;i++) {

fr[i]=dup[i-6];

if(in=='e')

strcat(fr,"etxdle");return;

if(in=='m')

fr[p]='d';

fr[p+1]='l';

fr[p+2]='e';

for(i=p+3;i<strlen(fr)+3;i++)

fr[i]=dup[i-3];
ACOE NETWORK PROGRAMMING LAB CSE
8

void del(int q,int n)

int i;

for(i=q;i<strlen(fr);i++)

fr[i]=fr[i+n];

OUTPUT:

ACOE NETWORK PROGRAMMING LAB CSE


9

Exeperiment2:

AIM: To write a program for implementing on a data set characters the three CRC polynomials – CSR12,
CRC16 and CRC CCIP
Description: Calculation of Polynomial Code (CRC) Checksum
1. For degree of generating polynomial G(x) = r , append r zero bits to low-order of frame. The
frame now has m+r bits.
2. Divide the bit string corresponding to G(X) into the bit string xrM(x) mod(2)
3. Subtract the remainder R(x) from the bit string xrM(x) mod(2)
Frame: 1 1 0 1 0 1 1 0 1 1 Generator: 1 0 0 1 1 G(X) = X4 + X + 1
Message after appending four 0’s: 1 1 0 1 0 1 1 0 1 1 0 0 0 0
Remainder: 1110 Transmitted Frame: 1 1 0 1 0 1 1 0 1 1 1 1 1 0
Common CRC Generator Polynomials

CRC-32: x32 + x 26 + x 23 + x22 + x16 + x12 + x11 +x10 + x8 + x7 + x5 + x4 + x2 + x


+ 1 Used in FDDI, Ethernet.
CRC-CCITT: x16 + X12 + x5 + 1 Used in HDLC.
8 2
CRC-8: x + x + x+ 1 Used in ATM.
PROGRAM FOR CYCLIC REDUNDENCY CHECK
#include<stdio.h>
#include<conio.h>
int gen[4],genl,frl,rem[4];
void main()
{
int i,j,fr[8],dupfr[11],recfr[11],tlen,flag;
clrscr();
frl=8; genl=4;
printf("enter frame:");
for(i=0;i<frl;i++)
{
scanf("%d",&fr[i]);
dupfr[i]=fr[i];
}
printf("enter generator:");
for(i=0;i<genl;i++)
scanf("%d",&gen[i]);

tlen=frl+genl-1;
for(i=frl;i<tlen;i++)
{
dupfr[i]=0;
}
remainder(dupfr);

for(i=0;i<frl;i++)
{
ACOE NETWORK PROGRAMMING LAB CSE
10

recfr[i]=fr[i];
}
for(i=frl,j=1;j<genl;i++,j++) {
recfr[i]=rem[j];
}
remainder(recfr);
flag=0;
for(i=0;i<4;i++) {
if(rem[i]!=0)
flag++;
}
if(flag==0) {
printf("frame received correctly");
}
Else {
printf("the received frame is wrong");
}
getch();
}
remainder(int fr[]) {
int k,k1,i,j;
for(k=0;k<frl;k++) {
if(fr[k]==1)
{
k1=k;
for(i=0,j=k;i<genl;i++,j++) {
rem[i]=fr[j]^gen[i];
}
for(i=0;i<genl;i++) {
fr[k1]=rem[i];
k1++;
}
}
}

INPUT:
enter frame :
11111111
enter generator :
1101

OUTPUT:
frame received correctly

ACOE NETWORK PROGRAMMING LAB CSE


11

Exeperiment3:

AIM: Implement Dijkstra’s algorithm to compute the Shortest path through graph.

DESCRIPTION: Dijkstra’s algorithm solves the simple source shortest paths problem on a
weighted, directed graph. G=(V,E) for the case in which all weights are non negative.The algorithm
repeatedly selects the vertex v belong s to v-s with the minimum shortest path estimate add

C CODE FOR SHORTEST PATH ROUTING

#include<stdio.h>

#include<string.h>

main()

int n,ds[30][30],s,d,pr[30],ln[30],st[30],pt[30],i,j,u,mn=10000;

clrscr();

printf("\n enter the no of nodes");

scanf("%d",&n);

for(i=0;i<n;i++)

for(j=0;j<n;j++)

printf("\nenter the weight from node %d to %d ",(i+1),(j+1));

scanf("%d",&ds[i][j]);

st[i]=0;

ln[i]=10000;

pr[i]=-1;

ACOE NETWORK PROGRAMMING LAB CSE


12

printf("enter the source and destination nodes ");

scanf("%d %d",&s,&d);

s--; d--; u=s;

ln[u]=0;

pr[u]=-1;

st[u]=2;

do {

for(i=0;i<n;i++) {

if(ds[u][i]!=0 && st[i]!=2) {

st[i]=1;

if((ln[u]+ds[u][i])<ln[i]) {

pr[i]=u;

ln[i]=ln[u]+ds[u][i];

mn=10000;

for(i=0;i<n;i++)

if(st[i]==1 && ln[i]<mn )

mn=ln[i];

u=i;

}while(u!=d);

i=0;
ACOE NETWORK PROGRAMMING LAB CSE
13

u=d;

do {

pt[i]=u;

i++;

u=pr[u];

}while(u>=0);

pt[i]='\0';

s++;

d++;

printf("\n the shortest from %d to %d is %d",s,d,ln[d-1]);

printf("\npath is ");

for(u=i-1;u>=0;u--)

printf("\t %d ",(pt[u]+1));

getch();

OUTPUT:

ACOE NETWORK PROGRAMMING LAB CSE


14

Exeperiment4:

Take an example subnet graph with weights indicating delay between nodes. Now obtain Routing table at
each node using distance vector routing algorithm.

DESCRIPTION:

In distance vector routing, each router periodically shares its knowledge about the entire internet with
its neighbors.

The three keys to understanding how this algorithm works are as follows:

Sharing knowledge about the entire autonomous system.

Sharing only with neighbors.

Sharing at regular intervals.

Every router keeps a routing table that has one entry for each destination network which the router aware.

C CODE FOR DISTANCE VECTOR ROOTING

#include<stdio.h>
#include<conio.h>
#include<string.h>
main()

char c1[]={'A','I','H','K','\0'};

char c2[]={'A','B','C','D','E','F','G','H','I','J','K','L'};

int doj[]={8,10,12,6};

int i,j,min,delay[5][12],res,k=0,l=0,pre[5];

clrscr();

for(i=0;i<4;i++)

for(j=0;j<12;j++)

printf("\nenter delay from %c to %c",c1[i],c2[i]);


ACOE NETWORK PROGRAMMING LAB CSE
15

scanf("%d",&delay[i][j]);

min=1000;

for(j=0;j<12;j++)

for(i=0;i<4;i++)

res=delay[i][j]+doj[i];

if(res<min)

min=res;

k=i;

delay[4][j]=min;

pre[l++]=k;

min=1000;

clrscr();

for(i=0;i<12;i++)

if(i==9)

delay[4][j]=0;

printf("\nDelay from j to %c is %d",c2[i],delay[4][j]);


ACOE NETWORK PROGRAMMING LAB CSE
16

if(i!=9)

printf("\t by the mode %c",c1[pre[i]]);

else

printf("\t by the node");

getch();}

ACOE NETWORK PROGRAMMING LAB CSE


17

ACOE NETWORK PROGRAMMING LAB CSE


18

Exeperim
ent5:

AIM: Take an example subnet of hosts, Obtain broadcast tree for it.

DESCRIPTION:

Krushkers algorithm is used to obtain the broadcast tree from the given subnet.

This algorithm constructs a minimal spanning tree for a connected weighted graph G.

FOR EXAMPLE:

V1 16 V2

19 21 11 6 5

33 V6 14 V3

ACOE NETWORK PROGRAMMING LAB CSE


19

10

V5 18 V4

EDGE COST

V2-V3 5

V2-V4 6

V4-V3 10

V2-V6 11

V4-V6 14

V2-V1 16

V4-V5 18

V5-V1 19

V1-V6 21

V5-V6 23

Choose the edge V2-V3.

V2

V3

Add the next edge with minimum weight.

V2

6 5

V4

V3
ACOE NETWORK PROGRAMMING LAB CSE
20

Reject the edge V4-V3 because it forms loop.

Add the edge V2-V6.

Reject V4-V6 since it forms loop.

Similarly add the edges V2-V1, V4-V5

V2

11

6 5

V6 V4 V3

V2

V1 16 11 6 5

V5 18 V6 V4 V3

All the vertices of G are covered weight=5+6+11+16+18=56.

C CODE FOR BROADCAST ROUTING:

#include<stdio.h>

struct ed {

int v1,v2,w;

edj[20],temp;

main() {

int i,j,n=0,s,d,par[20],s1,d1;

clrscr();

printf("\n enter no of edges");

scanf("%d",&n);

for(i=0;i<n;i++) {
ACOE NETWORK PROGRAMMING LAB CSE
21

printf("\n enter the node1,node2,seight");

scanf("%d%d%d",&edj[i].v1,&edj[i].v2,&edj[i].w);

par[i]=0;

for(i=0;i<n;i++) {

for(j=0;j<=i;j++)

if(edj[j].w>edj[i].w) {

temp=edj[i];

edj[i]=edj[j];

edj[j]=temp;

for(i=0;i<n;i++)

printf("\n values %d\t%d\t%d\n",edj[i].v1,edj[i].v2,edj[i].w);

printf("\n BROADCAST TREE FOR THE GIVEN GRAPH\n");

for(i=0;i<n;i++) {

s=edj[i].v1;

d=edj[i].v2;

s1=s;

d1=d;

while(par[s1]>0)

s1=par[s1];

while(par[d1]>0)

d1=par[d1];

if(s1!=d1) {
ACOE NETWORK PROGRAMMING LAB CSE
22

par[d]=s;

printf("\n%d\t%d\t%d\n",s,d,edj[i].w);

} }

getch();

OUTPUT:

Exeperiment6:

AIM:To writea Cprogramto develop a DNSclientserverto resolvethegivenhostnam

Program :#include<std
io.h>#include<stdlib.h>
#include<errno.h>#incl
ude<netdb.h>#include<
sys/
types.h>#include<sys/
socket.h>#include<neti
net/in.h>
intmain(intargc,char*argv[1])
{
struct hostent *hen;if(argc!=2) {

fprintf(stderr,"Enterthehostname\

ACOE NETWORK PROGRAMMING LAB CSE


23

n");exit(1);
}
hen=gethostbyname(argv[1]);if(hen==
NULL)
{
fprintf(stderr,"Hostnotfound\n");
}
printf("Hostnameis%s\n",hen->h_name);
printf("IPaddressis%s\n",inet_ntoa(*((structin_addr*)hen->h_addr)));
}
OUTPUT
Thus the above program udp performance using domain name server was executed
successfully.

Outcome:
To understand theDNS client server for resolving the host name.

ACOE NETWORK PROGRAMMING LAB CSE


24

Exeperiment7:

AIM:To write a client-server application for chat using UDP

Filename: UDPServer.c
// Server side implementation of UDP client-server model
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>

void main(int argc, char **argv){


if(argc != 2){
printf("Usage: %s <port>\n", argv[0]);
exit(0);
}

int port = atoi(argv[1]);


int sockfd;
struct sockaddr_in si_me, si_other;
char buffer[1024];
socklen_t addr_size;

sockfd = socket(AF_INET, SOCK_DGRAM, 0);

memset(&si_me, '\0', sizeof(si_me));


si_me.sin_family = AF_INET;
si_me.sin_port = htons(port);
si_me.sin_addr.s_addr = inet_addr("127.0.0.1");
ACOE NETWORK PROGRAMMING LAB CSE
25

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


addr_size = sizeof(si_other);
recvfrom(sockfd, buffer, 1024, 0, (struct sockaddr*)& si_other, &addr_size);
printf("[+]Data Received: %s", buffer);

Filename: UDPClient.c
// Client side implementation of UDP client-server model

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <arpa/inet.h>

void main(int argc, char **argv){

if(argc != 2){

printf("Usage: %s <port>\n", argv[0]);

exit(0);

int port = atoi(argv[1]);

int sockfd;

ACOE NETWORK PROGRAMMING LAB CSE


26

struct sockaddr_in serverAddr;

char buffer[1024];

socklen_t addr_size;

sockfd = socket(PF_INET, SOCK_DGRAM, 0);

memset(&serverAddr, '\0', sizeof(serverAddr));

serverAddr.sin_family = AF_INET;

serverAddr.sin_port = htons(port);

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

strcpy(buffer, "Hello Server\n");

sendto(sockfd, buffer, 1024, 0, (struct sockaddr*)&serverAddr, sizeof(serverAddr));

printf("[+]Data Send: %s", buffer);

}Output :
cc server.c
$ ./a.out 1234
Client : Hello from client
Hello message sent.
Cc client.c
$ ./a.out 1234
Hello message sent.
Server : Hello from server

ACOE NETWORK PROGRAMMING LAB CSE


27

Exeperiment8:
AIM:To implement programs using raw sockets (like packet capturing and filtering).

Program:
#include<unistd.h>

#include<stdio.h>

#include<sys/
socket.h>#include<neti
net/ip.h>

#include<netinet/tcp.h>
//Packetlength
#definePCKT_LEN8192
//Maycreateseparateheaderfile(.h)forall
//headers'structures
// IP header's
structurestructipheade
r{
unsignedchariph_ihl:5,/*Little-endian*/
iph_ver:4;
unsigned chariph_tos;unsignedshortintiph_len;unsignedshortintiph_ident;unsigned
chariph_flags;unsignedshortintiph_offset;unsigned
chariph_ttl;unsignedchariph_protocol;unsignedshortint
iph_chksum;unsignedintiph_sourceip;unsignedintiph_destip;
};
/*StructureofaTCPheader
*/structtcpheader{
unsignedshortinttcph_srcport;un
signed short int
tcph_destport;unsignedinttcph_s
eqnum;unsignedint
ACOE NETWORK PROGRAMMING LAB CSE
28

tcph_acknum;
unsignedchartcph_reserved:4,tcph_offset:4;
//
unsignedchartcph_flags;un
signedint
tcp_res1:4,/*little-endian*/
tcph_hlen:4, /*lengthoftcpheaderin32-bitwords*/
tcph_fin:1,/*Finishflag"fin"*/
tcph_syn:1, /*Synchronizesequencenumbersto
startaconnection*/tcph_rst:1,/*Resetflag*/
tcph_psh:1,/*Push,sendsdatatotheapplication*/
tcph_ack:1,
/*acknowledge*/tcph_urg:1, /
*urgent pointer*/tcph_res2:2;
unsignedshort inttcph_win;unsignedshortinttcph_chksum;unsignedshortinttcph_urgptr;
};
//Simplechecksumfunction,mayuseotherssuchasCyclicRedundancyCheck,CRC
unsignedshortcsum(unsignedshort*buf,intlen)
{
unsignedlong
sum;for(sum=0; len>0;
len--)sum+=*buf++;
sum=(sum>>16)+
(sum&0xffff);sum+=(sum>>16);
return(unsignedshort)(~sum);
}
intmain(intargc,char*argv[])
{
intsd;
//
Nodata,justdatagramchar

ACOE NETWORK PROGRAMMING LAB CSE


29

buffer[PCKT_LEN];
// Thesizeoftheheaders
structipheader *ip =(struct ipheader*) buffer;structtcpheader *tcp=(structtcpheader*)
(buffer+sizeof(structipheader));

structsockaddr_insin,din;i
ntone= 1;
constint*val=
&one;memset(buffer,0,PCKT_
LEN);
if(argc!=5)
{
printf("-Invalidparameters!!!\n");
printf("- Usage:%s<sourcehostname/IP><sourceport>
<target hostname/IP><target port>\n",
argv[0]);exit(-1);
}
sd=socket(PF_INET,SOCK_RAW, IPPROTO_TCP);
if(sd <0)
{
perror("socket()
error");exit(-1);
}
else
printf("socket()-SOCK_RAWand tcp protocolisOK.\n");
//Thesourceisredundant, maybeusedlater ifneeded
//
Addressfamilysin.sin_famil
y=
AF_INET;din.sin_family=
AF_INET;
//Sourceport,canbeany,modifyasneededsin.sin_port =
ACOE NETWORK PROGRAMMING LAB CSE
30

htons(atoi(argv[2]));din.sin_port=htons(atoi(argv[4]));
//SourceIP,canbeany,modifyas
neededsin.sin_addr.s_addr=inet_addr(argv[1]);din.sin_addr.s_addr=inet_addr(argv[3]);
// IP
structureip-
>iph_ihl=5;

ip->iph_ver =4;
ip->iph_tos= 16;
ip->iph_len=sizeof(structipheader)+sizeof(structtcpheader);
ip->iph_ident =
htons(54321);ip->iph_offset=
0;
ip->iph_ttl= 64;
ip->iph_protocol= 6;//TCP
ip->iph_chksum= 0;//Done bykernel
//
SourceIP,modifyasneeded,spoofed,weacceptthroughcomm
andlineargument
ip->iph_sourceip=inet_addr(argv[1]);
//DestinationIP, modifyasneeded, buthereweacceptthroughcommandlineargument
ip->iph_destip= inet_addr(argv[3]);
//TheTCPstructure.Thesourceport,spoofed,weacceptthroughthecommandline
tcp->tcph_srcport=htons(atoi(argv[2]));
//Thedestinationport, weacceptthroughcommandlinetcp->tcph_destport=htons(atoi(argv[4]));
tcp->tcph_seqnum=htonl(1);tcp->tcph_acknum=0;
tcp->tcph_offset=5;
tcp->tcph_syn= 1;
tcp->tcph_ack= 0;
tcp->tcph_win=htons(32767);
tcp->tcph_chksum = 0; // Done by kerneltcp->tcph_urgptr=0; //IPchecksumcalculation

ACOE NETWORK PROGRAMMING LAB CSE


31

ip->iph_chksum = csum((unsigned short *) buffer,(sizeof(structipheader)


+sizeof(structtcpheader)));

// Informthe kerneldonotfillupthe headers'structure,we fabricatedourown


if(setsockopt(sd,IPPROTO_IP,IP_HDRINCL,val,sizeof(one)) <0)
{
perror("setsockopt()
error");exit(-1);
}
else
printf("setsockopt()isOK\n");
printf("Using:::::SourceIP:%sport:%u,Target IP:
%sport: %u.\
n",argv[1],atoi(argv[2]),argv[3],atoi(argv[4]));
//sendto() loop,sendevery2secondfor 50countsunsignedintcount;
for(count=0;count< 20;count++)
{
if(sendto(sd,buffer,ip->iph_len,0,(structsockaddr *)&sin,sizeof(sin))<0) //Verify
{
perror("sendto()
error");exit(-1);
}
else
printf("Count #%u - sendto() is OK\n", count);sleep(2);
}
close(sd);
return0;
}

RESULT:
Thus the Above programs using raw sockets TCP \IP (like packet capturing and filtering) was
executed successfully.

ACOE NETWORK PROGRAMMING LAB CSE


32

Outcome:
To understand packet filtering and capturing using raw sockets.

ACOE NETWORK PROGRAMMING LAB CSE


33

Exeperiment9:

AIM:To write a C program to perform sliding window.

PROGRAM:

#include<stdio.h>

#include<conio.h>

void main()

char sender[50],receiver[50];

int i,winsize;

clrscr();

printf("\n ENTER THE WINDOWS SIZE : ");

scanf("%d",&winsize);

ACOE NETWORK PROGRAMMING LAB CSE


34

printf("\n SENDER WINDOW IS EXPANDED TO STORE MESSAGE OR WINDOW \n");


printf("\n ENTER THE DATA TO BE SENT: ");
fflush(stdin);
gets(sender);
for(i=0;i<winsize;i++)
receiver[i]=sender[i];
receiver[i]=NULL;
printf("\n MESSAGE SEND BY THE SENDER:\n");
puts(sender);
printf("\n WINDOW SIZE OF RECEIVER IS EXPANDED\n");
printf("\n ACKNOWLEDGEMENT FROM RECEIVER \n");
for(i=0;i<winsize;i++);
printf("\n ACK:%d",i);
printf("\n MESSAGE RECEIVED BY RECEIVER IS : ");
puts(receiver);
printf("\n WINDOW SIZE OF RECEIVER IS SHRINKED \n");
getch();
}

Output:

ENTER THE WINDOW SIZE:4

SENDER WINDOW IS EXPANDED TO STORE MESSAGE OR WINDOW

ENTER THE DATA TO BE SENT:3

MESSAGE SEND BY THE SENDER:3

WINDOW SIZE OF RECEIVER IS EXPANDED

ACKNOWLEDGEMENT FROM RECEIVER

ACOE NETWORK PROGRAMMING LAB CSE


35

ACK:4

MESSAGE RECEIVED BY RECEIVER IS :3

WINDOW SIZE OF RECEIVER IS SHRINKED

ACOE NETWORK PROGRAMMING LAB CSE


36

Exeperiment 10:

AIM:To gettheMAC orPhysicaladdressofthesystemusing AddressResolutionProtocol.

Program:

#include<sys/types.h>

#include<sys/socket.h>

#include<net/if_arp.h>

#include<sys/ioctl.h>

#include<stdio.h>

#include<string.h>

#include<unistd.h>

#include<math.h>

#include<complex.h>

#include<arpa/inet.h>

#include<netinet/in.h>

#include<netinet/if_ether.h>

#include<net/ethernet.h>

#include<stdlib.h>

int main(int argc,char *argv[])

struct sockaddr_in sin={0};

struct arpreq myarp={{0}};

unsigned char *ptr;

int sd;

sin.sin_family=AF_INET;

ACOE NETWORK PROGRAMMING LAB CSE


37

if(inet_aton(argv[1],&sin.sin_addr)==0)

printf("IP address Entered '%s' is not valid \n",argv[1]);

exit(0);

memcpy(&myarp.arp_pa,&sin,sizeof(myarp.arp_pa));

strcpy(myarp.arp_dev,"echo");

sd=socket(AF_INET,SOCK_DGRAM,0);

if(ioctl(sd,SIOCGARP,&myarp)==1)

printf("No Entry in ATP cache for '%s'\n",argv[1]);

exit(0);

ptr=&myarp.arp_pa.sa_data[0];

printf("\nMAC Address for '%s' : ",argv[1]);

printf("%x:%x:%x:%x:%x:%x\n",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));

printf("\n\t\t\t\t%x:%x:%x:%x:%x:%x\n", myarp.arp_ha.sa_data[0],

myarp.arp_ha.sa_data[1], myarp.arp_ha.sa_data[2],

myarp.arp_ha.sa_data[3], myarp.arp_ha.sa_data[4], myarp.arp_ha.sa_data[5]);

return 0;

Output:

ACOE NETWORK PROGRAMMING LAB CSE


38

ACOE NETWORK PROGRAMMING LAB CSE


39

Exeperiment 11:

AIM:TosimulatetheImplementingRoutingProtocolsusingbordergatewayprotocol(BGP)

Program:
#include<stdio.h>
main()
{
int i,n,j,k,a[10][10],b[10][10];
printf("ENTER THE NO OF NODES");
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("ENTER THE DISTANCE BETWEEN HOSTS %d,%d :",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
printf("THE GIVEN INPUT\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]>a[i][k]+a[k][j])
ACOE NETWORK PROGRAMMING LAB CSE
40

{
a[i][j]=a[i][k]+a[k][j];
}
}
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
b[i][j]=a[i][j];
if(i==j)
b[i][j]=0;
}
}
printf("OUTPUT MATRIX \n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",b[i][j]);
}
printf("\n");
}
}
OUTPUT:

[20mh1a4917@localhost]$cc protocol.c
[[20mh1a4917@localhost s]$./a.out
Enter the no of nodes: 2
ENTER THE DISTANCE BETWEEN HOSTS 1 1:1
ENTER THE DISTANCE BETWEEN HOSTS 1 2:2

ACOE NETWORK PROGRAMMING LAB CSE


41

ENTER THE DISTANCE BETWEEN HOSTS 2 1:3


ENTER THE DISTANCE BETWEEN HOSTS 2 2:4
The given output
12
34
Output Matrix
02
30

ACOE NETWORK PROGRAMMING LAB CSE


42

Exeperiment 12:

AIM: To simulate the OPEN SHORTEST PATH FIRST outing protocol based on the cost assign
edge to the path.

PROGRAM:
#include<stdio.h>
#include<conio.h>
inta[5][5],n,i,j;

void main() {

voidgetdata();
void shortest();

void display();

clrscr();
printf("\n\nPROGRAMTOFINDSHORTEST PATHBETWEENTWONODES\
n");
getdata();
shortest();
display();
getch();
}
void getdata()
{
clrscr();
printf("\n\nENTERTHENUMBEROFHOSTINTHEGRAPH\n");
scanf("%d",&n);
printf("\n\nIFTHEREISNODIRECTPATH\n");
printf("\n\nASSIGNTHEHIGHESTDISTANCE VALUE1000\n");
for(i=0;i<n;i++)
{a[i]
[j]=0;

ACOE NETWORK PROGRAMMING LAB CSE


43

for(j=0;j<n;j++)
{
if(i!=j)
{
printf("\n\nENTERTHEDISTANCEBETWENN(%d,
%d):",i+1,j+1);
scanf("%d",&a[i]
[j]);if(a[i][j]==0)
a[i][j]=1000;
}
}}}
void shortest() {
inti,j,k;for(k=0;k<n;k++)for(i=0;i<n;i++)for(j=0;j<n;j++) {

if(a[i][k]+a[k][j]<a[i][j])
a[i][j]=a[i][k]+a[k][j];
}
}
void display()
{
inti,j;

for(i=0;i<n;i++)

for(j=0;j<n;j++)if(i!=j)
{
printf("\nSHORTEST PATHIS:(%d,%d)--%d\n",i+1,j+1,a[i][j]);
}
getch();
}
OUTPUT:
ThustheaboveprogramtosimulatetheImplementingRoutingProtocolsusingopenshortestpathfirst(
OSPF)was executedandsuccessfully.
ACOE NETWORK PROGRAMMING LAB CSE
44

Outcome:To understandtheimplementationofOPENSHORTESTPATHFIRSTforfindingthe
shortestpathbetweensourceanddestination.

Exeperiment13:

Aim: Implementation of Select system call.

#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

int main(void) {
fd_set rfds;
struct timeval tv;
int retval;

/* Watch stdin (fd 0) to see when it has input. */


FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Wait up to five seconds. */
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);

if (retval == -1)
perror("select()");
else if (retval)
printf("Data is available now.\n");
else
printf("No data within five seconds.\n");
return 0;
}

Sample Input and Output:


cc sel.c
./a.out
hai
Data is available now.

ACOE NETWORK PROGRAMMING LAB CSE


45

Exeperiment 14

Aim: Implementation of remote command execution using socket system calls

rceserver.c

#include<string.h>

#include<stdio.h>

#include<netinet/in.h>

#include<fcntl.h>

int main()

char sendline[400],recvline[400];

int servsocket,connfd,fd,clilen;

struct sockaddr_in servaddr, cliaddr;

servsocket=socket(AF_INET,SOCK_STREAM,0);

bzero(&servaddr,sizeof(servaddr));

servaddr.sin_family=AF_INET;

servaddr.sin_port=htons(2536);

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

listen(servsocket,1);

while(1)

clilen=sizeof(cliaddr);

connfd=accept(servsocket,(struct sockaddr*)&cliaddr,&clilen);

read(connfd,recvline,400);

printf("\n Command received from client is: %s",recvline);

strcat(recvline,">file.txt");
ACOE NETWORK PROGRAMMING LAB CSE
46

system(recvline);

fd=open("file.txt",O_RDONLY,666);

read(fd,sendline,400);

write(connfd,sendline,400);

printf("\n Output of command sent sucessfully to client");

rceclient.c

#include<string.h>

#include<stdio.h>

#include<netinet/in.h>

int main()

char sendline[400],recvline[400];

int clisocket;

struct sockaddr_in servaddr;

clisocket=socket(AF_INET,SOCK_STREAM,0);

bzero(&servaddr,sizeof(servaddr));

servaddr.sin_family=AF_INET;

servaddr.sin_port=htons(2536);

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

printf("\n Enter any shell command \n");

scanf("%s",sendline);

write(clisocket,sendline,400);
ACOE NETWORK PROGRAMMING LAB CSE
47

printf("\n command send to server");

read(clisocket,recvline,400);

printf("\n Output from server is: %s",recvline);

SAMPLE INPUT AND OUTPUT

Server

Command received from client is: date

Output of command sent sucessfully to client

Client

Enter any shell command

date

command send to server

Output from server is: Thu Jan 3 12:40:43 IST 2019

ACOE NETWORK PROGRAMMING LAB CSE


48

ACOE NETWORK PROGRAMMING LAB CSE

You might also like