哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

教你動(dòng)手寫(xiě)UDP協(xié)議?!狣NS報(bào)文解析

電子設(shè)計(jì) ? 來(lái)源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-24 16:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

教你動(dòng)手寫(xiě)UDP協(xié)議棧系列文章序號(hào)內(nèi)容1《教你動(dòng)手寫(xiě)UDP協(xié)議棧-UDP協(xié)議棧格式》2《教你動(dòng)手寫(xiě)UDP協(xié)議棧-DHCP報(bào)文解析》3《教你動(dòng)手寫(xiě)UDP協(xié)議棧-OTA上位機(jī)》4《教你動(dòng)手寫(xiě)UDP協(xié)議棧-DNS報(bào)文解析》背景因特網(wǎng)上的節(jié)點(diǎn)通過(guò)IP地址唯一標(biāo)識(shí),并且能通過(guò)IP地址來(lái)識(shí)別參與分布式應(yīng)用的主機(jī)。但對(duì)于大多數(shù)人來(lái)說(shuō),這些地址太繁瑣而且難以使用和記憶(特別是IPV6地址)。因此互聯(lián)網(wǎng)支持使用主機(jī)名稱(chēng)來(lái)識(shí)別包括客戶(hù)機(jī)和服務(wù)器在內(nèi)的主機(jī)。

為了使用如TCP和IP等協(xié)議,主機(jī)名稱(chēng)可以通過(guò)稱(chēng)為域名解析的過(guò)程轉(zhuǎn)換成IP地址。在互聯(lián)網(wǎng)中存在不同形式的名稱(chēng)解析,但是最普遍、最重要的一種是采用分布式數(shù)據(jù)庫(kù)系統(tǒng),即我們熟知的域名系統(tǒng)(DNS),也是這篇文章的主角。DNS - 是一個(gè)分布式的客戶(hù)機(jī)-服務(wù)器網(wǎng)絡(luò)數(shù)據(jù)庫(kù),TCP/IP應(yīng)用程序使用它來(lái)完成主機(jī)名稱(chēng)和IP地址之間的映射,提供電子郵件路由信息、服務(wù)命名和其他服務(wù)。DNS使用TCP和UDP的端口--53。DNS - 為了可擴(kuò)展性,DNS名稱(chēng)是分層的。每一級(jí)域名長(zhǎng)度的限制是63個(gè)字符,域名總長(zhǎng)度則不能超過(guò)253個(gè)字符。下面來(lái)介紹DNS報(bào)文的格式解析,以及如何將域名轉(zhuǎn)為IP地址的流程。準(zhǔn)備工具工具介紹WireShark網(wǎng)絡(luò)封包分析軟件,分析數(shù)據(jù)包CMDwindow 命令行DNS報(bào)文解析抓包分析打開(kāi)CMD和WireShark工具。在WireShark中設(shè)置過(guò)濾信息,我們只抓取DNS報(bào)文。在CMD鍵入ping www.baidu.com,然后查看WireShark的抓包信息。

可以看到兩包DNS報(bào)文,一個(gè)是DNS發(fā)送報(bào)文,一個(gè)是DNS接收?qǐng)?bào)文發(fā)送報(bào)文

接收?qǐng)?bào)文

發(fā)送報(bào)文和接收?qǐng)?bào)文格式是不一樣的,從上面截圖可以看到,接收?qǐng)?bào)文多一個(gè)Answers字段。

DNS可以使用UDP與TCP兩種協(xié)議。這里我們主要以UDP進(jìn)行分析。

DNS報(bào)文字段解析DNS報(bào)文格式:

DNS字段格式:發(fā)送報(bào)文

接收?qǐng)?bào)文

DNS報(bào)文頭部

字段說(shuō)明字段說(shuō)明Transaction ID辨別DNS應(yīng)答報(bào)文是哪個(gè)請(qǐng)求報(bào)文的響應(yīng)QRFlags字段,1為響應(yīng),0位查詢(xún)OpCodeFlags字段,查詢(xún)或響應(yīng)類(lèi)型,0為標(biāo)準(zhǔn),1為反向,2為服務(wù)器狀態(tài)請(qǐng)求AAFlags字段,授權(quán)回答TCFlags字段,截?cái)啵?表示超過(guò)512字節(jié)并已被截?cái)啵?表示沒(méi)有發(fā)送截?cái)郣DFlags字段,是否希望得到遞歸回答RAFlags字段,響應(yīng)報(bào)文中為1便是得到遞歸響應(yīng)ZFlags字段,0ADFlags字段,真是數(shù)據(jù)CDFlags字段,禁止校驗(yàn)RCODEFlags字段,返回碼:0-無(wú)差錯(cuò),1-格式錯(cuò)誤,2-服務(wù)器失效,3-不存在域名,4-查詢(xún)類(lèi)型不支持,5-被禁止,6-15保留QuestionsFlags字段,查詢(xún)數(shù)AnswerFlags字段,資源記錄數(shù)AuthorityFlags字段,授權(quán)資源記錄數(shù)AdditionalFlags字段,額外資源記錄數(shù)代碼實(shí)現(xiàn)/** DNS message header */PACK_STRUCT_BEGINstruct dns_h(yuǎn)eader { PACK_STRUCT_FIELD(uint16_t id); PACK_STRUCT_FIELD(uint8_t flags1); PACK_STRUCT_FIELD(uint8_t flags2); PACK_STRUCT_FIELD(uint16_t numquestions); PACK_STRUCT_FIELD(uint16_t numanswers); PACK_STRUCT_FIELD(uint16_t numauthrr); PACK_STRUCT_FIELD(uint16_t numextrarr);}PACK_STRUCT_STRUCT;PACK_STRUCT_ENDDNS報(bào)文問(wèn)題字段

字段說(shuō)明查詢(xún)名稱(chēng)格式:

字段說(shuō)明name查詢(xún)名稱(chēng),不定長(zhǎng)type查詢(xún)類(lèi)型class查詢(xún)類(lèi)代碼實(shí)現(xiàn)(由于名字是不定長(zhǎng),另作處理)PACK_STRUCT_BEGINstruct dns_query { PACK_STRUCT_FIELD(uint16_t type); PACK_STRUCT_FIELD(uint16_t class);}PACK_STRUCT_STRUCT;PACK_STRUCT_ENDDNS報(bào)文應(yīng)答字段

字段說(shuō)明(此字段只有應(yīng)答包才有)字段說(shuō)明name查詢(xún)名稱(chēng),不定長(zhǎng)type查詢(xún)類(lèi)型class查詢(xún)類(lèi)TTL該資源記錄的生命周期data length資源數(shù)據(jù)長(zhǎng)度address返回的IP地址,即域名轉(zhuǎn)換的IP地址代碼實(shí)現(xiàn)struct dns_answer { PACK_STRUCT_FIELD(uint16_t name); PACK_STRUCT_FIELD(uint16_t type); PACK_STRUCT_FIELD(uint16_t class); PACK_STRUCT_FIELD(uint32_t ttl); PACK_STRUCT_FIELD(uint16_t len); PACK_STRUCT_FIELD(struct ip_addr server_ip);}PACK_STRUCT_STRUCT;PACK_STRUCT_ENDDNS報(bào)文發(fā)送實(shí)現(xiàn)代碼實(shí)現(xiàn)static void dns_packet_output(uint8_t *host_name){ struct dns_h(yuǎn)eader dns_h(yuǎn)dr = {0}; struct dns_query dns_qry = {0}; struct dest_device_info dest_info = {0}; uint8_t *dns_packet = NULL; uint8_t *dns_name = NULL; uint16_t query_index = 0; uint16_t label_len = 0; uint16_t dns_name_len = strlen(host_name) + 2;
dns_packet = malloc(DNS_HDR_SIZE + dns_name_len + DNS_QUERY_SIZE); dns_name = malloc(strlen(host_name) + 2);
if(dns_packet ?。?NULL && dns_name ?。絅ULL) { //打包DNS header memset(&dns_h(yuǎn)dr, 0, DNS_HDR_SIZE); dns_h(yuǎn)dr.id = mu_h(yuǎn)tons(TRANSACTION_ID); dns_h(yuǎn)dr.flags1 = DNS_FLAG1_RD; dns_h(yuǎn)dr.numquestions = mu_h(yuǎn)tons(1); memcpy(dns_packet, &dns_h(yuǎn)dr, DNS_HDR_SIZE);
//將域名轉(zhuǎn)換DNS數(shù)據(jù)包格式 change_to_dns_name(dns_name, host_name);
memcpy(dns_packet + DNS_HDR_SIZE, dns_name, dns_name_len);
dns_qry.type = mu_h(yuǎn)tons(DNS_RRTYPE_A); dns_qry.class = mu_h(yuǎn)tons(DNS_RRCLASS_IN); //打包DNS query memcpy(dns_packet + DNS_HDR_SIZE + dns_name_len, &dns_qry, DNS_QUERY_SIZE);
memcpy(&dest_info.dest_mac, get_gw_mac(), MAC_ADDR_SIZE); memcpy(&dest_info.dest_ip, get_dns_server(), IP_ADDR_SIZE); dest_info.src_port = DNS_CLIENT_PORT; dest_info.dest_port = DNS_SERVER_PORT; //通過(guò)UDP報(bào)文發(fā)送 mini_udp_output(&dest_info, dns_packet, (DNS_HDR_SIZE + dns_name_len + DNS_QUERY_SIZE)); }
if(dns_packet != NULL) { free(dns_packet); } if(dns_name != NULL) { free(dns_name); }}驗(yàn)證代碼結(jié)果,我們通過(guò)查詢(xún)CSDN的IP地址,CSDN的域名:www.csdn.net

通過(guò)wireshark抓包,可以看到我們DNS報(bào)文已發(fā)送成功,并且有應(yīng)答包

DNS報(bào)文接收實(shí)現(xiàn)代碼實(shí)現(xiàn)static void dns_packet_input(void *dns_packet_data){ struct dns_h(yuǎn)eader *dns_h(yuǎn)dr = {0}; struct dns_answer *dns_ans = {0}; uint16_t dns_name_len = strlen("www.csdn.net") + 2; uint8_t *server_dns_name = malloc(strlen("www.csdn.net") + 2);
if(server_dns_name == NULL) { LOG_E("malloc fail?。。ⅲ?; return; }
dns_h(yuǎn)dr = dns_packet_data; if(dns_h(yuǎn)dr->id == mu_ntohs(TRANSACTION_ID) && (dns_h(yuǎn)dr->numanswers > 1)) { change_to_dns_name(server_dns_name, "www.csdn.net");
if(strncmp(dns_packet_data + DNS_HDR_SIZE, server_dns_name, dns_name_len) == 0) { dns_ans = dns_packet_data + DNS_HDR_SIZE + dns_name_len + DNS_QUERY_SIZE;
printf("CSDN IP: %d:%d:%d:%d ", dns_ans->server_ip.a(chǎn)ddr[0], dns_ans->server_ip.a(chǎn)ddr[1], dns_ans->server_ip.a(chǎn)ddr[2], dns_ans->server_ip.a(chǎn)ddr[3]); } } free(server_dns_name);}通過(guò)wireshark抓包的IP與代碼捕獲的IP一致:

審核編輯:符乾江


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • DNS
    DNS
    +關(guān)注

    關(guān)注

    0

    文章

    229

    瀏覽量

    21225
  • UDP協(xié)議棧
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1263
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    WiMi-net五層協(xié)議深度拆解:有中心自組網(wǎng)的落地實(shí)踐

    從OSI七層到WiMi-net五層,經(jīng)典理論如何落地?本文深度拆解WiMi-net有中心自組網(wǎng)協(xié)議的五層架構(gòu):物理層(Sub-GHz射頻)、鏈路層(TDMA時(shí)隙)、網(wǎng)絡(luò)層(動(dòng)態(tài)路由)、傳輸層
    的頭像 發(fā)表于 04-02 17:40 ?1101次閱讀
    WiMi-net五層<b class='flag-5'>協(xié)議</b><b class='flag-5'>棧</b>深度拆解:有中心自組網(wǎng)的落地實(shí)踐

    DNS 解析故障:安全風(fēng)險(xiǎn)、診斷排查與防護(hù)指南

    前言DNS作為互聯(lián)網(wǎng)的“地址導(dǎo)航系統(tǒng)”,其穩(wěn)定運(yùn)行直接關(guān)系到網(wǎng)絡(luò)訪問(wèn)的安全性與可用性。一旦出現(xiàn)解析故障,不僅會(huì)導(dǎo)致網(wǎng)站無(wú)法訪問(wèn),更可能引發(fā)一系列嚴(yán)重的安全風(fēng)險(xiǎn),給個(gè)人用戶(hù)和企業(yè)帶來(lái)數(shù)據(jù)泄露、業(yè)務(wù)中斷
    的頭像 發(fā)表于 01-28 10:28 ?1486次閱讀
    <b class='flag-5'>DNS</b> <b class='flag-5'>解析</b>故障:安全風(fēng)險(xiǎn)、診斷排查與防護(hù)指南

    RDMA設(shè)計(jì)12:融合以太網(wǎng)協(xié)議設(shè)計(jì)1

    本文主要交流設(shè)計(jì)思路,在本博客已給出相關(guān)博文90多篇,希望對(duì)初學(xué)者有用。注意這里只是拋磚引玉,切莫認(rèn)為參考這就可以完成商用IP設(shè)計(jì)。 融合以太網(wǎng)協(xié)議負(fù)責(zé)用戶(hù)請(qǐng)求與 RDMA 數(shù)據(jù)包的轉(zhuǎn)換、管理
    發(fā)表于 12-25 11:39

    工業(yè)智能網(wǎng)關(guān)支持IEC104協(xié)議

    。工業(yè)智能網(wǎng)關(guān)通過(guò)內(nèi)置協(xié)議或模塊化設(shè)計(jì),能夠直接解析IEC104協(xié)議報(bào)文,支持以下核心功能: 數(shù)據(jù)采集 :實(shí)時(shí)采集電力設(shè)備(如變電站、發(fā)電
    的頭像 發(fā)表于 12-18 14:42 ?634次閱讀
    工業(yè)智能網(wǎng)關(guān)支持IEC104<b class='flag-5'>協(xié)議</b>嗎

    以太網(wǎng)通訊在FPGA上的實(shí)現(xiàn)

    模塊用來(lái)將需要發(fā)送的數(shù)據(jù)添加報(bào)文頭封裝為UDP報(bào)文,然后發(fā)送給MAC層,也負(fù)責(zé)將接收到的UDP報(bào)文提取出數(shù)據(jù)供FPGA其他模塊使用,TCP
    發(fā)表于 10-30 07:45

    移植網(wǎng)絡(luò)PHY芯片驅(qū)動(dòng),如何融入 rt-thread 的網(wǎng)絡(luò)體系,并添加新的以太網(wǎng)類(lèi)型的報(bào)文?

    的 TCP 和 UDP 報(bào)文不沖突(對(duì)于同一個(gè)網(wǎng)絡(luò)接口,可能會(huì)同時(shí)收發(fā) TCP、UDP 和 HPGP報(bào)文)。
    發(fā)表于 09-22 06:11

    mqtt dns解析失敗是為什么?

    解析域名的ip地址就能正常連上,而直接解析域名就不行,為什么呢
    發(fā)表于 09-16 06:38

    協(xié)議解析網(wǎng)關(guān)是什么?有什么功能?

    協(xié)議解析網(wǎng)關(guān)是一種位于不同網(wǎng)絡(luò)或設(shè)備之間的中間件設(shè)備或軟件系統(tǒng),主要作用是解決不同通信協(xié)議之間的不兼容性問(wèn)題。它能夠接收來(lái)自不同設(shè)備或系統(tǒng)的數(shù)據(jù)包,識(shí)別其攜帶的協(xié)議格式(如Modbus
    的頭像 發(fā)表于 08-13 14:04 ?1016次閱讀
    <b class='flag-5'>協(xié)議</b><b class='flag-5'>解析</b>網(wǎng)關(guān)是什么?有什么功能?

    用于各種設(shè)備協(xié)議間做報(bào)文轉(zhuǎn)換的網(wǎng)關(guān)是什么

    功能是實(shí)現(xiàn)不同協(xié)議格式的報(bào)文(數(shù)據(jù))在傳輸過(guò)程中的解析、轉(zhuǎn)換和轉(zhuǎn)發(fā)。 一、協(xié)議轉(zhuǎn)換網(wǎng)關(guān)的核心作用 1.協(xié)議
    的頭像 發(fā)表于 08-11 14:08 ?1179次閱讀
    用于各種設(shè)備<b class='flag-5'>協(xié)議</b>間做<b class='flag-5'>報(bào)文</b>轉(zhuǎn)換的網(wǎng)關(guān)是什么

    【RA-Eco-RA6M4開(kāi)發(fā)板評(píng)測(cè)】——6.原創(chuàng)從0到1完整實(shí)現(xiàn)modbus master協(xié)議

    有名的像libmodbus, freemodbus,mbus等等,這些協(xié)議都是老外寫(xiě)的,都是別人自做的,本來(lái)學(xué)好一個(gè)協(xié)議最好的方法就是自己手寫(xiě)
    發(fā)表于 07-25 20:22

    第五章 W55MH32 UDP示例

    本文介紹了在 W55MH32?芯片上實(shí)現(xiàn) UDP?通信及數(shù)據(jù)回環(huán)測(cè)試的方法。闡述了 UDP?協(xié)議的概念、特點(diǎn)、應(yīng)用場(chǎng)景、報(bào)文傳輸流程和報(bào)文結(jié)
    的頭像 發(fā)表于 07-24 09:13 ?1324次閱讀
    第五章 W55MH32 <b class='flag-5'>UDP</b>示例

    協(xié)議分析儀能監(jiān)測(cè)哪些異常行為?

    協(xié)議分析儀通過(guò)深度解析網(wǎng)絡(luò)通信中的協(xié)議字段、時(shí)序和狀態(tài),能夠精準(zhǔn)識(shí)別多種異常行為,涵蓋從配置錯(cuò)誤到惡意攻擊的廣泛場(chǎng)景。以下是其可監(jiān)測(cè)的核心異常行為類(lèi)型及具體實(shí)例:一、協(xié)議實(shí)現(xiàn)違規(guī):違反
    發(fā)表于 07-22 14:20

    RDMA簡(jiǎn)介3之四種子協(xié)議對(duì)比

    ,通過(guò)ETH Type標(biāo)識(shí)RoCE報(bào)文。而RoCE v2基于UDP/IP協(xié)議承載RDMA,可部署在三層網(wǎng)絡(luò)環(huán)境下,在原有IB協(xié)議報(bào)文基礎(chǔ)上增
    發(fā)表于 06-04 16:05

    ModbusRTU轉(zhuǎn)profibusDP網(wǎng)關(guān)與RAC400通訊報(bào)文解析

    高性能的現(xiàn)場(chǎng)總線標(biāo)準(zhǔn),適用于高速、實(shí)時(shí)性要求較高的場(chǎng)景。為了實(shí)現(xiàn)這兩種協(xié)議之間的互聯(lián)互通,我們需要一個(gè)專(zhuān)門(mén)的轉(zhuǎn)換網(wǎng)關(guān)。本文將以RAC400為例,介紹如何通過(guò)ModbusRTU轉(zhuǎn)ProfibusDP網(wǎng)關(guān)與RAC400進(jìn)行通信報(bào)文解析
    的頭像 發(fā)表于 05-25 20:01 ?640次閱讀
    ModbusRTU轉(zhuǎn)profibusDP網(wǎng)關(guān)與RAC400通訊<b class='flag-5'>報(bào)文</b><b class='flag-5'>解析</b>

    如何在Linux中配置DNS服務(wù)器

    本文詳細(xì)介紹了如何在Linux中配置DNS服務(wù)器,包括DNS工作原理、本地緩存、DNS查詢(xún)過(guò)程,以及正向和反向查詢(xún)的配置。步驟包括服務(wù)器配置、編輯BIND配置文件、添加解析信息和客戶(hù)端
    的頭像 發(fā)表于 05-09 13:38 ?2761次閱讀
    如何在Linux中配置<b class='flag-5'>DNS</b>服務(wù)器
    集安市| 山西省| 新乡县| 龙川县| 迁安市| 山东| 大化| 民乐县| 民丰县| 文安县| 崇礼县| 崇左市| 郎溪县| 建瓯市| 阿坝| 青铜峡市| 宝清县| 石楼县| 苗栗县| 徐水县| 玉树县| 元阳县| 东兴市| 舒城县| 阜康市| 昌邑市| 常熟市| 秀山| 衡阳市| 瑞安市| 手游| 三台县| 余干县| 东乌| 林州市| 肇州县| 八宿县| 东山县| 竹溪县| 黑山县| 峨眉山市|