• 大小: 2.27MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-09
  • 语言: 其他
  • 标签: DNS  

资源简介

解决了超时问题,并且使用select语句

资源截图

代码片段和文件信息


#include
#include
#include
#include  
#include  
#pragma comment(lib“Ws2_32.lib“)x
using namespace std;
#define PORT 53
#define OUT_ADDRESS “192.168.1.1“//外部DNS服务器地址
class local_list
{
  public:
  string ip;
  string domain_name;
};

class ID_transfer_table//ID转换表
{
  public:
  unsigned short old_ID;//旧ID
  SOCKADDR_IN client;//请求者套接字地址
  int finish;//是否完成解析
};

string yuming;//域名
ID_transfer_table ITT[500];//ID转换表
local_list *loc[500];
SYSTEMTIME sys;
string file_name;//本地DNStxt地址
int YearMonthDay Hour Minute Second Milliseconds;//保存系统时间的变量
int IDcount=0;
int Get_list(int t)//把dnsrelay载入结构local_list中
{
   string s;
   char* filename={0};
// cout<<“::“<   //for(int i=0;i   //   filename[i]=file_name[i];
   //cout<    int n;
    n=0;
    loc[0]=new local_list;
    ifstream local;
//filename=file_name;
if(t == 1)

{
//cout<<“**“< local.open(file_name.c_str());
}
else
       local.open(“E:\dnsrelay.txt“);
if(!local)
{
cout<<“打开文件失败!“< }
    while(!local.eof())

       local>>s;
       loc[n]->ip=s;
       local>>s;
       loc[n]->domain_name=s;
       n++;
       loc[n]=new local_list;
}

    local.close();
return n-1;
}
int GetDomname(string rec_bufint Rec_f)
{
    string s;
int ijn;
j=0;
yuming=““;
i=0;
s=rec_buf.substr(12Rec_f-16);
    while(i {
   if(s[i]>0&&s[i]<=63)
   {
   n=s[i];
       i++;
   while(n!=0)
   {  
      yuming+=s[i];
  j++;
  i++;
  n--;
   }
   }
   if(s[i]!=0)
   {
       yuming+=‘.‘;
   j++;
   }
}
yuming+=‘\0‘;
return j;
}
string local_find(int num)
{
    
    int i;
    for(i=0;i {
       if(strcmp(yuming.c_str()loc[i]->domain_name.c_str())==0)
   {
      if(loc[i]->ip==“0.0.0.0“)
  {
  return “0.0.0.0“;
  }
      
      else
  {
          return loc[i]->ip; 
  }
         
   }
    }
    if(i==num)
{
       return “notfind“;//中继
}
}

int main(int argc char** argv) 
{
    WSADATA wsaData;//初始化动态链接库用的,之后socket才能用
    SOCKET SERVERHOST;//本地DNS和外部DNS两个套接字
    SOCKADDR_IN s_nameh_namec_name;//本地DNS、外部DNS、请求端三网络套接字地址
char sen_buf[512];//发缓存
    char rec_buf[512];//收缓存
    string out_add;//外部DNS地址
    int numj;
    if(argc == 1)
{
cout<<“无调试信息输出“<   out_add=OUT_ADDRESS;
  num = Get_list(2);
}
    
else if(argc == 4)
{
   cout<<“调试信息级别1“<       out_add=argv[2];
       file_name=argv[3];
   cout<    num = Get_list(1);
}
else if(argc == 3)
{
   cout<<“调试信息级别2“<       out_add=argv[2];
   num = Get_list(2);
}



    //
//
//初始化ID转换表
//
//


WSAStartup(MAKEWORD(22) &wsaData); //初始化ws2_32.dll动态链接库。第一个2表示副版本号,第二个号表示主版本号,第二个参数返回请求socket的版本信息

//创建套接字:
SERVER=socket(AF

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-05-30 19:46  dns\
     目录           0  2015-05-30 19:39  dns\Debug\
     文件      577593  2015-05-30 19:39  dns\Debug\dne.exe
     文件      833664  2015-05-30 19:39  dns\Debug\dne.ilk
     文件      320637  2015-05-30 19:39  dns\Debug\dne.obj
     文件     5567096  2015-05-30 19:10  dns\Debug\dne.pch
     文件     1139712  2015-05-30 19:39  dns\Debug\dne.pdb
     文件        5176  2015-05-18 20:41  dns\Debug\dnsrelay.txt
     文件      181248  2015-05-30 19:39  dns\Debug\vc60.idb
     文件      143360  2015-05-30 19:39  dns\Debug\vc60.pdb
     文件       11714  2015-05-30 19:39  dns\dne.cpp
     文件        3365  2015-05-30 19:10  dns\dne.dsp
     文件         514  2015-05-30 19:46  dns\dne.dsw
     文件       41984  2015-05-30 19:46  dns\dne.ncb
     文件       48640  2015-05-30 19:46  dns\dne.opt
     文件         737  2015-05-30 19:39  dns\dne.plg
     文件        5176  2015-05-18 20:41  dns\dnsrelay.txt

评论

共有 条评论