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

📄 webpage.c

📁 本软件是TI公司免费提供的网络开发包 现在好象很难找到,有黑心的公司把它改一改,就卖价5000元,对网络开发和网络驱动开发有参考价值
💻 C
📖 第 1 页 / 共 2 页
字号:
        goto FATAL;
    }

    // Allocate space for the CGI post data
    postdata = (char *)mmBulkAlloc(ContentLength+1);
    if( !postdata )
        goto FATAL;

    // Read in the post data from the socket
    bytes = recv(htmlSock, postdata, ContentLength, MSG_WAITALL);
    if( bytes < 1 )
        goto FATAL;

    // Setup to parse the post data
    parseIndex = 0;
    postdata[ContentLength] = '\0';

    // Read until we've read the item "ip"
    do {
        name  = cgiParseVars( postdata, &parseIndex );
        value = cgiParseVars( postdata, &parseIndex );
    } while( strcmp("ip", name ) && parseIndex != -1 );

CHECKARGS:
    // Now check the value of "ip"
    if (strcmp("ipinfo", value) == 0)
        CreateIPUse(htmlSock);
    else if (strcmp("sockets", value) == 0)
        CreatehtmlSockets(htmlSock);
    else if (strcmp("route", value) == 0)
        CreateRoute(htmlSock);
    else
        http405(htmlSock);

FATAL:
    // Free the data we've allocated
    if( postdata )
        mmBulkFree(postdata);

    // We always leave the socket open
    return( 1 );
}


void CreateIPUse(SOCKET htmlSock)
{
    IPN     myIP;
    IPN     yourIP;
    char    pszmyIP[32];
    char    pszyourIP[32];
    struct  sockaddr_in Info;
    int     InfoLength;
    char    tmpBuf[128];
    HOSTENT *dnsInfo;
    char    htmlbuf[MAX_RESPONSE_SIZE];
    int     rc;

    InfoLength = sizeof(Info);
    getsockname( htmlSock, &Info, &InfoLength );
    myIP = Info.sin_addr.s_addr;
    NtIPN2Str( myIP, pszmyIP );

    InfoLength = sizeof(Info);
    getpeername( htmlSock, &Info, &InfoLength );
    yourIP = Info.sin_addr.s_addr;
    NtIPN2Str( yourIP, pszyourIP );

    httpSendStatusLine(htmlSock, HTTP_OK, CONTENT_TYPE_HTML);
    // CRLF before entity
    html( CRLF );

    html(pstr_HTML_START);
    html(pstr_TI_START);
    html("<h1>IP Address Information</h1>\r\n");
    html(pstr_DIVIDER);

    html(pstr_TABLE_START);

    html(pstr_ROW_START);
    sprintf(htmlbuf,"<td>HTTP Server IP Address</td><td>%s</td>", pszmyIP);
    html(htmlbuf);
    html(pstr_ROW_END);

    html(pstr_ROW_START);
    html("<td>HTTP Server Hostname</td>");
    rc = DNSGetHostByAddr( myIP, tmpBuf, sizeof(tmpBuf) );
    if( rc )
        sprintf(htmlbuf, "<td>%s</td>", DNSErrorStr(rc) );
    else
    {
        dnsInfo = (HOSTENT*) tmpBuf;
        sprintf(htmlbuf, "<td>%s</td>", dnsInfo->h_name);
    }
    html(htmlbuf);
    html(pstr_ROW_END);

    html(pstr_ROW_START);
    sprintf(htmlbuf, "<td>Your IP Address</td><td>%s</td>", pszyourIP);
    html(htmlbuf);
    html(pstr_ROW_END);

    html(pstr_ROW_START);
    html("<td>Your Hostname</td>");
    rc = DNSGetHostByAddr( yourIP, tmpBuf, sizeof(tmpBuf) );
    if( rc )
        sprintf(htmlbuf, "<td>%s</td>", DNSErrorStr(rc) );
    else
    {
        dnsInfo = (HOSTENT*) tmpBuf;
        sprintf(htmlbuf, "<td>%s</td>", dnsInfo->h_name);
    }
    html(htmlbuf);
    html(pstr_ROW_END);

    html(pstr_TABLE_END);
    html(pstr_DIVIDER);
    html(pstr_LINK_MAIN);
    html(pstr_TI_END);
    html(pstr_HTML_END);
}

static void DumphtmlSockets( SOCKET htmlSock, uint htmlSockProt );

void CreatehtmlSockets(SOCKET htmlSock)
{
    httpSendStatusLine(htmlSock, HTTP_OK, CONTENT_TYPE_HTML);
    // CRLF before entity
    html( CRLF );

    html(pstr_HTML_START);
    html(pstr_TI_START);
    html("<h1>TCP/IP Socket State Information</h1>\r\n");

    html(pstr_DIVIDER);
    html("<h2>TCP Sockets</h2>\r\n");
    DumphtmlSockets( htmlSock, SOCKPROT_TCP );

    html(pstr_DIVIDER);
    html("<h2>UDP Sockets</h2>\r\n");
    DumphtmlSockets( htmlSock, SOCKPROT_UDP );

    html(pstr_DIVIDER);
    html(pstr_LINK_MAIN);
    html(pstr_TI_END);
    html(pstr_HTML_END);
}

static const char *States[] = { "CLOSED","LISTEN","SYNSENT","SYNRCVD",
                          "ESTABLISHED","CLOSEWAIT","FINWAIT1","CLOSING",
                          "LASTACK","FINWAIT2","TIMEWAIT" };

static void DumphtmlSockets( SOCKET htmlSock, uint htmlSockProt )
{
    UINT8   *pBuf;
    int     Entries,i;
    SOCKPCB *ppcb;
    char    str[32];
    char    htmlbuf[MAX_RESPONSE_SIZE];


    pBuf = mmBulkAlloc(2048);
    if( !pBuf )
        return;

    // Use llEnter / llExit since we're calling into the stack
    llEnter();
    Entries = SockGetPcb( htmlSockProt, 2048, pBuf );
    llExit();

    html(pstr_TABLE_START);

    html(pstr_ROW_START);
    html("<td>Local IP</td><td>LPort</td>");
    html("<td>Foreign IP</td><td>FPort</td>\r\n");
    if( htmlSockProt == SOCKPROT_TCP )
        html("<td>State</td>\r\n");
    html(pstr_ROW_END);

    for(i=0; i<Entries; i++)
    {
        ppcb = (SOCKPCB *)(pBuf+(i*sizeof(SOCKPCB)));

        html(pstr_ROW_START);
        NtIPN2Str( ppcb->IPAddrLocal, str );
        sprintf(htmlbuf, "<td>%-15s</td><td>%-5u</td>", str, htons(ppcb->PortLocal) );
        html(htmlbuf);
        NtIPN2Str( ppcb->IPAddrForeign, str );
        sprintf(htmlbuf, "<td>%-15s</td><td>%-5u</td>\r\n", str, htons(ppcb->PortForeign) );
        html(htmlbuf);
        if( htmlSockProt == SOCKPROT_TCP )
        {
            sprintf(htmlbuf,"<td>%s</td>\r\n",States[ppcb->State]);
            html(htmlbuf);
        }
        html(pstr_ROW_END);
    }

    html(pstr_TABLE_END);

    mmBulkFree( pBuf );
}

void CreateRoute(SOCKET htmlSock)
{
    HANDLE  hRt,hIF,hLLI;
    uint    wFlags,IFType,IFIdx;
    UINT32  IPAddr,IPMask;
    char    str[32];
    UINT8   MacAddr[6];
    char    htmlbuf[MAX_RESPONSE_SIZE];

    httpSendStatusLine(htmlSock, HTTP_OK, CONTENT_TYPE_HTML);
    // CRLF before entity
    html( CRLF );

    html(pstr_HTML_START);
    html(pstr_TI_START);
    html("<h1>TCP/IP Current Route Table</h1>\r\n");
    html(pstr_DIVIDER);

    // Start walking the tree
    llEnter();
    hRt = RtWalkBegin();
    llExit();

    html(pstr_TABLE_START);

    html(pstr_ROW_START);
    html("<td>Address</td><td>Subnet Mask</td>");
    html("<td>Flags</td><td>Gateway</td>\r\n");
    html(pstr_ROW_END);

    // While there are routes, print the route information
    while( hRt )
    {
        html(pstr_ROW_START);

        // Get the IP addess and IP mask and flags of the route
        llEnter();
        IPAddr = RtGetIPAddr( hRt );
        IPMask = RtGetIPMask( hRt );
        wFlags = RtGetFlags( hRt );
        hIF    = RtGetIF( hRt );
        if( hIF )
        {
            IFType = IFGetType(hIF);
            IFIdx  = IFGetIndex(hIF);
        }
        else
            IFType = IFIdx = 0;
        llExit();

        // Print address and mask
        NtIPN2Str( IPAddr, str );
        sprintf(htmlbuf, "<td>%-15s</td>", str );
        html(htmlbuf);
        NtIPN2Str( IPMask, str );
        sprintf(htmlbuf, "<td>%-15s</td>", str );
        html(htmlbuf);

        // Decode flags
        if( wFlags & FLG_RTE_UP )
            strcpy(str,"U");
        else
            strcpy(str," ");
        if( wFlags & FLG_RTE_GATEWAY )
            strcat(str,"G");
        else
            strcat(str," ");
        if( wFlags & FLG_RTE_HOST )
            strcat(str,"H");
        else
            strcat(str," ");
        if( wFlags & FLG_RTE_STATIC )
            strcat(str,"S");
        else
            strcat(str," ");
        if( wFlags & FLG_RTE_CLONING )
            strcat(str,"C");
        else
            strcat(str," ");
        if( wFlags & FLG_RTE_IFLOCAL )
            strcat(str,"L");
        else
            strcat(str," ");

        sprintf(htmlbuf, "<td>%s</td>", str );
        html(htmlbuf);

        // If the route is a gateway, print the gateway IP address as well
        if( wFlags & FLG_RTE_GATEWAY )
        {
            llEnter();
            IPAddr = RtGetGateIP( hRt );
            llExit();
            NtIPN2Str( IPAddr, str );
            sprintf(htmlbuf, "<td>%-15s</td>", str );
            html(htmlbuf);
        }
        // Else if non-local host route on Ethernet, print ARP entry
        else if( IFType == HTYPE_ETH &&
                 (wFlags&FLG_RTE_HOST) && !(wFlags&FLG_RTE_IFLOCAL) )
        {
            // The stack has a MAC address if it has an LLI (link-layer info)
            // object, and LLIGetMacAddr returns 1.
            llEnter();
            if( !(hLLI = RtGetLLI( hRt )) || !LLIGetMacAddr( hLLI, MacAddr, 6 ) )
                llExit();
            else
            {
                llExit();
                sprintf( htmlbuf,"<td>%02X:%02X:%02X:%02X:%02X:%02X</td>",
                           MacAddr[0], MacAddr[1], MacAddr[2],
                           MacAddr[3], MacAddr[4], MacAddr[5] );
                html(htmlbuf);
            }
        }
        // Else just print out the interface
        else if( IFIdx )
        {
            if( wFlags & FLG_RTE_IFLOCAL )
            {
                sprintf( htmlbuf,"<td>local (if-%d)</td>", IFIdx );
                html(htmlbuf);
            }
            else
            {
                sprintf( htmlbuf,"<td>if-%d</td>", IFIdx );
                html(htmlbuf);
            }
        }

        html(pstr_ROW_END);

        llEnter();
        hRt = RtWalkNext( hRt );
        llExit();
    }
    llEnter();
    RtWalkEnd( 0 );
    llExit();

    html(pstr_TABLE_END);
    html(pstr_DIVIDER);
    html(pstr_LINK_MAIN);
    html(pstr_TI_END);
    html(pstr_HTML_END);
}

⌨️ 快捷键说明

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