资源简介
计算机网络课程实验,C语言实现一个DNS中继服务器。
内含源代码、测试用例、详细实验文档
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#pragma comment(lib“ws2_32.lib“) //链接Ws2_32.lib库,不必在setting里设置
#define DEF_DNS_ADDRESS “202.38.64.56“ //外部DNS服务器地址
#define LOCAL_ADDRESS “114.214.193.126“ //本地DNS服务器地址
#define DNS_PORT 53 //进行DNS服务的53号端口
#define BUF_SIZE 512
#define LENGTH 65
#define AMOUNT 300
#define NOTFOUND -1
#define FOUND 1
//DNS报文首部
typedef struct DNSHeader
{
unsigned short ID;
unsigned short Flags;
unsigned short QuestNum;
unsigned short AnswerNum;
unsigned short AuthorNum;
unsigned short AdditionNum;
} DNSHDR *pDNSHDR;
typedef struct
{
char addr[16];
} ip_addr;
//DNS域名解析表结构
typedef struct translate
{
string IP; //IP地址
string domain; //域名
} Translate;
//ID转换表结构
typedef struct IDChange
{
unsigned short oldID; //原有ID
bool done; //标记是否完成解析
SOCKADDR_IN client; //请求者套接字地址
int joinTime; //加入转换表的时刻
char urlName[LENGTH]; //客户询问的url名字
int offset; //客户发送报文的字节数
} IDTransform;
Translate DNS_table[AMOUNT]; //DNS域名解析表
IDTransform IDTransTable[AMOUNT]; //ID转换表
int IDcount = 0; //转换表中的条目个数
char url[LENGTH]; //域名
char recvbuf_temp[BUF_SIZE]; //数据报内容(打印用)
char send_addr[LENGTH]rcv_addr[LENGTH]; //接收和发送数据包的地址(打印用)
unsigned short send_portrcv_port; //接收和发送数据包的端口(打印用)
SYSTEMTIME sys; //系统时间
int Day Hour Minute Second Milliseconds;//保存系统时间的变量
int Day1 Hour1 Minute1 Second1;//保存系统时间的变量
int Day2 Hour2 Minute2 Second2;//保存系统时间的变量
int Day3 Hour3 Minute3 Second3;//保存系统时间的变量
/*功能函数声明*/
//begin:------------------------------------------
int GetTable(char *tablePath); //函数1:获取域名解析表
void GetUrl(char *recvbufint recvnum); //函数2: 获取DNS请求中的域名
int IsFind(char *urlint num); //函数3:判断是否在表中找到DNS请求中的域名,找到返回下标
//函数4:将请求ID转换为新的ID,并将信息写入ID转换表中
unsigned short RegisterNewID(unsigned short oID SOCKADDR_IN temp bool ifdone);
void DisplayInfo(unsigned short newID int find); //函数5:打印 时间 newID 功能 域名 IP
//end-----------------------------------------------------
//函数1:获取域名解析表
int GetTable(char *tablePath)
{
int i=0jpos=0;
string table[AMOUNT];
ifstream infile(tablePathios::in);
if(!infile)
{
cerr << “Open “ << tablePath << “ error!“ < exit(1);
}
while(getline(infiletable[i])&&i i++;
if(i==AMOUNT-1)
cout<<“The DNS table memory is full.“<
for(j=0;j {
pos=table[j].find(‘ ‘);
if(pos>table[j].size())
cout << “The record is not in a correct format. “ << endl;
else
{
DNS_table[j].IP = table[j].substr(0 pos);
DNS_table[j].domain = table[j].substr(pos+1);
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5061 2018-10-11 10:44 example.txt
文件 446529 2019-05-07 23:52 report.pdf
文件 22536 2018-12-31 13:14 DNSrelay.cpp
----------- --------- ---------- ----- ----
474126 3
- 上一篇:C语言实现电梯控制
- 下一篇:MSDN 和VC6.0完全版
相关资源
- 西北大学2015年计算机网络复试真题回
- 数据结构课程实验C++实现的银行系统
- 计算机网络课设-邮件客户端实现(含
- C语言实现TCP/IP协议通信和UDP协议通信
- 计算机网络课程设计之Ping程序含C++原
- 计算机网络实验设计---基于TCP的网络
- 计算机网络课设代码+报告
- 使用ARP协议获取局域网内部活动主机
- 计算机网络课程实验:FTP协议的实现
- 计算机网络课程设计 IP数据报的捕获
- 发送ARP请求
- 计算机网络实验-----基于TCP的网络聊天
- 计算机网络课程设计农大socket实现F
- 编译原理课程实验报告词法分析器及
- C++实现简单聊天应用
- VS2017实现Tcp socket多线程通信C++
- 计算机网络课程设计,实现简单的聊
- 基于MFC编写的FTP客户端(使用VS)
- 基于GBN的可靠数据传输
- 计算机端口扫描器计算机网络课程设
- 用C语言实现Socket模拟TCP协议
- 用C++/MFC实现P2P和群聊功能的聊天小软
- 计算机网络原理知识点总结
- VS2017实现Tcp socket通信C++
- 计算机网络编程vc++学生管理系统
- 计算机网络课设之解析ARP数据包
- 计算机网络作业-winsock写的ping实现
- 路由器分组转发算法_计算机通信课程
- 计算机网络滑动窗口实验
- C语言实现简单的web服务器
评论
共有 条评论