日韩在线首页I俄罗斯pornI男女猛烈激情XX00高潮动态I超碰免费97I乱人伦99久久I欧美日韩成人一区I最新日韩视频在线观看I粉嫩AV四季AV绯色AVI五月导航

×

c語言域名解析方法是怎樣的?域名解析的流程有哪些?

分類:域名資訊 編輯:互聯網觀察 瀏覽量:142
2021-04-28 14:00:39

  現在有很多朋友對于域名解析的情況不是很了解,它其實指的是把域名轉化為對應的ip地址的過程,這個工作是由dns服務器來完成的,這個過程其實并不是很復雜,但是很多朋友會對各種解析的方式容易混淆,比如做c語言域名解析,這個看起來非常的抽象,不容易理解,那么c語言域名解析方法是怎樣的?域名解析的流程有哪些呢?下面新網就給大家詳細的來闡述一下。


  c語言域名解析方法是怎樣的?
  typedef struct _DNSHEAD{ //dns 頭部
  USHORT ID;
  USHORT tag; // dns 標志(參數)
  USHORT numQ; // 問題數
  USHORT numA; // 答案數
  USHORT numA1; // 權威答案數
  USHORT numA2; // 附加答案數
  }DnsHead;
  typedef struct _DNSQUERY //dns 查詢結構
  {
  // char name[64];
  // //查詢的域名,這是一個大小在0到63之間的字符串;
 
      c語言域名解析
  USHORT type;
  //查詢類型,大約有20個不同的類型
  USHORT classes;
  //查詢類,通常是A類既查詢IP地址。
  }DnsQuery;
  #pragma comment(lib,"ws2_32.lib")
  // 初始化操作
  bool initWSA();
  //顯示錯誤
  void displayErrWSA(char *str);
  //創建套接字
  SOCKET CreateSocket(int type);
  //UDP sendto
  int MySendto(SOCKET sockTo, const char FAR * buf,int len,char *addr,USHORT port);
  //TCP 連接
  bool MyConnect(SOCKET s, char *addr,USHORT );
  // UDP recvfrom
  int MyRecvFrom(SOCKET s, char FAR * buf,int len,char *addr,USHORT port);
  //設置DNS 頭部
  bool SetDNSHead(char *name,char *buf);
  int main(int arg,char *are[])
  {
  int Result=0;
  char buf[1024]={0};
  char addr[16] = "61.187.72.8";// dns 服務器地址
  char *name = 0; //要查詢的域名
  if ( !initWSA() )//初始化
  {
  displayErrWSA("initWSA err!");
  return 1;
  }
  //創建套接字
  SOCKET sockTo ;
  if ( (sockTo = CreateSocket(SOCK_DGRAM)) == 0)
  {
  displayErrWSA("CreatSocket err!");
  return 1;
  }
  while (1)
  {
  if (arg 
  {
  char temp[1024]={0};
  printf("\n請輸入要查詢的域名:");
  scanf("%s",temp);
  if (temp[0] == 'q' ||temp[0] == 'Q')
  {
  break;
  }
  name = temp;
  }
  else
  {
  arg = 1;
  name = are[1];
  }
  //設置dns 頭部
  SetDNSHead(name,buf);
  //發送出去的請求數據長度
  int len = sizeof(DnsHead)+sizeof(DnsQuery)+strlen(name)+2;
  // for (int i =0;i 
  // {
  // printf("x",(UCHAR)buf[i]);
  // printf("x ",(UCHAR)buf[i+1]);
  // }
  //發送DNS 請求
  if ( ( Result =MySendto(sockTo,buf,len,addr,53) ) 
  {
  displayErrWSA("sendto err!");
  continue;
  }
  //接收應答
  if ( (Result =MyRecvFrom(sockTo,buf,1024,addr,53) ) 
  {
  displayErrWSA("recvfrom err!");
  continue;
  }
  //簡單的取得返回的 IP 地址( 收到的最后4字節 )
  DnsHead *DnsH = (DnsHead *)buf;
  if (DnsH->numA == 0)
  {
  printf("無法解析 %s 的IP 地址。\n",name);
  continue;
  }
  char *getIP =(char *)buf +Result - 4;
  printf("%s 的IP地址為: ",name);
  for (int Result= 0 ;Result 
  {
  printf("%u.",(UCHAR )getIP[Result]);
  }
  printf("\n");
  }
  return 0;
  }
  // 初始化操作
  bool initWSA()
  {
  WORD wVersionRequested;
  WSADATA wsaData;
  int Result;
  wVersionRequested = MAKEWORD( 2, 2 );
  Result = WSAStartup( wVersionRequested, &wsaData );
  if(Result != 0 )
  {
  return false;
  }
  if( LOBYTE( wsaData.wVersion) != 2 ||
  HIBYTE(wsaData.wVersion)!= 2 )
  {
  WSACleanup();
  return false;
  }
  return true;
  }
  /
  SOCKET CreateSocket(int type)
  {
  SOCKET sock=socket(AF_INET,type,0);
  if (sock == INVALID_SOCKET )
  {
  return 0;
  }
  return sock;
  }
  /
  int MySendto(SOCKET sockTo, const char FAR * buf,int len,char *addr,USHORT port)
  {
  //設置發送數據到的 套接字及地址結構
  SOCKADDR_IN addrTo;
  addrTo.sin_addr.S_un.S_addr=inet_addr(addr);
  addrTo.sin_family=AF_INET;
  addrTo.sin_port=htons(port);
  return sendto( sockTo, buf, len, 0,
  (sockaddr*)&addrTo, sizeof(sockaddr) );
  }
  /
  bool MyConnect(SOCKET sockTo, char *addr,USHORT port)
  {
  int Result;
  //設置連接到的 套接字及地址結構
  SOCKADDR_IN addrTo;
  addrTo.sin_addr.S_un.S_addr=(inet_addr(addr));
  addrTo.sin_family=AF_INET;
  addrTo.sin_port=htons(port);
  //連接
  Result = connect(sockTo,(sockaddr *)&addrTo,sizeof(SOCKADDR_IN));
  if(SOCKET_ERROR == Result)
  {
  return false;
  }
  return true;
  }
  /
  int MyRecvFrom(SOCKET s, char FAR * buf,int len,char *addr,USHORT port)
  {
  //設置發送數據到的 套接字及地址結構
  SOCKADDR_IN addrFrom;
  addrFrom.sin_addr.S_un.S_addr=inet_addr(addr);
  addrFrom.sin_family=AF_INET;
  addrFrom.sin_port=htons(port);
  int addrlen = sizeof(SOCKADDR_IN);
  return recvfrom( s, buf, len, 0, (SOCKADDR *)&addrFrom, &addrlen);
  }
  /
  int ChName(char *fname,char *tname);//域名轉化
  bool SetDNSHead(char *name,char *buf)
  {
  memset(buf,0,sizeof(DnsHead));
  //設置頭部
  DnsHead *DnsH = (DnsHead *)buf;
  DnsH->ID = (USHORT)1;
  DnsH->tag = htons(0x0100);
  DnsH->numQ = htons(1);
  DnsH->numA = 0;
  DnsQuery *DnsQ =(DnsQuery *) ( buf+ sizeof(DnsHead) );
  int NameLen = ChName(name,(char *)DnsQ);
  //設置查詢信息
  DnsQ = (DnsQuery *)( (char *)DnsQ + NameLen );
  DnsQ->classes = htons(1);
  DnsQ->type = htons(1);
  return true;
  }
  //顯示錯誤信息
  void displayErrWSA(char *str)
  {
  printf("\n%s,err = %d\n",str,WSAGetLastError());
  getchar();
  }
  //域名轉化
  int ChName(char *fname,char *tname)
  {
  int j =0;
  int i =strlen(fname)-1;
  tname[i+2] = 0;
  int k = i+1;
  for (; i>=0;i--,k--)
  {
  if (fname[i] == '.')
  {
  tname[k] = j;
  j=0;
  }
  else
  {
  tname[k] = fname[i];
  j++;
  }
  }
  tname[k] = j;
  return strlen(tname)+1;
  }
 
  DNS域名解析流程剖析
  域名解析的流程,每個步驟如下:
  1) 客戶端通過瀏覽器訪問域名網站,發起查詢該域名的 IP 地址的 DNS 請求。該請求發送到了本地 DNS 服務器上。本地 DNS 服務器會首先查詢它的緩存記錄,如果緩存中有此條記錄,就可以直接返回結果。如果沒有,本地 DNS 服務器還要向 DNS 根服務器進行查詢。
  2) 本地 DNS 服務器向根服務器發送 DNS 請求,請求域名的 IP 地址。
  3) 根服務器經過查詢,沒有記錄該域名及 IP 地址的對應關系。但是會告訴本地 DNS 服務器,可以到域名服務器上繼續查詢,并給出域名服務器的地址(.com 服務器)。
  4) 本地 DNS 服務器向 .com 服務器發送 DNS 請求,請求域名、的 IP 地址。
  5).com 服務器收到請求后,不會直接返回域名和 IP 地址的對應關系,而是告訴本地 DNS 服務器,該域名可以在 baidu.com 域名服務器上進行解析獲取 IP 地址,并告訴域名服務器的地址。
  6) 本地 DNS 服務器向域名服務器發送 DNS 請求,請求域名的 IP 地址。
  7) 服務器收到請求后,在自己的緩存表中發現了該域名和 IP 地址的對應關系,并將IP地址返回給本地 DNS 服務器。
  8) 本地 DNS 服務器將獲取到與域名對應的 IP 地址返回給客戶端,并且將域名和 IP 地址的對應關系保存在緩存中,以備下次別的用戶查詢時使用。
  域名解析有哪些注意事項?域名解析基本知識詳解
  一、A記錄解析
  A記錄解析是最為常見的域名解析方式,記錄類型選擇”A”,記錄值填寫空間商提供的主機IP地址,MX優先級不需要設置,TTL設置默認的3600即可。選擇A記錄時,需要設定域名或者子域名指向,通常需要注意以下3點:
  1. 做A記錄時, 對應值必須是IP地址;
  2. 主機名必須填寫,用@可以表示主機名為空;
  3. 泛域名解析,請在主機名處輸入*,增加A記錄即可。
  A記錄對于網站優化來說是蜘蛛最為喜歡的一種方式,因為蜘蛛每次爬取網站都是固定的一個IP,能夠避免不必要的錯誤。不過A記錄對于使用不同網絡訪問網站的用戶來說,有一定的短處,例如網站放在電信服務器上,如果是聯通的用戶訪問,網站打開速度就會有一定的影響。
  二、CNAME記錄解析
  CNAME類型解析設置的方法和A記錄類型基本是一樣的,其中將記錄類型修改為”CNAME”,并且記錄值填寫服務器主機地址即可。不過對應的值不是一個固定的IP,而是主機的別名地址,以新網為例別名解析步驟為:
  1. 在主機名處填寫www或者其他名稱;
  2. 在記錄類型選擇類型為CNAME記錄;
  3. 在記錄值填寫別名地址;
  4. 點擊立即添加,完成添加別名解析。
  三、MX記錄解析

  MX記錄是相對用到較少的一種解析,MX記錄是做郵箱解析使用的。記錄類型選擇MX,線路類型選擇通用或者同時添加三條線路類型為電信、網通、教育網的記錄;記錄值填寫郵局商提供的服務器IP地址或別名地址;TTL設置默認的3600即可,MX優先級填寫郵局提供商要求的數據,或是默認10,有多條MX記錄的時候,優先級要設置不一樣的數據。


  c語言域名解析方法是怎樣的?以上就給大家介紹了關于c語言域名解析方法的問題,大家在做c語言域名解析的時候,就可以按照上面的步驟去做,這個是需要耐心的去做的,千萬不要著急,要不然就可能會出錯了。如果大家在做c語言域名解析的過程中,還有不懂的地方,可以咨詢新網。


聲明:免責聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,也不承認相關法律責任。如果您發現本社區中有涉嫌抄襲的內容,請發

送郵件至:operations@xinnet.com進行舉報,并提供相關證據,一經查實,本站將立刻刪除涉嫌侵權內容。本站原創內容未經允許不得轉載,或轉載時

需注明出處:新網idc知識百科

免費咨詢獲取折扣

Loading
主站蜘蛛池模板: 亚洲人成网77777香蕉 | 麻豆果冻精东九一传媒mv | 无码人妻少妇伦在线电影 | 第九色激情| 天天操天天舔 | 国产欧美在线 | 色妞ww精品视频7777nga | 久久婷婷影院 | 极品久久久久久 | 波兰性xxxxx极品hd | 巨茎爆乳无码性色福利 | 久久中文字幕人妻熟女少妇 | 成人黄色a级片 | 九九热免费观看 | 中文字幕无码肉感爆乳在线 | 爱av在线| 国产亚洲精品精品精品 | 日本一本二本三区免费 | 狠狠色丁香婷婷第六色孕妇 | 国产成人无码免费视频麻豆 | 俺也来俺也去俺也射 | 在线观看国产一区二区三区 | 人与禽性视频77777 | 亚洲乱码国产乱码精品精剪 | 欧美视频在线一区 | 麻豆国产在线精品国偷产拍 | 国产激情美女久久久久久吹潮 | 国产免费91视频 | 又大又粗又黄的网站不卡无码 | 亚洲欧美色国产综合 | 国产日本欧美一区二区 | dy888亚洲精品一区二区三区 | 隔壁邻居是巨爆乳寡妇 | 亚洲日韩视频 | 天天综合永久 | 特黄做受又硬又粗又大视频小说 | 伊人久久大香线蕉av网禁呦 | 草1024榴社区入口 | 欧洲人妻丰满av无码久久不卡 | 亚洲第一极品精品无码久久 | 香港三日三级少妇三级99 | 久久精品国产字幕高潮 | 欧美日韩性生活视频 | 欧洲女人牲交性开放视频 | 亚洲精品国产字幕久久不卡 | 无码少妇一区二区三区视频 | 久久久久一级 | 久久久久无码精品国产人妻无码 | 成人av免费 | 精品久久久久久中文墓无码 | 亚洲乱码中文字幕久久孕妇黑人 | 国产福利精品一区二区 | 色人阁网站 | 狼人大香伊蕉在人线国产 | 国产乱妇乱子在线播视频播放网站 | 亚洲成a人片77777在线播放 | 97人妻中文字幕总站 | 亚洲成色在线综合网站2018 | 无套内谢少妇毛片aaaa片免费 | 日韩欧美福利 | 国产成人av免费 | 久久99精品国产免费观观 | 日韩黄色免费视频 | 偷看美女洗澡一二三四区 | 狠狠色成人综合网 | 国产成人无码视频一区二区三区 | 国产精品30p| 国产级毛片 | 日本视频h| 小受叫床高潮娇喘嗯啊mp3 | 超清制服丝袜无码av福利网 | 亚洲另类激情专区小说 | 男生看的污网站 | 日本性猛交| 国产免费又色又爽又黄软件 | 综合久久久久 | 永久免费男同av无码入口 | 日韩和欧美一区二区 | 亚洲午夜精品久久久久久app | 亚洲人成在线观看 | 九色视频偷拍少妇的秘密 | 久久午夜无码鲁丝片秋霞 | 男女操操视频 | 成人免费看黄网站在线观看 | 产精品无码久久_亚洲国产精 | 国产成人无码免费视频97app | 亚洲国产成人精品女人 | 国产一级α片 | www日韩高清| 又粗又爽又猛高潮的在线视频 | 亚州激情视频 | 一区二区三区久久含羞草 | 国产免费av一区二区 | 亚洲精品无码不卡在线播he | 久久岛国搬运工 | 97资源共享在线视频 | 欧美激情一区二区视频 | 国产黄a三级| 网友真实露脸自拍10p |