Académique Documents
Professionnel Documents
Culture Documents
The
The
The
The
The
Open
Open
Open
Open
Open
Port
Port
Port
Port
Port
Number
Number
Number
Number
Number
is
is
is
is
is
=
=
=
=
=
22
25
111
631
694
*********************************************************************
___________________________________________________________________________
// 2) Echo server (TCP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<error.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define BUFFER 1024
main(int argc,char **argv)
{
struct sockaddr_in client_c;
int sock;
int data_len;
char data_in[BUFFER];
char data_out[BUFFER];
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("\nsocket creation error");
}
memset(&client_c,0,sizeof(client_c));
client_c.sin_family=AF_INET;
client_c.sin_port=htons(atoi(argv[2]));
client_c.sin_addr.s_addr=inet_addr(argv[1]);
bzero(&client_c.sin_zero,8);
if((connect(sock,(struct sockaddr *)&client_c,sizeof(struct sockaddr_in)
))<0)
{
perror("\nconnection fail");
}
while(1)
{
fgets(data_in,BUFFER,stdin);
send(sock,data_in,strlen(data_in),0);
data_len=recv(sock,data_out,BUFFER,0);
data_out[data_len]='\0';
printf("\necho msg:%s",data_out);
if((strcmp(data_out,"over\n"))==0)
break;
}
printf("\n\nConnection terminated.....\n\n");
close(sock);
}
1024
2
perror("\nbind fail");
}
if((listen(sock,MAX_CLIENT))<0)
{
perror("\nlisten fail");
}
while(1)
{
printf("\nWaiting for clients.....\n\n");
if((new=accept(sock,(struct sockaddr *)&client,&len))<0)
{
perror("\nlisten fail");
}
printf("\nnew client is connected with ip %s and port %d\n",inet_ntoa(cl
ient.sin_addr),ntohs(client.sin_port));
while(1)
{
data_len=recv(new,data,BUFFER,0);
data[data_len]='\0';
if(data_len)
{
printf("\nclient msg:%s",data);
send(new,data,data_len,0);
if((strcmp(data,"over\n"))==0)
}
}
close(new);
printf("\nconnection terminated........\n\n");
}
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc 2an_s.c
[root@station154 ~]# ./a.out 3333
Waiting for clients.....
new client is connected with ip 127.0.0.1 and port 36502
client msg:hi
*********************************************************************
___________________________________________________________________________
close(sock);
}
2
1024
}
while(1)
{
data_len = recvfrom(sock, data, MAX_DATA, 0,(struct socka
ddr *)&client,&len);
data[data_len] = '\0';
if(data_len)
{
printf("\nclient msg: %s\n",data);
sendto(sock,data,strlen(data),0,(struct sockaddr
*)&client,len);
if((strcmp(data,"over\n"))==0)
break;
}
}
printf("\nClient disconnected...........\n\n");
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc 3an_s.c
[root@station154 ~]# ./a.out 3333
Waiting for clients.....
new client is connected with ip 127.0.0.1 and port 36502
client msg:hello
*********************************************************************
___________________________________________________________________________
// 4) Date & Time server (TCP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#define BUFFER 1024
main(int argc, char **argv)
{
struct sockaddr_in server;
int sock;
char input[BUFFER];
char output[BUFFER];
int len;
if((sock = socket(AF_INET,SOCK_STREAM,0))== -1)
{
perror("socket");
exit(-1);
}
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[2]));
server.sin_addr.s_addr = inet_addr(argv[1]);
bzero(&server.sin_zero,8);
if((connect(sock, (struct sockaddr *)&server, sizeof(struct sockaddr_in)
)) == -1)
{
perror("connect");
exit(-1);
}
len = recv(sock,output,BUFFER,0);
output[len] = '\0';
printf("\n%s\n",output);
close(sock);
}
**********************Client -- Output *****************************
[root@station154 ~]# gcc 3an_c.c
[root@station154 ~]# ./a.out 127.0.0.1 3333
time
Tue 2011-05-24 17:30:34 IST
*********************************************************************
// Server Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<time.h>
#define MAX_CLIENTS
#define BUFFER 1024
now = time(NULL);
/* Format and print the time, "ddd yyyy-mm-dd hh:mm:ss zzz" */
ts = localtime(&now);
strftime(repl, sizeof(repl), "%a %Y-%m-%d %H:%M:%S %Z", ts);
send(new, repl, strlen(repl), 0);
data[data_len] = '\0';
close(new);
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc 3an_s.c
[root@station154 ~]# ./a.out 3333
New Client connected from port no 44100 and IP 127.0.0.1
*********************************************************************
___________________________________________________________________________
// 5) Date & Time server (UDP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#define BUFFER 1024
main(int argc, char **argv)
{
struct sockaddr_in server;
int sock,data_in;
char input[BUFFER];
char output[BUFFER];
int len = sizeof(struct sockaddr_in);
if((sock = socket(AF_INET,SOCK_DGRAM,0)) < 0)
{
perror("socket");
exit(-1);
}
memset(&server,0,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[2]));
server.sin_addr.s_addr = inet_addr(argv[1]);
bzero(&server.sin_zero,8);
while(1)
{
fgets(input,BUFFER,stdin);
sendto(sock,input,strlen(input),0,(struct sockaddr *)&server,len
);
memset(&output[0],0,sizeof(output));
data_in = recvfrom(sock,output,BUFFER,0,(struct sockaddr *)&ser
ver, &len);
output[len] = '\0';
if(data_in)
{
printf("\necho msg: %s",output);
if((strcmp(output,"over\n"))==0)
break;
}
}
printf("\nconnection terminated...........\n\n");
close(sock);
}
2
1024
printf("\nClient disconnected...........\n\n");
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc 5an_s.c
[root@station154 ~]#./a.out 3333
client msg: time
*********************************************************************
___________________________________________________________________________
// 6) Random Number Generator (TCP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<error.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define BUFFER 1024
main(int argc,char **argv)
{
struct sockaddr_in client;
int sock;
int data_len;
char data_in[BUFFER];
char data_out[BUFFER];
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("\nsocket creation error");
}
memset(&client,0,sizeof(client));
client.sin_family=AF_INET;
client.sin_port=htons(atoi(argv[2]));
client.sin_addr.s_addr=inet_addr(argv[1]);
bzero(&client.sin_zero,8);
if((connect(sock,(struct sockaddr *)&client,sizeof(struct sockaddr_in)))
<0)
{
perror("\nconnection fail");
}
while(1)
{
printf("\n\n\nEnter \"over\" for termination");
printf("\nEnter \"random\" for getting Random number:");
fgets(data_in,BUFFER,stdin);
send(sock,data_in,strlen(data_in),0);
if((strcmp(data_in,"over\n"))==0)
break;
memset(&data_out,0,sizeof(data_out));
data_len=recv(sock,data_out,BUFFER,0);
data_out[data_len]='\0';
if(data_len)
printf("\nServer:%s\n\n",data_out);
}
printf("\n\nConnection terminated.....\n\n");
close(sock);
}
1024
2
int sock,new,data_len;
int len=sizeof(struct sockaddr_in);
char data[BUFFER];
unsigned int iseed;
int i;
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("\nsocket connection fail");
}
memset(&server,0,sizeof(server));
memset(&client,0,sizeof(client));
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[1]));
server.sin_addr.s_addr=INADDR_ANY;
bzero(&server.sin_zero,8);
if(bind(sock,(struct sockaddr *)&server,len)<0)
{
perror("\nbind fail");
}
if((listen(sock,MAX_CLIENT))<0)
{
perror("\nlisten fail");
}
while(1)
{
printf("\nWaiting for clients.....\n\n");
if((new=accept(sock,(struct sockaddr *)&client,&len))<0)
{
perror("\nlisten fail");
}
printf("\nnew client is connected with ip %s and port %d\n",inet_ntoa(cl
ient.sin_addr),ntohs(client.sin_port));
while(1)
{
memset(&data,0,sizeof(data));
data_len=recv(new,data,BUFFER,0);
data[data_len]='\0';
if(data_len)
{
printf("\nclient msg:%s",data);
if((strcmp(data,"over\n"))==0)
break;
if((strcmp(data,"random\n"))==0)
{
iseed = (unsigned int)time(NULL);
srand (iseed);
i=rand();
printf ("\nrandom number=%u\n",i);
sprintf(data,"%d",i);
}
else
{
strcpy(data,"enter proper command");
}
send(new,data,strlen(data),0);
}
}
close(new);
printf("\nconnection terminated........\n\n");
}
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc 6an_s.c
[root@station154 ~]# ./a.out 3333
Waiting for clients.....
new client is connected with ip 127.0.0.1 and port 35195
client msg:random
random number=398771428
*********************************************************************
___________________________________________________________________________
// 7) Random Number Generator (UDP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#define ERROR -1
#define MAX_DATA
#define BUFFER 1024
1024
{
struct sockaddr_in server,client;
int sock;
char input[BUFFER];
char output[BUFFER];
int len = sizeof(struct sockaddr_in);
int n;
if((sock = socket(AF_INET,SOCK_DGRAM,0))==ERROR)
{
perror("socket");
exit(-1);
}
client.sin_family = AF_INET;
client.sin_port = htons(atoi(argv[2]));
client.sin_addr.s_addr = inet_addr(argv[1]);
bzero(&client.sin_zero,8);
n=1;
while(1)
{
fgets(input,BUFFER,stdin);
sendto(sock,input,strlen(input),0,(struct sockaddr *)&client,len
);
n = recvfrom(sock,output,BUFFER,0,(struct sockaddr *)&server, &l
en);
printf("\nRandom Number is = %s\n",output);
output[n]='\0';
}
close(sock);
}
**********************Client -- Output *****************************
[root@station154 ~]# gcc 7an_c.c
[root@station154 ~]# ./a.out 127.0.0.1 3333
random
Random Number is = 1214252602
*********************************************************************
// Server Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<time.h>
#define MAX_CLIENTS
#define MAX_DATA
2
1024
#define BUFFER 85
main(int argc, char **argv)
{
struct sockaddr_in server,client;
int sock,data_len,i=0;
int len = sizeof(struct sockaddr_in);
char data[MAX_DATA];
time_t
now;
struct tm *ts;
char repl[BUFFER];
unsigned int iseed;
if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
perror("server socket: ");
exit(-1);
}
memset(&server,0,sizeof(server));
memset(&client,0,sizeof(client));
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[1]));
server.sin_addr.s_addr = INADDR_ANY;
bzero(&server.sin_zero, 8);
if((bind(sock, (struct sockaddr *)&server, len)) < 0)
{
perror("bind : ");
exit(-1);
}
while(1)
{
data_len = recvfrom(sock, data, MAX_DATA, 0,(struct socka
ddr *)&client,&len);
data[data_len] = '\0';
if(data_len)
{
iseed = (unsigned int)time(NULL);
srand(iseed);
i = rand();
printf("\n Random Number = %u\n", i);
sprintf(data,"%d",i);
sendto(sock,data,strlen(data),0,(struct sockaddr
*)&client,len);
}
}
printf("\nClient disconnected...........\n\n");
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc 7an_s.c
[root@station154 ~]# ./a.out 3333
Random Number = 1214252602
*********************************************************************
___________________________________________________________________________
// 8) Basic Calculator (TCP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<error.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define BUFFER 1024
main(int argc,char **argv)
{
struct sockaddr_in client;
int sock;
int data_len;
char equ[BUFFER];
char result[BUFFER];
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("\nsocket creation error");
}
memset(&client,0,sizeof(client));
client.sin_family=AF_INET;
client.sin_port=htons(atoi(argv[2]));
client.sin_addr.s_addr=inet_addr(argv[1]);
bzero(&client.sin_zero,8);
if((connect(sock,(struct sockaddr *)&client,sizeof(struct sockaddr_in)))
<0)
{
perror("\nconnection fail");
}
while(1)
{
1024
2
char data[BUFFER];
char ex,no1[BUFFER],no2[BUFFER];
int i,count,i1,i3,cntr;
float val1,val2,answer;
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("\nsocket connection fail");
}
memset(&server,0,sizeof(server));
memset(&client,0,sizeof(client));
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[1]));
server.sin_addr.s_addr=INADDR_ANY;
bzero(&server.sin_zero,8);
if(bind(sock,(struct sockaddr *)&server,len)<0)
{
perror("\nbind fail");
}
if((listen(sock,MAX_CLIENT))<0)
{
perror("\nlisten fail");
}
while(1)
{
printf("\nWaiting for clients.....\n\n");
if((new=accept(sock,(struct sockaddr *)&client,&len))<0)
{
perror("\nlisten fail");
}
printf("\nnew client is connected with ip %s and port %d\n",inet_ntoa(cl
ient.sin_addr),ntohs(client.sin_port));
while(1)
{
memset(&data,0,sizeof(data));
memset(&no1,0,sizeof(no1));
memset(&no2,0,sizeof(no2));
i1=0;
i3=0;
count=0;
cntr=0;
data_len=recv(new,data,BUFFER,0);
data[data_len]='\0';
if(data_len)
{
printf("\nclient msg:%s",data);
if((strcmp(data,"over\n"))==0)
break;
for(i=0;i<strlen(data);i++)
{
if(data[i] == ' ')
{
count++;
}
else
{
if(count==0)
{
no1[i1]=data[i];
i1++;
}
else if(count==1)
{
ex=data[i];
}
else
{
no2[i3]=data[i];
i3++;
}
}
}
val1 = atoi(no1);
val2 = atoi(no2);
switch(ex)
{
case '+':
{
answer = val1 + val2;
break;
}
case '-':
{
answer = val1 - val2;
break;
}
case '*':
{
answer = val1 * val2;
break;
}
case '/':
{
answer = val1 / val2;
break;
}
default:
{
strcpy(data,"syntex error.....");
cntr++;
}
}
if (cntr == 0)
sprintf(data,"%f",answer);
send(new,data,data_len,0);
}
}
close(new);
printf("\nconnection terminated........\n\n");
}
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc 8an_s.c
[root@station154 ~]# ./a.out 3333
Waiting for clients.....
new client is connected with ip 127.0.0.1 and port 54699
client msg:12 - 5
*********************************************************************
___________________________________________________________________________
// 9) Basic Calculator (UDP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#define BUFFER 1024
main(int argc, char **argv)
{
struct sockaddr_in server;
int sock,data_in,i=0;
int temp=0;
char input[BUFFER];
char output[BUFFER];
char ciper[BUFFER];
int len = sizeof(struct sockaddr_in);
if((sock = socket(AF_INET,SOCK_DGRAM,0)) < 0)
{
perror("socket");
exit(-1);
}
memset(&server,0,sizeof(server));
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[2]));
server.sin_addr.s_addr = inet_addr(argv[1]);
bzero(&server.sin_zero,8);
while(1)
{
);
memset(&output[0],0,sizeof(output));
data_in = recvfrom(sock,output,BUFFER,0,(struct sockaddr *)&ser
ver, &len);
output[len] = '\0';
if(data_in)
{
printf("\nCalculated Result = %s",output);
/*
for(i=0; i<strlen(output); i++)
{
printf("%c", output[i]);
}*/
if((strcmp(output,"over\n"))==0)
break;
}
}
printf("\nconnection terminated...........\n\n");
close(sock);
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<time.h>
#define MAX_CLIENTS
#define MAX_DATA
#define BUFFER 85
2
1024
{
strcpy(repl,token);
printf("The token is = %s\n", token);
if(strcmp(repl,"+")==0)
{
op=1;
i--;
}
else if(strcmp(repl,"-")==0)
{
op=2;
i--;
}
else if(strcmp(repl,"*")==0)
{
op=3;
i--;
}
else if(strcmp(repl,"/")==0)
{
op=4;
i--;
}
else
{
result[i] = atoi(repl);
}
token = strtok(NULL,delims);
i++;
}
if(op == 1)
final
if(op == 2)
final
if(op == 3)
final
if(op == 4)
final
= result[0]+result[1];
= result[0]-result[1];
= result[0]*result[1];
= result[0]/result[1];
i = 0;
data[data_len] = '\0';
if(data_len)
{
//printf("\nCipertext = %s\n",data);
printf("Expression Result = %d\n",final);
sprintf(data,"%d",final);
sendto(sock,data,strlen(data),0,(struct sockadd
r *)&client,len);
if((strcmp(data,"over\n"))==0)
break;
}
}
printf("\nClient disconnected...........\n\n");
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc 9an_s.c
[root@station154 ~]# ./a.out 3333
Client Expression = 22 / 2
The token is = 22
The token is = /
The token is = 2
Expression Result = 11
*********************************************************************
___________________________________________________________________________
// 10) Quote server (TCP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<error.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define BUFFER 1024
main(int argc,char **argv)
{
struct sockaddr_in client;
int sock;
int data_len,counter=1;
char data_in[BUFFER];
char data_out[BUFFER];
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("\nsocket creation error");
}
memset(&client,0,sizeof(client));
client.sin_family=AF_INET;
client.sin_port=htons(atoi(argv[2]));
client.sin_addr.s_addr=inet_addr(argv[1]);
bzero(&client.sin_zero,8);
if((connect(sock,(struct sockaddr *)&client,sizeof(struct sockaddr_in)))
<0)
{
perror("\nconnection fail");
}
while(1)
{
printf("\n\n\nEnter \"over\" for termination");
printf("\nEnter \"qotd\" for getting Quote Of The Day:");
fgets(data_in,BUFFER,stdin);
send(sock,data_in,strlen(data_in),0);
if((strcmp(data_in,"over\n"))==0)
break;
memset(&data_out,0,sizeof(data_out));
data_len=recv(sock,data_out,BUFFER,0);
data_out[data_len]='\0';
if(data_len)
printf("\nServer: %s\n\n",data_out);
}
printf("\n\nConnection terminated.....\n\n");
close(sock);
}
#define BUFFER
#define MAX_CLIENT
1024
2
printf("\nclient msg:%s",data);
if((strcmp(data,"over\n"))==0)
break;
if((strcmp(data,"qotd\n"))==0)
{
iseed = (unsigned int)time(NULL);
srand (iseed);
i=rand();
ans=i%10;
printf ("\nrandom number=%u\n",ans);
strcpy(data,quote[ans]);
}
else
{
strcpy(data,"enter proper command");
}
send(new,data,strlen(data),0);
}
}
close(new);
printf("\nconnection terminated........\n\n");
}
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]#gcc 10an_s.c
[root@station154 ~]#./a.out 3333
Waiting for clients.....
new client is connected with ip 127.0.0.1 and port 38572
client msg:1
client msg:qotd
random number=6
*********************************************************************
___________________________________________________________________________
// 11) Quote server (UDP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#define ERROR -1
#define MAX_DATA
#define BUFFER 1024
1024
2
1024
}
else
{
printf("%d",data_out[i]);
}
}
}
close(sock);
}
**********************Client -- Output *****************************
[root@station154 ~]# gcc 12an_c.c
[root@station154 ~]# ./a.out 127.0.0.1 3333
Enter the IP address = 192.168.12.3
Enter the MASK address = 255.255.255.0
The network address = 192.168.12.0
Enter the IP address = 134.123.34.8
Enter the MASK address = 255.255.0.0
The network address = 134.123.0.0
Enter the IP address =
*********************************************************************
// Server Code
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<error.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define BUFFER
#define MAX_CLIENT
#define MAX_DATA
1024
2
1024
int mask_token[10];
int net[7];
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("\nsocket connection fail");
}
memset(&server,0,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[1]));
server.sin_addr.s_addr=INADDR_ANY;
bzero(&server.sin_zero,8);
if(bind(sock,(struct sockaddr *)&server,len)<0)
{
perror("\nbind fail");
}
if((listen(sock,MAX_CLIENT))<0)
{
perror("\nlisten fail");
}
while(1)
{
if((new=accept(sock,(struct sockaddr *)&client,&len))<0)
{
perror("\nlisten fail");
}
printf("\nnew client is connected with ip %s and port %d\n",inet_ntoa(cl
ient.sin_addr),ntohs(client.sin_port));
while(1)
{
memset(&data,0,sizeof(data));
memset(&ip_token,0,sizeof(ip_token));
memset(&mask_token,0,sizeof(mask_token));
memset(&net,0,sizeof(net));
memset(&ip,0,sizeof(ip));
memset(&mask,0,sizeof(mask));
while(data_len)
{
data_len = recv(new,ip,MAX_DATA, 0);
printf("Client IP address = %s\n",ip);
token = strtok(ip,".");
i=0;
while(token != NULL)
{
strcpy(repl,token);
printf("The token for ip is = %s\n", token);
ip_token[i] = atoi(repl);
token = strtok(NULL,".");
i++;
}
ip[data_len] = '\0';
token
token
token
token
for
for
for
for
ip
ip
ip
ip
is
is
is
is
=
=
=
=
134
123
34
8
memset(&server,0,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[2]));
server.sin_addr.s_addr=inet_addr(argv[1]);
bzero(&server.sin_zero,8);
{
perror("\nconnection fail");
exit(-1);
}
while(1)
{
memset(&client_s,0,sizeof(client_s));
if(data_len)
{
if (strcmp(client_s.data_in,"over")== 0)
{
printf("\nterminated....\n\n");
close (sock);
break;
}
}
}
**********************Client_1 -- Output *****************************
[root@station154 ~]# gcc 13an_c_1.c
[root@station154 ~]# ./a.out 127.0.0.1 3333
Enter your Packethi
Echo msg :hi
Enter your Packet
*********************************************************************
// Client_1 Code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define BUFFER 1024
struct packet
{
char data_in[25];
}client_s;
main(int argc,char **argv)
{
memset(&server,0,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[2]));
server.sin_addr.s_addr=inet_addr(argv[1]);
bzero(&server.sin_zero,8);
{
perror("\nconnection fail");
exit(-1);
}
while(1)
{
memset(&client_s,0,sizeof(client_s));
if(data_len)
{
if (strcmp(client_s.data_in,"over")== 0)
{
printf("\nterminated....\n\n");
close (sock);
break;
}
}
}
**********************Client_2 -- Output *****************************
[root@station154 ~]# gcc 13an_c_2.c
[root@station154 ~]# ./a.out 127.0.0.1 3333
Enter your Packet:hello
Echo msg :hello
Enter your Packet
*********************************************************************
// Server Code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<pthread.h>
#define BUFFER
1024
#define MAX_CLIENT 5
struct packet
{
char data[25];
}server_s;
void echo(int);
main(int argc,char **argv)
{
struct sockaddr_in server;
struct sockaddr_in client;
int sock,new;
int fd;
int len=sizeof(struct sockaddr_in);
pthread_t thread;
int iret;
if((sock=socket(AF_INET,SOCK_STREAM,0)) == -1)
{
perror("\nsocket connection fail");
exit(-1);
}
memset(&server,0,sizeof(server));
memset(&client,0,sizeof(client));
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[1]));
server.sin_addr.s_addr=INADDR_ANY;
bzero(&server.sin_zero,8);
while(1)
{
printf("\nWaiting for clients.....\n\n");
if((new=accept(sock,(struct sockaddr *)&client,&len)) == -1)
{
perror("\naccept fail");
exit(-1);
}
iret = pthread_create(&thread, NULL, echo, new);
close(new);
}
close(sock);
}
void echo(int sd)
{
int data_len,ret,i,j=0;
while(1)
{
memset(&server_s,0,sizeof(server_s));
if (data_len)
{
if(strcmp(server_s.data,"over")== 0)
{
strcpy(server_s.data,"over");
printf("\nclient terminated....\n");
send(sd,(struct sockaddr *)&server_s,sizeof(server_s),0)
;
break;
}
else
{
send(sd,(struct sockaddr *)&server_s,sizeof(serv
er_s),0);
}
}
ret = pthread_detach(pthread_self());
close(sd);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc -lpthread 13an_s.c
13an_s.c: In function main :
13an_s.c:150: warning: passing argument 3 of pthread_create
ter type
13an_s.c:150: warning: passing argument 4 of pthread_create
eger without a cast
[root@station154 ~]# ./a.out 3333
int sock;
int data_len;
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("\nsocket creation error");
exit(0);
}
memset(&server,0,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[2]));
server.sin_addr.s_addr=inet_addr(argv[1]);
bzero(&server.sin_zero,8);
if((connect(sock,(struct sockaddr *)&server,sizeof(struct sockaddr_in)))
<0)
{
perror("\nconnection fail");
exit(0);
}
printf("\nEnter the Mac : ");
scanf("%s",client_s.mac);
send(sock,(struct sockaddr *)&client_s,sizeof(client_s),0);
memset(&client_s,0,sizeof(client_s));
data_len=recv(sock,(struct sockaddr *)&client_s,BUFFER,0);
if(data_len)
{
printf("\n\nclient ip :%s\n\n",client_s.ip);
}
close(sock);
}
**********************Client -- Output *****************************
[root@station154 ~]# gcc 14an_c.c
[root@station154 ~]# ./a.out 127.0.0.1 3333
Enter your Mac : abc
client ip :192.168.1.1
*********************************************************************
// Server Code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define BUFFER
#define MAX_CLIENT
1024
2
struct packet
{
char ip[25];
char mac[25];
}server_s;
main(int argc,char **argv)
{
struct sockaddr_in server;
struct sockaddr_in client;
int sock,new,data_len,i,j=0;
int len=sizeof(struct sockaddr_in);
char mac_table[5][25]={"abc","def","gih","jkl","mno"};
char ip_table[5][25]={"192.168.1.1",
"192.168.1.2",
"192.168.1.3",
"192.168.1.4",
"192.168.1.5"};
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("\nsocket connection fail");
exit(0);
}
memset(&server,0,sizeof(server));
memset(&client,0,sizeof(client));
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[1]));
server.sin_addr.s_addr=INADDR_ANY;
bzero(&server.sin_zero,8);
if(bind(sock,(struct sockaddr *)&server,len)<0)
{
perror("\nbind fail");
exit(0);
}
if((listen(sock,MAX_CLIENT))<0)
{
perror("\nlisten fail");
exit(0);
}
while(1)
{
memset(&server_s,0,sizeof(server_s));
data_len=recv(new,(struct sockaddr *)&server_s,BUFFER,0);
for(i=0;i<5;i++)
{
if(strcmp(server_s.mac,mac_table[i])==0)
{
strcpy(server_s.ip,ip_table[i]);
j=i;
}
}
send(new,(struct sockaddr *)&server_s,sizeof(server_s),0);
printf("%s ip is assign to %s client",ip_table[j],mac_table[j]);
close(new);
}
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc 14an_s.c
[root@station154 ~]# ./a.out 3333
Waiting for clients.....
192.168.1.1 ip is assign to abc client
Waiting for clients.....
*********************************************************************
___________________________________________________________________________
// 15) DNS (UDP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#define ERROR -1
#define MAX_DATA
#define BUFFER 1024
1024
struct packet
{
char input[BUFFER];
char output[BUFFER];
char op[BUFFER];
}p1,p2;
main(int argc, char **argv)
{
struct sockaddr_in server,client;
int sock;
// char input[BUFFER];
//char output[BUFFER];
int len = sizeof(struct sockaddr_in);
int n;
if((sock = socket(AF_INET,SOCK_DGRAM,0))==ERROR)
{
perror("socket");
exit(-1);
}
client.sin_family = AF_INET;
client.sin_port = htons(atoi(argv[2]));
client.sin_addr.s_addr = inet_addr(argv[1]);
bzero(&client.sin_zero,8);
//memset(&input,0,sizeof(input));
//memset(&output,0,sizeof(output));
n=1;
while(1)
{
memset(&p1.output,0,sizeof(p1.output));
printf("\nEnter the 1 for DNS lookup and 2 for reverse DNS looku
p = ");
fgets(p1.op,BUFFER,stdin);
sendto(sock,p1.op,strlen(p1.op),0,(struct sockaddr *)&client, le
n);
if(strcmp(p1.op,"1\n")==0)
{
printf("\nEnter the Host name = ");
fgets(p2.input,BUFFER,stdin);
}
if(strcmp(p1.op,"2\n")==0)
{
printf("\Enter the Ip address = ");
fgets(p2.input,BUFFER,stdin);
}
sendto(sock,p2.input,strlen(p2.input),0,(struct sockaddr *)&clie
nt,len);
n = recvfrom(sock,p2.output,BUFFER,0,(struct sockaddr *)&server,
&len);
printf("\n Answer from the server is = %s\n",p2.output);
p2.output[n]='\0';
if(strcmp(p2.output,"quit\n")==0)
break;
}
close(sock);
printf("\n Client terminated................");
}
**********************Client -- Output *****************************
[root@station154 ~]# gcc 15an_c.c
[root@station154 ~]# ./a.out 127.0.0.1 3333
Enter the 1 for DNS lookup and 2 for reverse DNS lookup = 1
Enter the Host name = guj.edu
Answer from the server is = 121.0.0.2
Enter the 1 for DNS lookup and 2 for reverse DNS lookup = 2
ter the Ip address = 121.0.0.2
Answer from the server is = guj.edu
Enter the 1 for DNS lookup and 2 for reverse DNS lookup =
*********************************************************************
// Server Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<time.h>
#define MAX_CLIENTS
#define MAX_DATA
#define BUFFER 85
2
1024
struct packet
{
char data[BUFFER];
char op[BUFFER];
}s1,s2;
main(int argc, char **argv)
{
struct sockaddr_in server,client;
int sock,data_len,i=0,op_len,index=5;
int len = sizeof(struct sockaddr_in);
//char data[MAX_DATA];
char host[3][100]={"rollwala.org","guj.edu","telnet.rcc"};
char ip[3][100]={"121.0.0.1","121.0.0.2","121.0.0.3"};
if((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
{
perror("server socket: ");
exit(-1);
}
memset(&server,0,sizeof(server));
memset(&client,0,sizeof(client));
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[1]));
server.sin_addr.s_addr = INADDR_ANY;
bzero(&server.sin_zero, 8);
if((bind(sock, (struct sockaddr *)&server, len)) < 0)
{
perror("bind : ");
exit(-1);
}
while(1)
{
op_len = recvfrom(sock,s1.op,MAX_DATA,0,(struct sockaddr
*)&client,&len);
data_len = recvfrom(sock, s2.data, MAX_DATA, 0,(struct so
ckaddr *)&client,&len);
s2.data[data_len] = '\0';
printf("Client Operation Request = %s\n",s1.op);
printf("Client Data = %s\n",s2.data);
// Host to Ip logic //
index = 5;
if(strcmp(s1.op,"1\n")==0)
{
if(strcmp(s2.data,"rollwala.org\n")==0)
{
index = 0;
}
if(strcmp(s2.data,"guj.edu\n")==0)
{
index = 1;
}
if(strcmp(s2.data,"telnet.rcc\n")==0)
{
index = 2;
}
if(index == 5)
{
sendto(sock,"INVALID REQUEST",15,0,(stru
ct sockaddr *)&client,len);
}
if(index != 5)
{
sendto(sock,ip[index],strlen(ip[index]),
0,(struct sockaddr *)&client,len);
}
}
///// Ip to Host logic /////////////
if(strcmp(s1.op,"2\n")==0)
{
if(strcmp(s2.data,"121.0.0.1\n")==0)
{
index = 0;
}
if(strcmp(s2.data,"121.0.0.2\n")==0)
{
index = 1;
}
if(strcmp(s2.data,"121.0.0.3\n")==0)
{
index = 2;
}
if(index == 5)
{
sendto(sock,"INVALID REQUEST",15,0,(stru
ct sockaddr *)&client,len);
}
if(index != 5)
{
sendto(sock,host[index],strlen(host[inde
x]),0,(struct sockaddr *)&client,len);
}
}
if(strcmp(s2.data,"quit\n")==0)
break;
}
printf("\nClient disconnected...........\n\n");
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc 15an_s.c
[root@station154 ~]# ./a.out 3333
Client Operation Request = 1
Client Data = guj.edu
Client Operation Request = 2
Client Data = 121.0.0.2
*********************************************************************
___________________________________________________________________________
// 16) TELNET (TCP)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<time.h>
#define ERROR -1
#define MAX_DATA
1024
#define BUFFER 1024
struct packet
{
char uname[BUFFER];
char pwd[BUFFER];
char cmd[BUFFER];
//char data[BUFFER];
}c1,c2,c3;
main(int argc, char **argv)
{
struct sockaddr_in remote_server;
int sock;
int len,i=0;
char data[BUFFER];
if((sock = socket(AF_INET,SOCK_STREAM,0))==ERROR)
{
perror("socket");
exit(-1);
}
//memset(&remote_server,0,sizeof(remote_server));
remote_server.sin_family = AF_INET;
remote_server.sin_port = htons(atoi(argv[2]));
remote_server.sin_addr.s_addr = inet_addr(argv[1]);
bzero(&remote_server.sin_zero,8);
if((connect(sock, (struct sockaddr *)&remote_server, sizeof(struct socka
ddr_in))) == ERROR)
{
perror("connect");
exit(-1);
}
while(1)
{
memset(&data,0,sizeof(data));
printf("Enter the Username = ");
fgets(c1.uname,BUFFER,stdin);
send(sock,c1.uname,sizeof(c1.uname),0);
printf("Enter the Password = ");
fgets(c2.pwd,BUFFER,stdin);
send(sock,c2.pwd,sizeof(c2.pwd),0);
len = recv(sock,data,BUFFER,0);
data[len] = '\0';
printf("Server Replay=%s\n",data);
while(len)
{
if(strcmp(data,"SUCCESS")==0)
{
printf("\nAuthentication = %s",data);
while(1)
{
memset(&c3.cmd,0,sizeof(c3.cmd));
printf("\nEnter your Command = ");
fgets(c3.cmd,BUFFER,stdin);
send(sock,c3.cmd,sizeof(c3.cmd),0);
if(strcmp(c3.cmd,"logout\n")==0)
{
printf("\nLogout Successfully");
exit(-1);
}
len = 1;
while(len)
{
len = recv(sock,data,BUFFER,0);
if(strcmp(data,"COMPLETE")==0)
break;
printf("\nReply = %s",data);
memset(&data,0,sizeof(data));
}
if(strcmp(data,"IMPROPER")==0)
{
printf("\nCommand not in a LIST"
);
}
}
}
if(strcmp(data,"FAIL")==0)
{
printf("\nAuthentication = %s",data);
break;
}
}
//len = recv(sock,output,BUFFER,0);
//output[len] = '\0';
//printf("Server Replay=%s\n",output);
}
close(sock);
}
**********************Client -- Output *****************************
[root@station154 ~]# gcc telnet_c.c
[root@station154 ~]# ./a.out 127.0.0.1 3333
connect: Connection refused
[root@station154 ~]# gcc telnet_c.c
[root@station154 ~]# ./a.out 127.0.0.1 3333
Enter the Username = Deep
Enter the Password = 123
Server Replay=SUCCESS
Authentication = SUCCESS
Enter your Command = date
Reply = Tue 2011-05-24 17:41:12 IST
Enter your Command = logout
Logout Successfully[root@station154 ~]#
*********************************************************************
// Server Code
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<error.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<dirent.h>
#include<time.h>
#define ERROR -1
#define MAX_CLIENTS
2
#define MAX_DATA
1024
#define BUFFER 1024
struct packet
{
char uname[BUFFER];
char pwd[BUFFER];
//char data[BUFFER];
char cmd[BUFFER];
}s1,s2,s3;
perror("accept");
exit(-1);
}
data_un = 1;
data_pass = 1;
while(data_un)
{
memset(&data,0,sizeof(data));
memset(&s1.uname,0,sizeof(s1.uname));
memset(&s2.pwd,0,sizeof(s2.pwd));
un_index = 5;
pass_index = 10;
//// Logic for Authentication start here ////
data_un = recv(new,s1.uname, MAX_DATA,0);
//printf("Username = %s\n",s1.uname);
s1.uname[data_un]='\0';
data_pass = recv(new,s2.pwd, MAX_DATA,0);
//printf("Password = %s\n",s2.pwd);
s2.pwd[data_pass]='\0';
while(data_pass)
{
for(i=0; i<3; i++)
{
if(strcmp(un[i],s1.uname)==0)
{
un_index = i;
}
if(strcmp(pass[i],s2.pwd)==0)
{
pass_index = i;
}
}
if(un_index != pass_index)
{
send(new,"FAIL",4,0);
break;
}
if(un_index == pass_index)
{
send(new,"SUCCESS",7,0);
//printf("\nClient Usernam = : %s", s1.u
name);
//printf("\nClient Password = I can't di
}
}
}
//// Authentication ends here ////////////////////
}
printf("\nClient disconnected");
close(new);
}
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc telnet_s.c
[root@station154 ~]# ./a.out 3333
News Client connected from port no 55810 and IP 127.0.0.1
*********************************************************************
___________________________________________________________________________
// 17) FTP (TCP)
___________________________________________________________________________
// Client Code
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include<string.h>
struct packet
{
char op[1024];
char un[1024];
char pwd[1024];
}c1,c2,u,p;
main(int argc,char **argv)
{
int sock1,len;
FILE *fp;
sock1 = socket(AF_INET,SOCK_STREAM,0);
{
fp = fopen("c.txt","r");
while(!feof(fp))
{
fread(buf,sizeof(char),50,fp);
write(sock1,buf,50);
}
printf("\n File transfer from Client to Server\n");
fclose(fp);
}
if(strcmp(c1.op,"quit\n")==0)
{
break;
}
}
}}
if(strcmp(buf,"FAIL")==0)
{
printf("\nAUTHENTICATION FAIL try again!");
}
}
**********************Client -- Output *****************************
[root@station154 ~]# gcc ftp_c.c
[root@station154 ~]# ./a.out 3435
client connecting
Enter Username = Deep
Enter Password = 123
AUTHENTICATION SUCCESS
Press 1 for StoC, 2 for CtoS and quit for termination = 1
File transfer from Server to Client
Press 1 for StoC, 2 for CtoS and quit for termination = 2
File transfer from Client to Server
Press 1 for StoC, 2 for CtoS and quit for termination = quit
Enter Username = niraj
Enter Password = 789
AUTHENTICATION SUCCESS
Press 1 for StoC, 2 for CtoS and quit for termination =
*********************************************************************
// Server Code
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include<string.h>
struct packet
{
char op[1024];
char un[1024];
char pwd[1024];
}s1,u,p;
main(int argc,char **argv)
{
int sock1,sock2, clength,data_len=0;
int un_index = 5, pass_index = 10, un_len,pass_len;
char
char
char
FILE
uname[3][100] = {"Deep\n","ketan\n","niraj\n"};
pass[3][100] = {"123\n","456\n","789\n"};
acl[3][100] = {"read","write","anything"}
*fp;
sock1= socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in serv,cli;
serv.sin_family = AF_INET;
serv.sin_port = htons(atoi(argv[1]));
serv.sin_addr.s_addr = inet_addr("127.0.0.1");
bind(sock1,(struct sockaddr *)&serv, sizeof(serv));
listen(sock1,5);
clength = sizeof(cli);
int i=0;
char buf[50];
sock2 = accept(sock1,(struct sockaddr *)&cli,&clength);
printf("\n Client Connected\n");
while(1)
{
memset(&buf,0,sizeof(buf));
memset(&s1.op,0,sizeof(buf));
memset(&u.un,0,sizeof(u.un));
memset(&p.pwd,0,sizeof(p.pwd));
un_len = recv(sock2,u.un,1024,0);
pass_len = recv(sock2,p.pwd,1024,0);
un_index = 5;
pass_index = 10;
for(i=0; i<3; i++)
{
if(strcmp(u.un,uname[i])==0)
{
un_index = i;
}
if(strcmp(p.pwd,pass[i])==0)
{
pass_index = i;
}
}
if(un_index != pass_index)
{
send(sock2,"FAIL",4,0);
}
if(un_index == pass_index)
{
send(sock2,"SUCCESS",7,0);
while(1)
{
if((data_len = recv(sock2,s1.op,1024,0))<0)
{
printf("RECV error\n");
break;
}
s1.op[data_len] = '\0';
if(strcmp(s1.op,"1\n")==0)
{
fp = fopen("s.txt","r");
while(!feof(fp))
{
fread(buf,sizeof(char),50,fp);
write(sock2,buf,50);
}
printf("\nFile transfer from Server to Client");
fclose(fp);
}
if(strcmp(s1.op,"2\n")==0)
{
fp = fopen("s.txt","w");
while(1)
{
read(sock2,buf,50);
fprintf(fp,"%s",buf);
break;
}
printf("\nFile transfer from Client to Server");
fclose(fp);
}
if(strcmp(s1.op,"quit\n")==0)
{
break;
}
}
}
}
return 0;
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc ftp_s.c
[root@station154 ~]# ./a.out 3435
Client Connected
if(strcmp(data.opcode,"over") == 0)
break;
if(strcmp(data.opcode,"RRQ") == 0 || strcmp(data.opcode,"WRQ") =
= 0)
{
printf("\nEnter the file name:");
scanf("%s",data.filename);
}
else
goto again;
sendto(sock,(struct sockaddr *)&data,sizeof(data),0,(struct sock
addr *)&server_control,len);
if(strcmp(data.opcode,"RRQ")==0)
{
recvfrom(sock,pktc_no,BUFFER,0,(struct sockaddr *)&serve
r,&len);
pkt_no=atoi(pktc_no);
printf("Total no of pkts are :%d",pkt_no);
for(i=0;i<pkt_no;i++)
{
printf("\npkt no : %d\n",i);
data_len = recvfrom(sock,(struct sockaddr *)&data,BUFFE
R,0,(struct sockaddr *)&server_data, &len);
if(data_len)
{
printf("\n%s\n",data.msg);
if(strcmp(data.msg,"Server:can't open such file.
..")==0)
{
strcpy(data.msg,"Client:OK...It was my m
istake...");
sendto(sock,(struct sockaddr *)&data,siz
eof(data),0,(struct sockaddr *)&server_data,len);
goto again;
}
fd=fopen(data.filename,"aw+");
fputs(data.file,fd);
printf("\n%s\n",data.file);
sprintf(ackno,"%d",i+1);
sendto(sock,ackno,sizeof(ackno),0,(struct sockad
dr *)&server_data,len);
memset(&ackno,0,sizeof(ackno));
fclose(fd);
}
}
strcpy(data.msg,"Client:File Fragment no successfully written on
client...");
sendto(sock,(struct sockaddr *)&data,sizeof(data),0,(struct sock
addr *)&server_data,len);
}
if(strcmp(data.opcode,"WRQ")==0)
{
goback: data_len=recvfrom(sock,(struct sockaddr *)&data,BUFFER,0,(struct sockad
dr *)&server_data, &len);
if(data_len)
{
printf("\n%s\n",data.msg);
if(strcmp(data.msg,"Server:You can write the fil
e...")==0)
{
fd = fopen(data.filename,"r+" );
printf("\nFile name is %s\n",data.filen
ame);
fseek(fd,0L,SEEK_END);
length=ftell(fd);
if(length%MTU==0)
tl_pkt=length/MTU;
else
tl_pkt=(length/MTU)+1;
printf("%d",tl_pkt);
sprintf(val,"%d",tl_pkt);
sendto(sock,val,strlen(val),0,(struct so
ckaddr *)&server_data,len);
printf("\nfile length is:%d\n",length);
ans=0;
for(i=0;i<tl_pkt;i++)
{
fseek(fd,ans,SEEK_SET);
fread(data.file,MTU,1,fd);
give:
sendto(sock,(struct sockaddr *)&
data,sizeof(data),0,(struct sockaddr *)&server_data,len);
memset(&data.file,0,sizeof(data.
file));
recvfrom(sock,ackno,BUFFER,0,(st
ruct sockaddr *)&server_data,&len);
dackno=atoi(ackno);
printf("\nAcknowledgement from s
erver is %d\n",dackno);
memset(&ackno,0,sizeof(ackno));
ans=ans+MTU;
}
fclose(fd);
}
}
}
}
printf("\nclient terminated...........\n\n");
close(sock);
}
// Server Code
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<unistd.h>
#include<errno.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/stat.h>
#include<arpa/inet.h>
#include<fcntl.h>
#include<pthread.h>
#define BUFFER
10000
struct packet
{
char opcode[10];
char filename[10];
char msg[50];
char file[5000];
}data;
struct sockaddr_in server_control,server_data,client;
int len = sizeof(struct sockaddr_in);
void service(int);
main(int argc, char **argv)
{
int sockc,datac,dataport;
pthread_t thread;
int ret;
if((sockc = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("socket error ");
exit(-1);
}
memset(&server_control,0,sizeof(server_control));
memset(&client,0,sizeof(client));
server_control.sin_family = AF_INET;
server_control.sin_port = htons(atoi(argv[1]));
server_control.sin_addr.s_addr = INADDR_ANY;
bzero(&server_control.sin_zero, 8);
if((bind(sockc, (struct sockaddr *)&server_control, len)) == -1)
{
perror("bind : ");
exit(-1);
}
while(1)
{
memset(&client,0,sizeof(client));
memset(&data,0,sizeof(data));
printf("\nServer Ready.....\n\n");
datac = recvfrom(sockc,(struct sockaddr *)&data, BUFFER, 0,(stru
ct sockaddr *)&client,&len);
if (datac)
{
printf("\nopcode:%s\n",data.opcode);
printf("\nFile Name:%s\n",data.filename);
memset(&stdin,0,sizeof(stdin));
dataport=atoi(argv[2]);
ret=pthread_create(&thread,NULL,service,dataport);
}
}
close(sockc);
}
void service(int port)
{
int iret,sockd,datad,dataw;
FILE *fd;
int MTU=1500,pkt_no;
char val[10],pktc_no[10];
struct stat stat_buf;
int length,data_l,dackno;
int tl_pkt,i,ans=0;
char ackno[50];
if((sockd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("socket error ");
exit(-1);
}
memset(&server_data,0,sizeof(server_data));
server_data.sin_family = AF_INET;
server_data.sin_port = htons(port);
server_data.sin_addr.s_addr = INADDR_ANY;
bzero(&server_data.sin_zero, 8);
if((bind(sockd, (struct sockaddr *)&server_data, len)) == -1)
{
perror("bind : ");
exit(-1);
}
if(strcmp(data.opcode,"RRQ") == 0)
{
fd = fopen(data.filename,"r+" );
if(fd==NULL)
{
kaddr *)&client,len);
memset(&data,0,sizeof(data));
dataw=recvfrom(sockd,pktc_no,BUFFER,0,(struct sockaddr *)&client
,&len);
if(dataw)
{
pkt_no=atoi(pktc_no);
printf("Total no of pkts are :%d",pkt_no);
for(i=0;i<pkt_no;i++)
{
printf("\npkt no : %d\n",i+1);
recvfrom(sockd,(struct sockaddr *)&data,BUFFER,0
,(struct sockaddr *)&client,&len);
fd=fopen(data.filename,"aw+");
fputs(data.file,fd);
printf("\n%s\n",data.file);
sprintf(ackno,"%d",i+1);
sendto(sockd,ackno,sizeof(ackno),0,(struct socka
ddr *)&client,len);
memset(&ackno,0,sizeof(ackno));
fclose(fd);
}
}
}
iret=pthread_detach(pthread_self());
close(sockd);
}
___________________________________________________________________________
// 19) Firewall (content based)
___________________________________________________________________________
// Client Code
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<error.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define BUFFER 1024
main(int argc,char **argv)
{
struct sockaddr_in client_c;
int sock,len=0;
int data_len,counter=1;
char data_in[BUFFER];
char data_out[BUFFER];
char reply[BUFFER];
if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("\nsocket creation error");
}
memset(&client_c,0,sizeof(client_c));
client_c.sin_family=AF_INET;
client_c.sin_port=htons(atoi(argv[2]));
client_c.sin_addr.s_addr=inet_addr(argv[1]);
bzero(&client_c.sin_zero,8);
if((connect(sock,(struct sockaddr *)&client_c,sizeof(struct sockaddr_in)
))<0)
{
perror("\nconnection fail");
}
while(1)
{
printf("\nEnter the Packet = ");
fgets(data_in,BUFFER,stdin);
send(sock,data_in,strlen(data_in),0);
data_len=recv(sock,data_out,BUFFER,0);
data_out[data_len]='\0';
if((strcmp(data_in,"exit\n"))==0)
{
printf("\nclient is disconnected\n\n");
break;
}
if(strcmp(data_out,"PACKET IS FORWARDED")==0)
{
len = recv(sock,reply,BUFFER,0);
reply[len] = '\0';
printf("\nReply from firewall = %s",data_out);
memset(&data_out,0,sizeof(data_out));
printf("\nReply from Server = %s",reply);
memset(&reply,0,sizeof(reply));
}
if(strcmp(data_out,"PACKET IS DISCARDED")==0)
{
printf("\nReply from firewall = %s",data_out);
memset(&data_out,0,sizeof(data_out));
}
}
close(sock);
}
1024
2
{
printf("\nclient is disconnected\n\n");
break;
}
if(strcmp(data_out,"PACKET IS FORWARDED")==0)
{
len = recv(sock,reply,BUFFER,0);
reply[len] = '\0';
printf("\nReply from firewall = %s",data_out);
memset(&data_out,0,sizeof(data_out));
printf("\nReply from Server = %s",reply);
memset(&reply,0,sizeof(reply));
}
if(strcmp(data_out,"PACKET IS DISCARDED")==0)
{
printf("\nReply from firewall = %s",data_out);
memset(&data_out,0,sizeof(data_out));
}
}
close(sock);
}
1024
2
}
}
if(rule_index != 15)
{
send(new,"PACKET IS DISCARDED",19,0);
}
if(rule_index == 15)
{
send(new,"PACKET IS FORWARDED",19,0);
send(new,"YOUR REQUEST IS ACCEPTED",24,0);
}
/// Rule Server Logic ends here ////
if((strcmp(data,"exit\n"))==0)
{
printf("\nclient disconnected");
break;
}
}
}
close(new);
}
close(sock);
}
**********************Server -- Output *****************************
[root@station154 ~]# gcc -o s firewall_sever.c
[root@station154 ~]# ./s 8888
I am firewall My port range is 10000 to 55000
new client is connected with ip 127.0.0.1 and port 47747
Client's Packet = Deep
*********************************************************************
___________________________________________________________________________
// 21) Web Server
___________________________________________________________________________
// Client Code
#include
#include
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<unistd.h>
<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<arpa/inet.h>
#define PORT
8181
/* IP address as a string */
<stdio.h>
<stdlib.h>
<unistd.h>
<errno.h>
<string.h>
<fcntl.h>
<signal.h>
<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<arpa/inet.h>
BUFSIZE 8096
ERROR 42
SORRY 43
LOG 44
struct {
char *ext;
char *filetype;
} extensions [] = {
{"gif", "image/gif" },
{"jpg", "image/jpeg"},
{"jpeg","image/jpeg"},
{"png", "image/png" },
{"zip", "image/zip" },
{"gz", "image/gz" },
{"tar", "image/tar" },
{"htm", "text/html" },
{"html","text/html" },
{0,0} };
void log(int type, char *s1, char *s2, int num)
{
int fd ;
char logbuffer[BUFSIZE*2];
switch (type) {
case ERROR: (void)sprintf(logbuffer,"ERROR: %s:%s Errno=%d exiting pid=%
d",s1, s2, errno,getpid()); break;
case SORRY:
(void)sprintf(logbuffer, "<HTML><BODY><H1>nweb Web Server Sorry:
%s %s</H1></BODY></HTML>\r\n", s1, s2);
(void)write(num,logbuffer,strlen(logbuffer));
(void)sprintf(logbuffer,"SORRY: %s:%s",s1, s2);
break;
case LOG: (void)sprintf(logbuffer," INFO: %s:%s:%d",s1, s2,num); break;
}
/* no checks here, nothing can be done a failure anyway */
if((fd = open("nweb.log", O_CREAT| O_WRONLY | O_APPEND,0644)) >= 0) {
(void)write(fd,logbuffer,strlen(logbuffer));
(void)write(fd,"\n",1);
(void)close(fd);
}
if(type == ERROR || type == SORRY) exit(3);
}
/* this is a child web server process, so we can exit on errors */
void web(int fd, int hit)
{
int j, file_fd, buflen, len;
long i, ret;
char * fstr;
static char buffer[BUFSIZE+1]; /* static so zero filled */
ret =read(fd,buffer,BUFSIZE); /* read Web request in one go */
if(ret == 0 || ret == -1) {
/* read failure stop now */
log(SORRY,"failed to read browser request","",fd);
}
if(ret > 0 && ret < BUFSIZE)
/* return code is valid chars */
buffer[ret]=0;
/* terminate the buffer */
else buffer[0]=0;
for(i=0;i<ret;i++)
/* remove CF and LF characters */
if(buffer[i] == '\r' || buffer[i] == '\n')
buffer[i]='*';
log(LOG,"request",buffer,hit);
if( strncmp(buffer,"GET ",4) && strncmp(buffer,"get ",4) )
log(SORRY,"Only simple GET operation supported",buffer,fd);
log(ERROR,"system call","fork",0);
}
else {
if(pid == 0) { /* child */
(void)close(listenfd);
web(socketfd,hit); /* never returns */
} else {
/* parent */
(void)close(socketfd);
}
}
}
}