Sunday, 20 March 2011

NPM-8th ex

8th ex:-


PROGRAM:

#include<unistd.h>
#include<stdio.h>
#include<sys/socket.h>
#include<netinet/ip.h>
#include<netinet/udp.h>
#define PCKT_LEN 8192
struct ipheader
{
unsigned char iph_ihl:5,iph_ver:4;
unsigned char iph_tos;
unsigned short int iph_len;
unsigned short int iph_ident;
unsigned short int iph_offset;
unsigned char iph_ttl;
unsigned char iph_protocol;
unsigned short int iph_chksum;
unsigned int iph_sourceip;
unsigned int iph_destip;
};
struct udpheader
{
unsigned short int udph_srcport;
unsigned short int udph_destport;
unsigned short int udph_len;
unsigned short int udph_chksum;
};
unsigned short csum(unsigned short *buf,int nwords)
{
unsigned long sum;
for(sum=0;nwords>0;nwords--)
sum+=*buf++;
sum=(sum>>16)+(sum &0xffff);
sum+=(sum>>16);
return(unsigned short)(~sum);
}
int main(int argc,char *argv[])
{
int sd;
char buffer[PCKT_LEN];
struct ipheader *ip=(struct ipheader *)buffer;
struct udpheader  *udp=(struct  udpheader *)(buffer+sizeof(struct ipheader));
struct sockaddr_in sin,din;
int one=1;
const int *val=&one;
memset(buffer,0,PCKT_LEN);
if(argc!=5)
{
printf("-invalid parameters!!!\n");
printf("-usage %s<source hostname/IP><source port><target hostname/IP><target po
rt>\n",argv[0]);
exit(-1);
}
sd=socket(PF_INET,SOCK_RAW,IPPROTO_UDP);
if(sd<0)
{
perror("socket()error");
exit(-1);
}
else
printf("socket()-using SOCK_RAW socket and udp protocol is ok.\n");
sin.sin_family=AF_INET;
din.sin_family=AF_INET;
sin.sin_port=htons(atoi(argv[2]));
din.sin_port=htons(atoi(argv[4]));
sin.sin_addr.s_addr=inet_addr(argv[1]);
din.sin_addr.s_addr=inet_addr(argv[3]);
ip->iph_ihl=5;
ip->iph_ver=4;
ip->iph_tos=16;
ip->iph_len=sizeof(struct ipheader)+sizeof(struct udpheader);
ip->iph_ident=htons(54321);
ip->iph_ttl=64;
ip->iph_protocol=17;
ip->iph_sourceip=inet_addr(argv[1]);
ip->iph_destip=inet_addr(argv[3]);
udp->udph_srcport=htons(atoi(argv[2]));
udp->udph_destport=htons(atoi(argv[4]));
udp->udph_len=htons(sizeof(struct udpheader));
ip->iph_chksum=csum((unsigned short *)buffer,sizeof(struct ipheader)+sizeof(stru
ct udpheader));
if(setsockopt(sd,IPPROTO_IP,IP_HDRINCL,val,sizeof(one))<0)
{
perror("setsockopt()error");
exit(-1);
}
else
printf("setsockopt() is ok.\n");
printf("trying...\n");
printf("using raw socket and udp protocol\n");
printf("using source IP:%u,target IP:%s port:%u \n",argv[1],atoi(argv[2]),argv[3
],atoi(argv[4]));
int count;
for(count=1;count<=20;count++)
{
if(sendto(sd,buffer,ip->iph_len,0,(struct sockaddr *)&sin,sizeof(sin))<0)
{
perror("sendto()error");
exit(-1);
}
else
{
printf("count #%u -sendto() is ok.\n",count);
sleep(2);
}
}
close(sd);
return 0;
}


OUTPUT:

[root@localhost~]#./a.out 172.16.6.4 2345 172.16.6.4 2345
socket()–using SOCK_RAW socket and udp protocol is ok
Setsockopt() is ok
Trying
Using raw socket and udp protocol
Using source ip:172.16.6.4 port:2345 target ip:172.16.6.4 port:2345
Count#1-sentto()is ok
Count#2-sentto()is ok
Count#3-sentto()is ok
Count#4-sentto()is ok
Count#5-sentto()is ok
Count#6-sentto()is ok
Count#7-sentto()is ok
Count#8-sentto()is ok
Count#9-sentto()is ok
Count#10-sentto()is ok
Count#11-sentto()is ok
Count#12-sentto()is ok
Count#13-sentto()is ok
Count#14-sentto()is ok
Count#15-sentto()is ok
Count#16-sentto()is ok
Count#17-sentto()is ok
Count#18-sentto()is ok
Count#19-sentto()is ok
Count#20-sentto()is ok





























No comments:

Post a Comment