欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

自己動手學TCP/IP–tftp協議

系統 2066 0

TFTP(Trivial File Transfer Protocol,簡單 文件傳輸協議

1.tftp的服務端口號是69

2.tftp是基于udp協議的

3.tftp是明文傳輸的,是一種比較輕量型的協議,一般用于bootloader加載內核

TFTP工作流程

服務端開啟tftp服務,tftp是一種stand_alone服務,不是常駐內存的,是在有需要的時候才去調用的。首先,客戶端發送一個讀(RRQ:2個字節)或者寫(WRQ:2個字節)的請求,數據包的目標端口是69。對于讀或者寫的報文格式如下:

RRQ/WRQ(2個字節)+文件名(N字節)+0(1字節)+模式(N字節)+0(1字節)

目前模式字段主要有2種:netascii,這是8位的ASCII碼形式;另一種是octet,這是8位源數據類型。對于netascii是把回車和換行(CR/LF)解釋成兩個字節的??梢圆榭? http://www.firefoxbug.net/?p=1041

tftp-server接收到數據包:如果是發現是讀(RRQ),就重新隨機分配一個端口,直接發送數據(DATA:2個字節)+塊編號(2個字節),然后是0~512字節數據包??蛻舳私邮盏綌祿?,發給服務端(ACK:2個字節)+塊編號(2個字節)。如果是普通的數據包,那么數據段的大小一定是512字節,如果是最后一個數據包,肯定是小于512字節的。tftp就是通過發現了一個數據段小于512字節的數據包來聲明結束文件的傳輸了。那么一個要傳輸的文件剛還是512字節的整數倍怎么辦呢?tftp會在最后傳輸一個數據段大小是0包。

tftp-server接收到數據包:如果發現是寫(WRQ),服務端就發回(ACK:2個字節)+(塊編號0:2個字節)的包,接著客戶端就發送(DATA:2個字節)+(塊編號1:2個字節)+數據段給服務端,服務端發回(ACK:2個字節)+(塊編號1:2個字節)。。。依次發送。

錯誤信息是系統自定義的,格式主要是error(2個字節)+錯誤碼(2個字節)+錯誤信息(N個字節)

下面是tftp數據包的格式圖


下面是C語言解析tftp包的一小段代碼:

    struct  tftphdr {
        short   th_opcode;                      /* packet type */
        union {
                unsigned short  tu_block;       /* block # */
                short   tu_code;                /* error code */
                char    tu_stuff[1];            /* request packet stuff */
        } __attribute__ ((__packed__)) th_u;
        char    th_data[1];                     /* data or error string */
} __attribute__ ((__packed__));

// 解析udp包,packet_buffer是用rawsocket抓出來的以太網包,
void ParseUDPPacket(unsigned char *packet_buffer)
{
    struct ethhdr *eth_header;//以太網頭
    struct iphdr *ip_header; //ip頭
    struct udphdr *udp_header; //tcp頭
    eth_header = (struct ethhdr*)packet_buffer;
    ip_header = (struct iphdr*)(packet_buffer + sizeof(struct ethhdr));
    udp_header = (struct udphdr*)(packet_buffer + sizeof(struct ethhdr) + ip_header->ihl*4);
    unsigned char *data = NULL;
    data = (packet_buffer + sizeof(struct ethhdr) + ip_header->ihl*4 + 8);//8代表UDP包頭
    struct tftphdr *tp = (struct tftphdr *)data;    //  /usr/include/arpa/tftp.h
    tftp_print(data,ntohs(udp_header->len)-8);  //ntohs(udp_header->len)-8表示udp數據包長度
}

/*
* Print trivial file transfer program requests
*/
void tftp_print(register const u_char *bp, u_int length)
{
    register const struct tftphdr *tp;
    register const u_char *p;
    register int opcode,i;
    static char tstr[] = " [|tftp]";
    char buffer[520] = {'\0'};
    tp = (const struct tftphdr *)bp;

    // printf(" %d", length);
    // printf("length of tftp_data = %d\n",length);

    /* Print tftp request type */

    opcode = EXTRACT_16BITS(&tp->th_opcode);
    printf(" %s",tok2str(op2str, "tftp-#%d", opcode));
    /* Bail if bogus opcode */

    switch (opcode) {

        case RRQ:
        break;

        case WRQ:
        break;

        case ACK:
        break;

        case DATA:
        break;

        case ERROR:
        break;

        default:
        /* We shouldn't get here */
        printf("(unknown #%d)", opcode);
        break;
    }
    return;
}
  

詳細的可以查看tcpdump的源碼。

自己動手學TCP/IP–tftp協議


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲国产日韩欧美高清片a 高清视频在线播放 | 国产乱码精品一区二区三区中 | 久久久女 | 91短视频在线视频 | 欧美日韩国产一区二区三区不卡 | 久久久99精品久久久 | 亚洲视频欧美视频 | 久久国产视频一区 | 成人黄色小视频网站 | 成人欧美在线观看 | 欧美亚洲在线视频 | 日韩一区二区视频 | 久久精品99久久 | chengrenzaixian | 亚洲一区二区在线视频 | 久草资源在线视频 | 成人免费一区二区三区视频软件 | 日本高清一级片 | 一级特黄aa大片欧美 | 亚洲精品成人 | 两性视频在线 | 男女激情动态视频 | 久操网址 | 欧美一级黄视频 | 午夜精品一区 | 日本人69视频jizz免费看 | 久久只有这才是精品99 | 久久精品人人做人人 | 很黄很色的小视频在线网站 | 天天干夜夜操 | 性视频一区二区 | 69国产成人精品午夜福中文 | 亚洲综合一区二区三区 | 亚洲精品97福利在线 | 国产一区二区三区在线免费观看 | 亚洲成人三区 | 2021国产精品自产拍在线 | 欧美日韩国产综合网 | 日韩毛片大全免费高清 | 我我色综合 | 香港三级日本三级a视频 |