⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipexport.c

📁 Linux 上的socket嗅探器
💻 C
📖 第 1 页 / 共 3 页
字号:
                break;
            default:
                sprintf(itemsg,"Type= %d",icmphdr.type);
            };

            subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
            SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+0,1));

            // code
            switch(icmphdr.type)
            {
            case 3:
                {
                    switch(icmphdr.code)
                    {
                    case 0 : // net unreachable;
                        sprintf(itemsg,"Code= %d (net unreachable)",icmphdr.code);
                        break;
                    case 1 : // host unreachable;
                        sprintf(itemsg,"Code= %d (host unreachable)",icmphdr.code);
                        break;

                    case 2 : // protocol unreachable;
                        sprintf(itemsg,"Code= %d (protocol unreachable)",icmphdr.code);
                        break;
                    case 3 : // port unreachable;
                        sprintf(itemsg,"Code= %d (port unreachable)",icmphdr.code);
                        break;
                    case 4 : // fragmentation needed and DF set;
                        sprintf(itemsg,"Code= %d (fragmentation needed and DF set)",icmphdr.code);
                        break;
                    case 5 : // source route failed.
                        sprintf(itemsg,"Code= %d (source route failed)",icmphdr.code);
                        break;
                    default:
                        sprintf(itemsg,"Code= %d ",icmphdr.code);
                    };
                }break;
            case 11:
                {
                    switch(icmphdr.code)
                    {
                    case 0 : // time to live exceeded in transit;
                        sprintf(itemsg,"Code= %d (time to live exceeded in transit)",icmphdr.code);
                        break;
                    case 1 : // fragment reassembly time exceeded;
                        sprintf(itemsg,"Code= %d (fragment reassembly time exceeded)",icmphdr.code);
                        break;
                    default:
                        sprintf(itemsg,"Code= %d ",icmphdr.code);
                    };
                }break;

            case 12:
                {
                    switch(icmphdr.code)
                    {
                    case 0 : // time to live exceeded in transit;
                        sprintf(itemsg,"Code= %d (pointer indicates the error)",icmphdr.code);
                        break;
                    default:
                        sprintf(itemsg,"Code= %d ",icmphdr.code);
                    };
                }break;
            case 5:
                {
                    switch(icmphdr.code)
                    {
                    case 0 : // Redirect datagrams for the Network;
                        sprintf(itemsg,"Code= %d (Redirect datagrams for the Network)",icmphdr.code);
                        break;
                    case 1 : // Redirect datagrams for the Host;
                        sprintf(itemsg,"Code= %d (Redirect datagrams for the Host)",icmphdr.code);
                        break;
                    case 2 : // Redirect datagrams for the Type of Service and Network;
                        sprintf(itemsg,"Code= %d (Redirect datagrams for the Type of Service and Network)",icmphdr.code);
                        break;
                    case 3 : // Redirect datagrams for the Type of Service and Host;
                        sprintf(itemsg,"Code= %d (Redirect datagrams for the Type of Service and Host)",icmphdr.code);
                        break;
                    default:
                        sprintf(itemsg,"Code= %d ",icmphdr.code);
                    };
                }break;
            default:
                sprintf(itemsg,"Code= %d ",icmphdr.code);
            };
            subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
            SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+1,1));

            // check sum
            sprintf(itemsg,"Checksum= %d",icmphdr.checksum);
            subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
            SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+2,2));
        }// ICMP head

        /* -------------------- ICMP data ------------------------ */
        if(buflen-4>0)
        {
            sprintf(itemsg,"Data");

            subitem=AcheTreeInsertItem(rootitem,itemsg,-1);
            SetAcheTreeData(subitem,ACHETREE_ITEMDATA(curpos+4,buflen-4));

            switch(icmphdr.type)
            {
            case 0:  // Echo Reply
            case 8:  // Echo

            case 15:  // Information Request
            case 16:  // Information Reply
                {
                    sprintf(itemsg,"Identifier= %d",icmphdr.echo.id);
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+4,2));

                    sprintf(itemsg,"Sequence Number= %d",icmphdr.echo.sequence);
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+6,2));

                    if(icmphdr.type==0||icmphdr.type==8)
                    {
                        if(buflen-8>0)
                        {
                            sprintf(itemsg,"Internet Header + 64 bits of Original Data Datagram");
                            subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                            SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+8,buflen-8));
                        }
                    }
                }break;
            case 3:  // Destination Unreachable
                {
                    sprintf(itemsg,"unused");
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+4,2));

                    sprintf(itemsg,"MTU");
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+6,2));

                    if(buflen-8>0)

                    {
                        sprintf(itemsg,"Internet Header + 64 bits of Original Data Datagram");
                        subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                        SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+8,buflen-8));
                    }
                }break;
            case 4:  // Source Quench
            case 11:  // Time Exceeded
                {
                    sprintf(itemsg,"unused");
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+4,4));

                    if(buflen-8>0)
                    {
                        sprintf(itemsg,"Internet Header + 64 bits of Original Data Datagram");
                        subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                        SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+8,buflen-8));
                    }
                }break;
            case 5:  // Redirect
                {
                    sprintf(itemsg,"Gateway= %d",icmphdr.gateway);
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+4,4));

                    if(buflen-8>0)
                    {
                        sprintf(itemsg,"Internet Header + 64 bits of Original Data Datagram");
                        subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);

                        SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+8,buflen-8));
                    }
                }break;
            case 12:  // Parameter Problem
                {
                    sprintf(itemsg,"Pointer= %d",icmphdr.pointer);
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+4,1));

                    sprintf(itemsg,"unused");
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+5,3));

                    if(buflen-8>0)
                    {
                        sprintf(itemsg,"Internet Header + 64 bits of Original Data Datagram");
                        subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                        SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+8,buflen-8));
                    }
                }break;
            case 13:  // Timestamp
            case 14:  // Timestamp Reply
                {
                    sprintf(itemsg,"Identifier= %d",icmphdr.echo.id);
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+4,2));

                    sprintf(itemsg,"Sequence Number= %d",icmphdr.echo.sequence);
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+6,2));

                    sprintf(itemsg,"Originate Timestamp= %d",icmphdr.OTm_stamp);
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+8,4));

                    sprintf(itemsg,"Receive Timestamp= %d",icmphdr.RTm_stamp);
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+12,4));

                    sprintf(itemsg,"Transmit Timestamp= %d",icmphdr.TTm_stamp);
                    subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
                    SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+16,4));

                }break;
            default:
                {
                };
            };
        }// ICMP data

    }// ICMP
    /* -------------------- end of export ------------------------ */
}

void ExportTree_ETH_IP_IGMP(
        ACHETREE *lptree,
        unsigned short curpos,
        unsigned char *lpbuf, unsigned short buflen)    // 2, internet group management protocol
{

    char itemsg[256];
    ACHETREE *subitem, *rootitem;
    IGMPHDR igmphdr;

    BufGetIGMPhdr(&igmphdr,lpbuf);
    /* -------------------- IGMP header ------------------------ */

    sprintf(itemsg,"IGMP [length= %d]",buflen);
    rootitem = AcheTreeInsertItem(lptree,itemsg,-1);
    SetAcheTreeData(rootitem,ACHETREE_ITEMDATA(curpos,buflen));

    // check sum
    sprintf(itemsg,"Version= %d",igmphdr.version);
    subitem=AcheTreeInsertItem(rootitem,itemsg,-1);
    SetAcheTreeData(subitem,ACHETREE_ITEMDATA(curpos,1));

    // type
    switch(igmphdr.type)
    {
    case 1:  // Echo Reply
        sprintf(itemsg,"Type= %d (Host Membership Query)",igmphdr.type);
        break;
    case 2:  // Destination Unreachable
        sprintf(itemsg,"Type= %d (Host Membership Report)",igmphdr.type);
        break;
    default:
        sprintf(itemsg,"Type= %d",igmphdr.type);
    };

    subitem=AcheTreeInsertItem(rootitem,itemsg,-1);
    SetAcheTreeData(subitem,ACHETREE_ITEMDATA(curpos,1));

    // Unused
    sprintf(itemsg,"Unused= %d",igmphdr.unused);
    subitem=AcheTreeInsertItem(rootitem,itemsg,-1);
    SetAcheTreeData(subitem,ACHETREE_ITEMDATA(curpos+1,1));
    // Checksum
    sprintf(itemsg,"Checksum= %d",igmphdr.checksum);
    subitem=AcheTreeInsertItem(rootitem,itemsg,-1);
    SetAcheTreeData(subitem,ACHETREE_ITEMDATA(curpos+2,2));
    // Group Address
    sprintf(itemsg,"Group Address= %u (%d.%d.%d.%d)",
        igmphdr.checksum,
        (igmphdr.checksum>>24)&0xFF,
        (igmphdr.checksum>>16)&0xFF,
        (igmphdr.checksum>>8)&0xFF,
        (igmphdr.checksum)&0xFF
        );
    subitem=AcheTreeInsertItem(rootitem,itemsg,-1);
    SetAcheTreeData(subitem,ACHETREE_ITEMDATA(curpos+4,4));

    /* -------------------- end of export ------------------------ */
}

void ExportTree_ETH_IP_GGP(
        ACHETREE *lptree,
        unsigned short curpos,
        unsigned char *lpbuf, unsigned short buflen)    // 3, gateway^2 (deprecated)
{
}


void ExportTree_ETH_IP_IPIP(
        ACHETREE *lptree,
        unsigned short curpos,
        unsigned char *lpbuf, unsigned short buflen)   /* 4, IPIP tunnels (older KA9Q tunnels use 94).  */
{

}

void ExportTree_ETH_IP_TCP(
        ACHETREE *lptree,
        unsigned short curpos,
        unsigned char *lpbuf, unsigned short buflen)    // 6, tcp
{
    char itemsg[256];
    ACHETREE *subsubitem, *subitem, *rootitem;
    TCPHDR tcphdr;
    int freei;

    BufGetTCPhdr(&tcphdr,lpbuf);
    /* -------------------- TCP  ------------------------ */

    sprintf(itemsg,"TCP [length= %d]",buflen);
    rootitem = AcheTreeInsertItem(lptree,itemsg,-1);
    SetAcheTreeData(rootitem,ACHETREE_ITEMDATA(curpos,buflen));
    {
        /* -------------------- UDP header ------------------------ */
        sprintf(itemsg,"Head [length= %d]",20);
        subitem=AcheTreeInsertItem(rootitem,itemsg,-1);
        SetAcheTreeData(subitem,ACHETREE_ITEMDATA(curpos,20));
        {
            /* Source port            */
            sprintf(itemsg,"Source port= %d",tcphdr.sport);
            for(freei=0;freei<MAX_POPULERPORT;freei++)
            {
               if(populer_port[freei].type==tcphdr.sport)
               { 
                  sprintf(itemsg,"Source port= %d [%s]",tcphdr.sport,populer_port[freei].info);
                  break;
               }
            }
            subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
            SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos,2));

            /* Destination port       */
            sprintf(itemsg,"Destination port= %d",tcphdr.dport);
            for(freei=0;freei<MAX_POPULERPORT;freei++)
            {
               if(populer_port[freei].type==tcphdr.dport)
               {
                  sprintf(itemsg,"Destination port= %d [%s]",tcphdr.dport,populer_port[freei].info);
                  break;
               }
            }
            subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
            SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+2,2));

            /* Sequence number        */
            sprintf(itemsg,"Sequence number= %u",tcphdr.seq);

            subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);

            SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+4,4));

            /* Acknowledgement number */
            sprintf(itemsg,"Acknowledgement number= %u",tcphdr.ack);
            subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
            SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+8,4));

            /* Data offset + reserved */
            sprintf(itemsg,"Data offset+reserved+flag");
            subsubitem=AcheTreeInsertItem(subitem,itemsg,-1);
            SetAcheTreeData(subsubitem,ACHETREE_ITEMDATA(curpos+12,2));
            {
                ACHETREE *tmpitem;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -