• 大小: 6.13MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-02
  • 语言: 其他
  • 标签: 北邮  BUPT  

资源简介

BUPT,计算机学院大二下年课程设计,DNS中继服务器的设计与实现,里面整合了完整的源代码、实验报告等,供参考。

资源截图

代码片段和文件信息

#include “head.h“

/* Set expire time of the specified record */
void Set_ID_Expire(ID_Trans_Unit* record int ttl)
{
    record->expire_time = time(NULL) + ttl;   /* expire_time = time now + time to live */
}

/* Check whether the record is expired */
int Check_ID_Expired(ID_Trans_Unit* record)
{
return record->expire_time > 0 && time(NULL) > record->expire_time;
}

/* Register new ID into ID_Trans_Table */
unsigned short Register_New_ID(unsigned short ID SOCKADDR_IN temp BOOL if_done)
{
    int i = 0;
    for (i = 0; i != MAX_ID_TRANS_TABLE_SIZE; ++i)
    {
        /* Find out overdue record or a record which was analysed completely */
        if (Check_ID_Expired(&ID_Trans_Table[i]) == 1 || ID_Trans_Table[i].done == TRUE)
        {
            ID_Trans_Table[i].old_ID = ID;     /* Set ID */
            ID_Trans_Table[i].client = temp;   /* socket_addr */
            ID_Trans_Table[i].done = if_done;  /* Mark whether analysis completed */
            Set_ID_Expire(&ID_Trans_Table[i] ID_EXPIRE_TIME);
            ID_Count++;
            if (debug_level)
{
printf(“New ID : %d registered successfully\n“ i + 1);
printf(“#ID Count : %d\n“ ID_Count);
}
            break;
        }
    }
    if (i == MAX_ID_TRANS_TABLE_SIZE) /* Register failed */
        return 0;
    return (unsigned short)i + 1; /* Return new ID */
}

/* Convert buf content to url and save into dest */
void Convert_to_Url (char* buf char* dest)
{
    int i = 0 j = 0 k = 0 len = strlen(buf);
    while (i < len)
    {
        if (buf[i] > 0 && buf[i] <= 63) /* Count */
        {
            for (j = buf[i] i++; j > 0; j-- i++ k++) /* Copy the url */
                dest[k] = buf[i];
        }
        if (buf[i] != 0) /* If this is not the end put a dot into dest */
        {
            dest[k] = ‘.‘;
            k++;
        }
    }
    dest[k] = ‘\0‘; /* Set the end */
}

/* Output the whole packet */
void Output_Packet(char *bufint length)
{
unsigned char unit;
    printf(“Packet length = %d\n“ length);
printf(“Details of the package:\n“);
for(int i = 0; i < length; i++)
{
unit =(unsigned char)buf[i];
printf(“%02x “ unit);
}
printf(“\n“);
}

/* Receive packet from exterior */
void Receive_from_Extern()
{
char buf[MAX_BUF_SIZE] url[65];
memset(buf 0 MAX_BUF_SIZE);
    int length = -1;
    length = recvfrom(extern_sock buf sizeof(buf) 0 (struct sockaddr*)&external &length_client); /* Receive DNS packet from exterior */
    if (length > -1)
    {
if (debug_level)
{
printf(“\n\n---- Recv : Extern [IP:%s]----\n“ inet_ntoa(external.sin_addr));

/* Output time now */
time_t t = time(NULL);
char temp[64];
strftime(temp sizeof(temp) “%Y/%m/%d %X %A“ localtime(&t));
printf(“%s\n“ temp);

if (debug_level == 2)
Output_Packet(buf length);
}

/* Get ID index */
        unsigned short *pID = (unsigned short *)ma

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-06-15 23:28  1814陈斌-1815李奕阳-1816罗阳\
     目录           0  2019-06-15 23:28  1814陈斌-1815李奕阳-1816罗阳\可执行文件\
     文件      193536  2019-06-09 00:00  1814陈斌-1815李奕阳-1816罗阳\可执行文件\dnsrelay.exe
     文件          80  2019-06-05 23:05  1814陈斌-1815李奕阳-1816罗阳\可执行文件\dnsrelay.txt
     目录           0  2019-06-15 23:28  1814陈斌-1815李奕阳-1816罗阳\源代码文件\
     文件          80  2019-06-05 23:05  1814陈斌-1815李奕阳-1816罗阳\源代码文件\dnsrelay.txt
     文件        3726  2019-06-09 00:01  1814陈斌-1815李奕阳-1816罗阳\源代码文件\head.h
     文件       14165  2019-06-09 00:01  1814陈斌-1815李奕阳-1816罗阳\源代码文件\main.cpp
     目录           0  2019-06-15 23:28  1814陈斌-1815李奕阳-1816罗阳\设计报告\
     文件     4799488  2019-06-09 00:11  1814陈斌-1815李奕阳-1816罗阳\设计报告\1814陈斌-1815李奕阳-1816罗阳.doc
     文件     2131851  2019-06-09 00:11  1814陈斌-1815李奕阳-1816罗阳\设计报告\1814陈斌-1815李奕阳-1816罗阳.pdf

评论

共有 条评论