资源简介
是北京邮电大学,计算机网络课程设计的一个实验。可以参考。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#pragma comment(lib “Ws2_32.lib“)
#define DEF_DNS_ADDRESS “192.168.146.2“ //外部DNS服务器地址
#define LOCAL_ADDRESS “127.0.0.1“ //本地DNS服务器地址
#define DNS_PORT 53 //进行DNS服务的53端口
#define BUF_SIZE 512
#define LENGTH 65
#define AMOUNT 300
#define NOTFOUND -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;
//DNS域名解析表结构
typedef struct translate
{
string IP; //IP地址
string domain; //域名
} Translate;
//ID转换表结构
typedef struct IDChange
{
unsigned short oldID; //原有ID
BOOL done; //标记是否完成解析
SOCKADDR_IN client; //请求者套接字地址
} IDTransform;
Translate DNS_table[AMOUNT]; //DNS域名解析表
IDTransform IDTransTable[AMOUNT]; //ID转换表
int IDcount = 0; //转换表中的条目个数
char url[LENGTH]; //域名
SYSTEMTIME sys; //系统时间
int Day Hour Minute Second Milliseconds;//保存系统时间的变量
//函数:获取域名解析表
int GetTable(char *tablePath)
{
int i=0 j pos=0;
string table[AMOUNT];
ifstream infile(tablePath ios::in); //以读入方式打开文本文件
if(! infile) {
cerr << “Open“ << tablePath << “error!“ < exit(1);
}
//每次从文件中读入一行,直至读到文件结束符为止
while (getline(infile table[i]) && i < AMOUNT)
i++;
if (i == AMOUNT-1)
cout << “The DNS table memory is full. “ << endl;
for (j = 0; j < i-1; 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);
}
}
infile.close(); //关闭文件
cout << “Load records succeed. “ << endl;
return i-1; //返回域名解析表中条目个数
}
//函数:获取DNS请求中的域名
void GetUrl(char *recvbuf int recvnum)
{
char urlname[LENGTH];
int i = 0 j k = 0;
memset(url 0 LENGTH);
memcpy(urlname &(recvbuf[sizeof(DNSHDR)]) recvnum-16); //获取请求报文中的域名表示
int len = strlen(urlname);
//域名转换
while (i < len) {
if (urlname[i] > 0 && urlname[i] <= 63)
for (j = urlname[i] i++; j > 0; j-- i++ k++)
url[k] = urlname[i];
if (urlname[i] != 0) {
url[k] = ‘.‘;
k++;
}
}
url[k] = ‘\0‘;
}
//函数:判断是否在表中找到DNS请求中的域名,找到返回下标
int IsFind(char* url int num)
{
int find = NOTFOUND;
char* domain;
for (int i = 0; i < num; i++) {
domain = (char *)DNS_table[i].domain.c_str();
if (strcmp(domain url) == 0) { //找到
find = i;
break;
}
}
return find;
}
//函数:将请求ID转换为新的ID,并将信息写入ID转换表中
unsigned short RegisterNewID (unsigned short oID SOCKADDR_IN temp BOOL ifdone)
{
srand(time(NULL));
IDTransTable[IDcount].oldID = oID;
IDTransTable[IDcount].client = temp;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 12138 2010-07-23 15:20 zhongji.cpp
文件 5077 2010-07-12 00:57 zhongji.txt
- 上一篇:LUTmanager
- 下一篇:协同自适应巡航ISO
相关资源
- u=42331341031682387629和fm=26和gp=0.jpg
- u=40738214643431246218和fm=26和gp=0.jpg
- 子集和问题子集和问题的一个为〈S
- 扫雷源码 IDE=Eclipse
- 已知稀疏矩阵用三元组表示编写C=A*
- 51单片机+DS18B20+NRF24L01+LCD1602=无线温度
- webview支持type=\“file\“ 打开相机和相
- $$ {{\\ mathrm {D}} ^ 0} $$ D0,$$ {{\\ mathr
- 从晶格QCD得到的I = 3三点散射振幅
- 在= 13 MeV和= 81 MeV之间的过量能量下,
- 氘-质子弹性散射对质子动能= 882.2 M
- LPAR PowerVM组合方案=实用+高效
- 夸克顶部变味tqZ偶联和罕见的$$ \\ D
- Faddeev–Popov鬼对$$ \\ beta $$ lt;math
- 用ATT探测器在s = 8 TeV下pp碰撞中的弹性
-
me
tal-Phosphorus Bonding in Complexes W@Au1 - 关关采集器+和记书屋关关采集规则
- MV-S108695-00_88E6321_88E6320_Datasheet[=].pdf
- WR-720N -V4 OpenWrt Breed 编程器固件
- u=26870706021699431062fm=26gp=0.jpg
- 哈希函数 H(key) = key MOD 11 c程序,严
- 预处理共轭梯度法求线性方程组Ax=b的
- NAS-RIF算法
- CC2530+DHT11+HCSR04+蜂鸣器+串口显示=简单
- 3个绿色软件+高清摄像头=高拍仪
- 彩色图像处理RGB=YUV,直方图均衡,白
- 莫言变速齿轮DLL+EC+例程=完整源码
评论
共有 条评论