国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Shell 命令集合 網(wǎng)絡(luò)通訊 】Linux 追蹤數(shù)據(jù)包在網(wǎng)絡(luò)中的路徑 traceroute命令 使用指南

這篇具有很好參考價值的文章主要介紹了【Shell 命令集合 網(wǎng)絡(luò)通訊 】Linux 追蹤數(shù)據(jù)包在網(wǎng)絡(luò)中的路徑 traceroute命令 使用指南。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


Shell 命令專欄:Linux Shell 命令全解析


描述


traceroute命令用于追蹤數(shù)據(jù)包在網(wǎng)絡(luò)中的路徑。它通過發(fā)送一系列的ICMP(Internet Control Message Protocol)回顯請求數(shù)據(jù)包(ping包),并記錄每個數(shù)據(jù)包的傳輸時間,從而確定數(shù)據(jù)包從源主機到目標(biāo)主機經(jīng)過的所有中間路由器。

當(dāng)我們使用traceroute命令時,它會發(fā)送一系列的數(shù)據(jù)包,每個數(shù)據(jù)包的TTL(生存時間)值逐漸遞增。當(dāng)數(shù)據(jù)包到達(dá)某個中間路由器時,如果TTL值為0,路由器會將該數(shù)據(jù)包丟棄,并發(fā)送一個ICMP回顯超時消息給源主機。通過這種方式,traceroute命令可以獲取數(shù)據(jù)包經(jīng)過的每個中間路由器的IP地址和傳輸時間。

通過分析traceroute命令的輸出,我們可以確定數(shù)據(jù)包在網(wǎng)絡(luò)中的路徑,以及每個中間路由器的響應(yīng)時間。這對于網(wǎng)絡(luò)故障排除和網(wǎng)絡(luò)性能優(yōu)化非常有幫助。我們可以根據(jù)traceroute的結(jié)果,確定數(shù)據(jù)包在網(wǎng)絡(luò)中的瓶頸位置,并采取相應(yīng)的措施來改善網(wǎng)絡(luò)性能。

總結(jié)起來,traceroute命令的作用是通過發(fā)送一系列的ICMP回顯請求數(shù)據(jù)包,追蹤數(shù)據(jù)包在網(wǎng)絡(luò)中的路徑,并記錄每個數(shù)據(jù)包的傳輸時間,以便分析網(wǎng)絡(luò)性能和故障排除。


語法格式

traceroute [選項] 目標(biāo)主機

參數(shù)說明

  • -n:以數(shù)字形式顯示中間路由器的IP地址,而不進行反向DNS查找。
  • -q <次數(shù)>:設(shè)置每個TTL值發(fā)送的數(shù)據(jù)包數(shù)量。
  • -I:使用ICMP Echo請求數(shù)據(jù)包(ping包)進行追蹤,而不是默認(rèn)的UDP數(shù)據(jù)包。
  • -w <超時時間>:設(shè)置等待每個中間路由器響應(yīng)的超時時間。
  • -m <最大跳數(shù)>:設(shè)置追蹤路徑的最大長度,即最大跳數(shù)。
  • -f <起始TTL值>:設(shè)置起始TTL值,即從指定跳數(shù)開始追蹤路徑。

錯誤情況

  • 如果目標(biāo)主機無法到達(dá)或不存在,traceroute命令將顯示相關(guān)錯誤信息,如"無法解析主機"或"網(wǎng)絡(luò)不可達(dá)"。
  • 如果網(wǎng)絡(luò)中存在防火墻或路由器配置問題,可能會導(dǎo)致traceroute命令失敗或無法顯示完整的路徑。
  • 如果traceroute命令的超時時間設(shè)置過短,可能會導(dǎo)致中間路由器無法及時響應(yīng),從而顯示超時錯誤。

請注意,以上是一些常見的錯誤情況,實際情況可能因網(wǎng)絡(luò)配置和環(huán)境而有所不同。在使用traceroute命令時,需要根據(jù)具體情況進行參數(shù)設(shè)置和錯誤排查。

注意事項

在使用Linux Shell中的traceroute命令時,有一些注意事項需要考慮:

  1. 需要使用管理員權(quán)限:traceroute命令需要發(fā)送和接收ICMP或UDP數(shù)據(jù)包,這通常需要管理員權(quán)限。因此,在使用traceroute命令之前,請確保您具有足夠的權(quán)限,或者使用sudo來執(zhí)行命令。

  2. 防火墻和路由器配置:在某些情況下,網(wǎng)絡(luò)中的防火墻或路由器配置可能會阻止或限制traceroute命令的正常執(zhí)行。如果您發(fā)現(xiàn)無法獲取完整的路徑或出現(xiàn)超時錯誤,請檢查網(wǎng)絡(luò)設(shè)備的配置,并確保允許ICMP或UDP數(shù)據(jù)包通過。

  3. 解析主機名的延遲:traceroute命令默認(rèn)會嘗試解析每個中間路由器的IP地址對應(yīng)的主機名。這可能會導(dǎo)致一些延遲,特別是在網(wǎng)絡(luò)中存在DNS問題或主機名解析較慢的情況下。如果您對延遲比較敏感,可以使用-n選項來禁用主機名解析。

  4. 超時時間的設(shè)置:traceroute命令會等待每個中間路由器的響應(yīng),如果超過了設(shè)定的超時時間仍未收到響應(yīng),將顯示超時錯誤。默認(rèn)的超時時間可能不適用于所有網(wǎng)絡(luò)環(huán)境。您可以使用-w選項來設(shè)置合適的超時時間,以確保能夠獲取到足夠的響應(yīng)。

  5. 最大跳數(shù)的設(shè)置:traceroute命令默認(rèn)的最大跳數(shù)為30,這意味著如果數(shù)據(jù)包在30個跳內(nèi)未到達(dá)目標(biāo)主機,將停止追蹤并顯示相關(guān)信息。在某些網(wǎng)絡(luò)中,可能需要設(shè)置更大的最大跳數(shù),以便追蹤更長的路徑。您可以使用-m選項來設(shè)置最大跳數(shù)。

  6. 安全性考慮:由于traceroute命令涉及發(fā)送和接收網(wǎng)絡(luò)數(shù)據(jù)包,可能會引起一些安全問題。在某些情況下,網(wǎng)絡(luò)管理員可能會限制或禁止使用traceroute命令。在使用traceroute命令時,請確保您已獲得適當(dāng)?shù)氖跈?quán),并遵守相關(guān)的安全政策和規(guī)定。

總之,在使用traceroute命令時,請確保您具備足夠的權(quán)限、了解網(wǎng)絡(luò)環(huán)境和配置,并注意安全性和延遲等因素。


底層實現(xiàn)

在Linux Shell中,traceroute命令的底層實現(xiàn)是通過發(fā)送特定類型的網(wǎng)絡(luò)數(shù)據(jù)包來追蹤路徑。具體來說,它使用了ICMP(Internet Control Message Protocol)或UDP(User Datagram Protocol)數(shù)據(jù)包來實現(xiàn)。

當(dāng)我們執(zhí)行traceroute命令時,它會創(chuàng)建一個原始套接字(raw socket)來發(fā)送數(shù)據(jù)包。在每個數(shù)據(jù)包中,它會設(shè)置一個特定的TTL(Time to Live)值,該值指定了數(shù)據(jù)包在網(wǎng)絡(luò)中可以經(jīng)過的最大跳數(shù)。初始TTL值通常為1。

traceroute命令通過發(fā)送數(shù)據(jù)包到目標(biāo)主機,并等待每個中間路由器的響應(yīng)。如果一個中間路由器收到了數(shù)據(jù)包,但發(fā)現(xiàn)TTL值已經(jīng)為0,它會丟棄該數(shù)據(jù)包,并發(fā)送一個ICMP超時消息(如果使用ICMP協(xié)議)或UDP端口不可達(dá)消息(如果使用UDP協(xié)議)給源主機。這樣,traceroute命令就能夠確定數(shù)據(jù)包經(jīng)過的每個中間路由器的IP地址和傳輸時間。

為了獲取更多的信息,traceroute命令會逐漸增加TTL值,并發(fā)送多個數(shù)據(jù)包,以便覆蓋整個路徑。它會記錄每個數(shù)據(jù)包的傳輸時間和路由器的IP地址,然后將結(jié)果輸出給用戶。

需要注意的是,底層實現(xiàn)可能因操作系統(tǒng)和網(wǎng)絡(luò)設(shè)備的不同而有所差異。不同的操作系統(tǒng)可能使用不同的方式來發(fā)送和接收數(shù)據(jù)包,而網(wǎng)絡(luò)設(shè)備的配置和策略也可能會影響traceroute命令的執(zhí)行和結(jié)果。

總結(jié)起來,traceroute命令底層通過發(fā)送特定類型的網(wǎng)絡(luò)數(shù)據(jù)包(ICMP或UDP)來追蹤路徑。它使用TTL值來控制數(shù)據(jù)包在網(wǎng)絡(luò)中經(jīng)過的跳數(shù),并通過接收中間路由器的響應(yīng)來確定路徑和傳輸時間。


示例

示例一

$ traceroute www.google.com

該命令將追蹤到達(dá)www.google.com的路徑,并顯示每個中間路由器的IP地址和傳輸時間。

示例二

$ traceroute -n 192.168.0.1

該命令將以數(shù)字形式顯示中間路由器的IP地址,而不進行反向DNS查找。

示例三

$ traceroute -q 10 www.example.com

該命令將發(fā)送10個數(shù)據(jù)包來追蹤到達(dá)www.example.com的路徑。

示例四

$ traceroute -I 8.8.8.8

該命令將使用ICMP Echo請求數(shù)據(jù)包(ping包)進行追蹤,而不是默認(rèn)的UDP數(shù)據(jù)包。

示例五

$ traceroute -w 2 www.yahoo.com

該命令將設(shè)置等待每個中間路由器響應(yīng)的超時時間為2秒。

示例六

$ traceroute -m 20 www.microsoft.com

該命令將設(shè)置最大跳數(shù)為20,即追蹤路徑的最大長度為20跳。

示例七

$ traceroute -f 5 www.amazon.com

該命令將設(shè)置起始TTL值為5,即從第5跳開始追蹤路徑。


用c語言實現(xiàn)


下面是一個使用C語言實現(xiàn)traceroute命令的簡單示例代碼,代碼中使用了原始套接字(raw socket)來發(fā)送和接收網(wǎng)絡(luò)數(shù)據(jù)包。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#include <arpa/inet.h>
#include <netdb.h>

#define MAX_HOPS 30
#define PACKET_SIZE 64
#define ICMP_ECHO_REQUEST 8
#define ICMP_ECHO_REPLY 0
#define ICMP_TIME_EXCEEDED 11

// 計算校驗和
unsigned short calculateChecksum(unsigned short *buffer, int length) {
    unsigned long sum = 0;
    while (length > 1) {
        sum += *buffer++;
        length -= 2;
    }
    if (length == 1) {
        sum += *(unsigned char *)buffer;
    }
    sum = (sum >> 16) + (sum & 0xFFFF);
    sum += (sum >> 16);
    return ~sum;
}

// 發(fā)送ICMP回顯請求數(shù)據(jù)包
void sendEchoRequest(int sockfd, struct sockaddr_in *dest_addr, int ttl) {
    struct icmphdr icmp_header;
    memset(&icmp_header, 0, sizeof(struct icmphdr));
    icmp_header.type = ICMP_ECHO_REQUEST;
    icmp_header.code = 0;
    icmp_header.un.echo.id = getpid();
    icmp_header.un.echo.sequence = ttl;
    icmp_header.checksum = calculateChecksum((unsigned short *)&icmp_header, sizeof(struct icmphdr));

    setsockopt(sockfd, IPPROTO_IP, IP_TTL, &ttl, sizeof(int));
    sendto(sockfd, &icmp_header, sizeof(struct icmphdr), 0, (struct sockaddr *)dest_addr, sizeof(struct sockaddr_in));
}

// 接收ICMP回顯回復(fù)數(shù)據(jù)包
int receiveEchoReply(int sockfd, int ttl, struct sockaddr_in *recv_addr, float *rtt) {
    char buffer[PACKET_SIZE];
    struct timeval start_time, end_time;
    socklen_t addr_len = sizeof(struct sockaddr_in);

    gettimeofday(&start_time, NULL);
    ssize_t bytes_received = recvfrom(sockfd, buffer, PACKET_SIZE, 0, (struct sockaddr *)recv_addr, &addr_len);
    gettimeofday(&end_time, NULL);

    *rtt = (end_time.tv_sec - start_time.tv_sec) * 1000.0 + (end_time.tv_usec - start_time.tv_usec) / 1000.0;

    if (bytes_received >= sizeof(struct iphdr) + sizeof(struct icmphdr)) {
        struct iphdr *ip_header = (struct iphdr *)buffer;
        struct icmphdr *icmp_header = (struct icmphdr *)(buffer + (ip_header->ihl * 4));
        if (icmp_header->type == ICMP_ECHO_REPLY) {
            return 1; // 收到回復(fù)
        } else if (icmp_header->type == ICMP_TIME_EXCEEDED) {
            return 2; // TTL超時
        }
    }
    return 0; // 其他情況
}

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: %s <destination>\n", argv[0]);
        return 1;
    }

    struct hostent *host = gethostbyname(argv[1]);
    if (host == NULL) {
        printf("Cannot resolve hostname.\n");
        return 1;
    }

    int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
    if (sockfd < 0) {
        perror("Socket creation failed");
        return 1;
    }

    struct sockaddr_in dest_addr;
    memset(&dest_addr, 0, sizeof(struct sockaddr_in));
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_addr = *((struct in_addr *)host->h_addr);

    printf("Traceroute to %s (%s)\n", argv[1], inet_ntoa(dest_addr.sin_addr));

    for (int ttl = 1; ttl <= MAX_HOPS; ttl++) {
        printf("%2d ", ttl);

        for (int i = 0; i < 3; i++) {
            sendEchoRequest(sockfd, &dest_addr, ttl);

            struct sockaddr_in recv_addr;
            memset(&recv_addr, 0, sizeof(struct sockaddr_in));
            float rtt = 0.0;

            int result = receiveEchoReply(sockfd, ttl, &recv_addr, &rtt);
            if (result == 1) {
                printf(" %.3f ms", rtt);
                break;
            } else if (result == 2) {
                printf(" *");
            } else {
                printf(" ???");
            }
        }

        printf("\n");
    }

    close(sockfd);
    return 0;
}

這段代碼使用了原始套接字(raw socket)來發(fā)送和接收ICMP數(shù)據(jù)包。它通過設(shè)置TTL值和發(fā)送ICMP回顯請求數(shù)據(jù)包來追蹤路徑,并通過接收ICMP回顯回復(fù)數(shù)據(jù)包來獲取每個中間路由器的響應(yīng)時間。代碼中還包含了一些輔助函數(shù),如計算校驗和和處理時間等。

請注意,使用原始套接字需要具有管理員權(quán)限。因此,在運行該代碼時,您可能需要使用sudo或以root用戶身份執(zhí)行。此外,由于使用了原始套接字,該代碼只能在Linux等支持原始套接字的操作系統(tǒng)上運行。

這只是一個簡單的示例,實際上,traceroute命令的實現(xiàn)要更加復(fù)雜,涉及到更多的選項和錯誤處理。此外,由于網(wǎng)絡(luò)環(huán)境的不同,代碼可能需要進行適當(dāng)?shù)恼{(diào)整和修改。


結(jié)語

在我們的探索過程中,我們已經(jīng)深入了解了Shell命令的強大功能和廣泛應(yīng)用。然而,學(xué)習(xí)這些技術(shù)只是開始。真正的力量來自于你如何將它們?nèi)谌氲侥愕娜粘9ぷ髦校蕴岣咝屎蜕a(chǎn)力。

心理學(xué)告訴我們,學(xué)習(xí)是一個持續(xù)且積極參與的過程。所以,我鼓勵你不僅要閱讀和理解這些命令,還要動手實踐它們。嘗試創(chuàng)建自己的命令,逐步掌握Shell編程,使其成為你日常工作的一部分。

同時,請記住分享是學(xué)習(xí)過程中非常重要的一環(huán)。如果你發(fā)現(xiàn)本博客對你有幫助,請不吝點贊并留下評論。分享你自己在使用Shell命令時遇到的問題或者有趣的經(jīng)驗,可以幫助更多人從中學(xué)習(xí)。
此外,我也歡迎你收藏本博客,并隨時回來查閱。因為復(fù)習(xí)和反復(fù)實踐也是鞏固知識、提高技能的關(guān)鍵。

最后,請記?。好總€人都可以通過持續(xù)學(xué)習(xí)和實踐成為Shell編程專家。我期待看到你在這個旅途中取得更大進步!


閱讀我的CSDN主頁,解鎖更多精彩內(nèi)容:泡沫的CSDN主頁

linux traceroute命令詳解,# Shell命令集合,網(wǎng)絡(luò),linux,智能路由器,開發(fā)語言,嵌入式,c++,運維文章來源地址http://www.zghlxwxcb.cn/news/detail-757049.html

到了這里,關(guān)于【Shell 命令集合 網(wǎng)絡(luò)通訊 】Linux 追蹤數(shù)據(jù)包在網(wǎng)絡(luò)中的路徑 traceroute命令 使用指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 物聯(lián)網(wǎng)網(wǎng)絡(luò)通訊知識

    物聯(lián)網(wǎng)網(wǎng)絡(luò)通訊知識

    RTU英文全稱Remote Terminal Units,中文全稱為遠(yuǎn)程終端單元。遠(yuǎn)程終端設(shè)備(RTU)是安裝在遠(yuǎn)程現(xiàn)場的 電子設(shè)備 ,用來監(jiān)視和測量安裝在遠(yuǎn)程現(xiàn)場的傳感器和設(shè)備。通俗理解就是能夠編程的還可以將數(shù)據(jù)傳輸?shù)椒?wù)器的工具。RTU內(nèi)部是包含 通訊模塊 的,RTU儀表配置服務(wù)器后,就可

    2024年02月05日
    瀏覽(24)
  • 網(wǎng)絡(luò)通訊組件性能優(yōu)化之路

    網(wǎng)絡(luò)通訊組件性能優(yōu)化之路

    BIO為同步阻塞IO,blocking queue的簡寫,也就是說多線程情況下只有一個線程操作內(nèi)核的queue,當(dāng)前線程操作完queue后,才能給下一個線程操作; 問題 在BIO下,一個連接就對應(yīng)一個線程,如果連接特別多的情況下,就會有特別多的線程,很費線程;在早期的時候,世界上的計算機

    2024年02月02日
    瀏覽(26)
  • C++ 簡單實現(xiàn)RPC網(wǎng)絡(luò)通訊

    C++ 簡單實現(xiàn)RPC網(wǎng)絡(luò)通訊

    ? ? ? ? RPC是遠(yuǎn)程調(diào)用系統(tǒng)簡稱,它允許程序調(diào)用運行在另一臺計算機上的過程,就像調(diào)用本地的過程一樣。RPC 實現(xiàn)了網(wǎng)絡(luò)編程的“過程調(diào)用”模型,讓程序員可以像調(diào)用本地函數(shù)一樣調(diào)用遠(yuǎn)程函數(shù)。最近在做的也是遠(yuǎn)程調(diào)用過程,所以通過重新梳理RPC來整理總結(jié)一下。 ?

    2023年04月08日
    瀏覽(30)
  • 網(wǎng)絡(luò)通訊錄服務(wù)器

    網(wǎng)絡(luò)通訊錄服務(wù)器

    簡易版本 服務(wù)端完整版本 客戶端完整版本 Protobuf還常?于通訊協(xié)議、服務(wù)端數(shù)據(jù)交換場景。那么在這個?例中,我們將實現(xiàn)?個?絡(luò)版本的 通訊錄,模擬實現(xiàn)客?端與服務(wù)端的交互,通過Protobuf來實現(xiàn)各端之間的協(xié)議序列化。 需求如下: 客?端可以選擇對通訊錄進?以下操

    2024年02月12日
    瀏覽(26)
  • http和https的區(qū)別?(網(wǎng)絡(luò)通訊)

    HTTP: ??????????????HTTP(超文本傳輸協(xié)議)和HTTPS(安全超文本傳輸協(xié)議)都是用于互聯(lián)網(wǎng)通信的協(xié)議,但HTTPS是一種更加安全的協(xié)議。 HTTPS: ???????????? HTTP是一種明文傳輸協(xié)議,信息傳輸?shù)倪^程中沒有加密,容易被黑客竊取信息。而HTTPS則在HTTP的基礎(chǔ)上增加

    2024年02月14日
    瀏覽(31)
  • 關(guān)于ROS的網(wǎng)絡(luò)通訊方式TCP/UDP

    關(guān)于ROS的網(wǎng)絡(luò)通訊方式TCP/UDP

    ROS 系列學(xué)習(xí)教程(總目錄) TCP/IP協(xié)議族為傳輸層指明了兩個協(xié)議:TCP和UDP,它們都是作為應(yīng)同程序和網(wǎng)絡(luò)操作的中介物。 TCP(Transmission Control Protocol)協(xié)議全稱是傳輸控制協(xié)議,是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC793定義。 TCP是面向連接的、

    2024年02月05日
    瀏覽(30)
  • 【網(wǎng)絡(luò)】UDP通訊(服務(wù)器/客戶端)

    【網(wǎng)絡(luò)】UDP通訊(服務(wù)器/客戶端)

    前言:UDP通訊實現(xiàn)比較簡單,單某些情況下也會使用,建議先看一下說明,然后運行代碼感受一下。 ????????傳輸層主要應(yīng)用的協(xié)議模型有兩種,一種是TCP協(xié)議,另外一種則是UDP協(xié)議。TCP協(xié)議在網(wǎng)絡(luò)通信中占主導(dǎo)地位,絕大多數(shù)的網(wǎng)絡(luò)通信借助TCP協(xié)議完成數(shù)據(jù)傳輸。但U

    2024年02月12日
    瀏覽(21)
  • 【Flink網(wǎng)絡(luò)通訊(一)】Flink RPC框架的整體設(shè)計

    【Flink網(wǎng)絡(luò)通訊(一)】Flink RPC框架的整體設(shè)計

    我們從整體的角度看一下Flink RPC通信框架的設(shè)計與實現(xiàn),了解其底層Akka通信框架的基礎(chǔ)概念及二者之間的關(guān)系。 ? Akka是使用Scala語言編寫的庫,用于在JVM上簡化編寫具有可容錯、高可伸縮性的Java或Scala的Actor模型。Akka基于Actor模型,提供了一個用于構(gòu)建可擴展、彈性、快速響

    2024年02月21日
    瀏覽(21)
  • 內(nèi)網(wǎng)安全——代理技術(shù)Socks5&網(wǎng)絡(luò)通訊&控制上線

    目錄 (一)前置知識 0x01 單機——防火墻之限制出入站 常見主機配置不出網(wǎng)的方式

    2023年04月23日
    瀏覽(30)
  • Java與Modbus-TCP/IP網(wǎng)絡(luò)通訊

    通過Java與Modbus-TCP/IP網(wǎng)絡(luò)通訊實現(xiàn)舉例5中的功能

    2024年02月10日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包