Opengl实验报告及源代码实验六 颜色与光照

Opengl实验报告及源代码实验六  颜色与光照
Opengl实验报告及源代码实验六  颜色与光照

南昌大学实验报告

学生姓名:学号:专业班级:

实验类型:□验证□综合□设计□创新实验日期:2018.11 实验成绩:

一、实验名称

实验六颜色与光照

二、实验内容

1.指定几何模型的绘制颜色,使用平滑着色模式用多种不同的颜色绘制多边形;

2.通过定义光源、材质和光照模型属性渲染物体的光照效果;

3.创建一个3D虚拟场景,利用定向光、点光源和聚光灯等不同光源实现3D场景的光

照效果。

三、实验目的

1.了解RGBA颜色的实现原理,掌握利用Flat和Smooth着色模式来绘制不同颜色的物

体的方法;

2.掌握OpenGL光照模型,理解光源、材质和光照模型如何综合影响物体的光照效果。

3.掌握定向光、点光源和聚光灯的不同属性及三种光源光照效果的计算方法。

四、实验步骤

1.建立立方体几何模型。定义立方体顶点的位置坐标和纹理坐标,设置不同立方体在

世界坐标系中的位置:

// Set up vertex data (and buffer(s)) and attribute pointers

GLfloat vertices[] = {

// Positions // Normals // Texture Coords

-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f,

0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f,

0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f,

0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f,

-0.5f, 0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f,

-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f,

-0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,

0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f,

0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,

0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,

-0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, -0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f,

-0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, -0.5f, 0.5f, -0.5f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, -0.5f, -0.5f, -0.5f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, -0.5f, -0.5f, 0.5f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -0.5f, 0.5f, 0.5f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f,

0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,

0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f,

0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,

0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,

0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f,

0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f,

-0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f,

0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 1.0f, 1.0f,

0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f,

0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f,

-0.5f, -0.5f, 0.5f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, -0.5f, -0.5f, -0.5f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f,

-0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,

0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f,

0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,

0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f,

-0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, -0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f };

// Positions all containers

glm::vec3 cubePositions[] = {

glm::vec3(0.0f, 0.0f, 0.0f),

glm::vec3(2.0f, 5.0f, -15.0f),

glm::vec3(-1.5f, -2.2f, -2.5f),

glm::vec3(-3.8f, -2.0f, -12.3f),

glm::vec3(2.4f, -0.4f, -3.5f),

glm::vec3(-1.7f, 3.0f, -7.5f),

glm::vec3(1.3f, -2.0f, -2.5f),

glm::vec3(1.5f, 2.0f, -2.5f),

glm::vec3(1.5f, 0.2f, -1.5f),

glm::vec3(-1.3f, 1.0f, -1.5f)

};

2.加载立方体模型的顶点数据。建立VAO、VBO 对象变量,编写顶点数据加载函数,

组织并加装几何模型的数据:

GLuint VBO, containerVAO;

glGenVertexArrays(1, &containerVAO);

glGenBuffers(1, &VBO);

glBindBuffer(GL_ARRAY_BUFFER, VBO);

glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

glBindVertexArray(containerVAO);

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)0);

glEnableVertexAttribArray(0);

glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));

glEnableVertexAttribArray(1);

glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(6 * sizeof(GLfloat)));

glEnableVertexAttribArray(2);

glBindVertexArray(0);

3.设置灯光的VAO,并绑定VBO:

GLuint lightVAO;

glGenVertexArrays(1, &lightVAO);

glBindVertexArray(lightVAO);

glBindBuffer(GL_ARRAY_BUFFER, VBO);

// Set the vertex attributes (only position data for the lamp))

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)0);

glEnableVertexAttribArray(0);

glBindVertexArray(0);

4.创建纹理,加载图片,设置纹理单元:

GLuint diffuseMap, specularMap, emissionMap;

glGenTextures(1, &diffuseMap);

glGenTextures(1, &specularMap);

glGenTextures(1, &emissionMap);

int width, height;

unsigned char* image;

// Diffuse map

image = SOIL_load_image("wall.jpg", &width, &height, 0, SOIL_LOAD_RGB);

glBindTexture(GL_TEXTURE_2D, diffuseMap);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

glGenerateMipmap(GL_TEXTURE_2D);

SOIL_free_image_data(image);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_NEAREST);

// Specular map

image = SOIL_load_image("test_rect.png", &width, &height, 0, SOIL_LOAD_RGB);

glBindTexture(GL_TEXTURE_2D, specularMap);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

glGenerateMipmap(GL_TEXTURE_2D);

SOIL_free_image_data(image);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_NEAREST);

glBindTexture(GL_TEXTURE_2D, 0);

// Set texture units

https://www.360docs.net/doc/da454076.html,e();

glUniform1i(glGetUniformLocation(lightingShader.Program, "material.diffuse"), 0);

glUniform1i(glGetUniformLocation(lightingShader.Program, "material.specular"), 1);

5.编写灯光的顶点着色器和片段着色器:

#version 330 core

layout (location = 0) in vec3 position;

layout (location = 1) in vec3 normal;

layout (location = 2) in vec2 texCoords;

out vec3 Normal;

out vec3 FragPos;

out vec2 TexCoords;

uniform mat4 model;

uniform mat4 view;

uniform mat4 projection;

void main()

{

gl_Position = projection * view * model * vec4(position, 1.0f);

FragPos = vec3(model * vec4(position, 1.0f));

Normal = mat3(transpose(inverse(model))) * normal;

TexCoords = texCoords;

}

#version 330 core

struct Material {

sampler2D diffuse;

sampler2D specular;

float shininess;

};

struct Light {

vec3 position;

vec3 direction;

float cutOff;

float constant;

float linear;

float quadratic;

vec3 ambient;

vec3 diffuse;

vec3 specular;

};

in vec3 FragPos;

in vec3 Normal;

in vec2 TexCoords;

out vec4 color;

uniform vec3 viewPos;

uniform Material material;

uniform Light light;

void main()

{

vec3 lightDir = normalize(light.position - FragPos);

// Check if lighting is inside the spotlight cone

float theta = dot(lightDir, normalize(-light.direction));

if(theta > light.cutOff) // Remember that we're working with angles as cosines instead of degrees so a '>' is used.

{

// Ambient

vec3 ambient = light.ambient * vec3(texture(material.diffuse, TexCoords));

// Diffuse

vec3 norm = normalize(Normal);

float diff = max(dot(norm, lightDir), 0.0);

vec3 diffuse = light.diffuse * diff * vec3(texture(material.diffuse, TexCoords)); // Specular

vec3 viewDir = normalize(viewPos - FragPos);

vec3 reflectDir = reflect(-lightDir, norm);

float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess);

vec3 specular = light.specular * spec * vec3(texture(material.specular, TexCoords)); // Attenuation

float distance = length(light.position - FragPos);

float attenuation = 1.0f / (light.constant + light.linear * distance + light.quadratic * (distance * distance));

// ambient *= attenuation; // Also remove attenuation from ambient, because if we move too far, the light in spotlight would then be darker than outside (since outside spotlight we have ambient lighting).

diffuse *= attenuation;

specular *= attenuation;

color = vec4(ambient + diffuse + specular, 1.0f);

}

else // else, use ambient light so scene isn't completely dark outside the spotlight.

color = vec4(light.ambient * vec3(texture(material.diffuse, TexCoords)), 1.0f);

}

6.用相应的着色器绘制对象,设定灯光和材料特性,并创建摄像机变换:

// Calculate deltatime of current frame

GLfloat currentFrame = glfwGetTime();

deltaTime = currentFrame - lastFrame;

lastFrame = currentFrame;

// Check if any events have been activiated (key pressed, mouse moved etc.) and call corresponding response functions

glfwPollEvents();

do_movement();

// Clear the colorbuffer

glClearColor(0.1f, 0.1f, 0.1f, 1.0f);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Use cooresponding shader when setting uniforms/drawing objects 用相应的着色器绘制对象

https://www.360docs.net/doc/da454076.html,e();

GLint lightPosLoc = glGetUniformLocation(lightingShader.Program, "light.position");

GLint lightSpotdirLoc = glGetUniformLocation(lightingShader.Program, "light.direction");

GLint lightSpotCutOffLoc = glGetUniformLocation(lightingShader.Program, "light.cutOff");

GLint viewPosLoc = glGetUniformLocation(lightingShader.Program, "viewPos");

glUniform3f(lightPosLoc, camera.Position.x, camera.Position.y, camera.Position.z);

glUniform3f(lightSpotdirLoc, camera.Front.x, camera.Front.y, camera.Front.z);

glUniform1f(lightSpotCutOffLoc, glm::cos(glm::radians(12.5f)));

glUniform3f(viewPosLoc, camera.Position.x, camera.Position.y, camera.Position.z);

// Set lights properties

glUniform3f(glGetUniformLocation(lightingShader.Program, "light.ambient"), 0.1f,

0.1f, 0.1f);

glUniform3f(glGetUniformLocation(lightingShader.Program, "light.diffuse"), 0.8f,

0.8f, 0.8f);

glUniform3f(glGetUniformLocation(lightingShader.Program, "light.specular"), 1.0f,

1.0f, 1.0f);

glUniform1f(glGetUniformLocation(lightingShader.Program, "light.constant"), 1.0f);

glUniform1f(glGetUniformLocation(lightingShader.Program, "light.linear"), 0.09);

glUniform1f(glGetUniformLocation(lightingShader.Program, "light.quadratic"),

0.032);

// Set material properties

glUniform1f(glGetUniformLocation(lightingShader.Program, "material.shininess"),

32.0f);

// Create camera transformations

glm::mat4 view;

view = camera.GetViewMatrix();

glm::mat4 projection = glm::perspective(camera.Zoom, (GLfloat)WIDTH /

(GLfloat)HEIGHT, 0.1f, 100.0f);

// Get the uniform locations

GLint modelLoc = glGetUniformLocation(lightingShader.Program, "model");

GLint viewLoc = glGetUniformLocation(lightingShader.Program, "view");

GLint projLoc = glGetUniformLocation(lightingShader.Program, "projection");

// Pass the matrices to the shader

glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));

glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));

// Bind diffuse map

glActiveTexture(GL_TEXTURE0);

glBindTexture(GL_TEXTURE_2D, diffuseMap);

// Bind specular map

glActiveTexture(GL_TEXTURE1);

glBindTexture(GL_TEXTURE_2D, specularMap);

7.定义10个不同的箱子位置,为每个箱子生成不同的模型矩阵,每个模型矩阵包含相

应的本地到世界变换:

glm::mat4 model;

glBindVertexArray(containerVAO);

for (GLuint i = 0; i < 10; i++)

{

model = glm::mat4();

model = glm::translate(model, cubePositions[i]);

GLfloat angle = 20.0f * i;

model = glm::rotate(model, angle, glm::vec3(1.0f, 0.3f, 0.5f));

glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));

glDrawArrays(GL_TRIANGLES, 0, 36);

}

glBindVertexArray(0);

8.按照相似步骤编写点光源和聚光灯的代码,并修改相应的片段着色器。

五、实验结果

六、实验体会

这是实验是学会在3D场景中实现不同的光照效果——定向光、点光源和聚光灯。这次实验非常有意思,绘制出场景在平时玩的游戏中也经常看到。在实验中,要注意各光源的特点,将这些特点用数学语言描述出来,再转换为代码,这个过程对我们来说重要。

图形学实验报告

计 算 机 图 形 学 实验指导书 学号:1441901105 姓名:谢卉

实验一:图形的几何变换 实验学时:4学时 实验类型:验证 实验要求:必修 一、实验目的 二维图形的平移、缩放、旋转和投影变换(投影变换可在实验三中实现)等是最基本的图形变换,被广泛用于计算机图形学的各种应用程序中,本实验通过算法分析以及程序设计实验二维的图形变换,以了解变换实现的方法。如可能也可进行裁剪设计。 二、实验内容 掌握平移、缩放、旋转变换的基本原理,理解线段裁剪的算法原理,并通过程序设计实现上述变换。建议采用VC++实现OpenGL程序设计。 三、实验原理、方法和手段 1.图形的平移 在屏幕上显示一个人或其它物体(如图1所示),用交互操作方式使其在屏幕上沿水平和垂直方向移动Tx和Ty,则有 x’=x+Tx y’=y+Ty 其中:x与y为变换前图形中某一点的坐标,x’和y’为变换后图形中该点的坐标。其交互方式可先定义键值,然后操作功能键使其移动。 2.图形的缩放 在屏幕上显示一个帆船(使它生成在右下方),使其相对于屏幕坐标原点缩小s倍(即x方向和y方向均缩小s倍)。则有: x’=x*s y’=y*s 注意:有时图形缩放并不一定相对于原点,而是事先确定一个参考位置。一般情况下,参考点在图形的左下角或中心。设参考点坐标为xf、yf则有变换公式x’=x*Sx+xf*(1-Sx)=xf+(x-xf)*Sx y’=y*Sy+yf*(1-Sy)=yf+(y-yf)*Sy 式中的x与y为变换前图形中某一点的坐标,x’和y’为变换后图形中该点的坐标。当Sx>1和Sy>1时为放大倍数,Sx<1和Sy<1时为缩小倍数(但Sx和Sy

网络攻防实验报告

实验报告模板

【实验目的】(简要描述实验目的) 采用免杀、混淆等技术的恶意代码有可能突破安全软件的防护而运行在目标主机中。即使用户感受到系统出现异常,但是仅仅通过杀毒软件等也无法检测与根除恶意代码,此时需要用户凭借其它系统工具和对操作系统的了解对恶意代码手工查杀。本实验假设在已经确定木马进程的前提下,要求学生借助进程检测和注册表检测等系统工具,终止木马进程运行,消除木马程序造成的影响,从而实现手工查杀恶意代码的过程。 【实验结果及分析】(需要有结果截图) 一、恶意代码手工查杀实验 1、虚拟机快照 为防止虚拟机破坏后无法恢复,应先将干净的虚拟机进行快照设置。点击菜单“虚拟机”“快照”“拍摄快照”,创建一个干净的虚拟机快照。 2.创建被感染的系统环境 由于恶意代码采用了免杀技术,因此能够成功绕过防病毒等安全软件检测,等用户感到系统异常时,通常恶意代码已经在主机系统内加载运行。为了尽量模拟一个逼真的用户环境,我们在搭建好的虚拟机中运行木马宿主程序 “radar0.exe”。运行完后,可以看见,“radar0.exe”自动删除。

3.木马进程的定位 用户对系统的熟悉程度决定了发现系统异常继而查找恶意代码的早晚。在本例中,明显可以感受到系统运行速度变慢,打开任务管理器,可以观察到有一个“陌生”的进程(非系统进程或安装软件进程)“wdfmgr.exe”占用CPU比率很高。 为了确定该进程为木马进程,可以通过查找该进程的静态属性如创建时间、

开发公司、大小等,以及通过对该进程强制终止是否重启等现象综合判断。在本例中,“Wdfmgr.exe”为木马radar.exe运行后新派生的木马进程。 4.记录程序行为 打开工具“ProcMon.exe”,为其新增过滤规则“Process Name”“is”“wdfmgr.exe”,然后开始监控。点击“Add”将过滤规则加入,可以看到ProcMon开始监控“wdfmgr.exe”进程的行为。需要注意的是,有时为了保证观察到的行为完备性,会先启动ProcMon工具,然后再启动被监控进程。 为了分别观察该进程对文件系统和注册表的操作,点击菜单 “Tools”“File Summary”,观察对文件系统的修改。

计算机图形学实验报告

《计算机图形学》实验报告姓名:郭子玉 学号:2012211632 班级:计算机12-2班 实验地点:逸夫楼507 实验时间:15.04.10 15.04.17

实验一 1 实验目的和要求 理解直线生成的原理;掌握典型直线生成算法;掌握步处理、分析实验数据的能力; 编程实现DDA 算法、Bresenham 中点算法;对于给定起点和终点的直线,分别调用DDA 算法和Bresenham 中点算法进行批量绘制,并记录两种算法的绘制时间;利用excel 等数据分析软件,将试验结果编制成表格,并绘制折线图比较两种算法的性能。 2 实验环境和工具 开发环境:Visual C++ 6.0 实验平台:Experiment_Frame_One (自制平台) 3 实验结果 3.1 程序流程图 (1)DDA 算法 是 否 否 是 是 开始 计算k ,b K<=1 x=x+1;y=y+k; 绘点 x<=X1 y<=Y1 绘点 y=y+1;x=x+1/k; 结束

(2)Mid_Bresenham 算法 是 否 否 是 是 是 否 是 否 开始 计算dx,dy dx>dy D=dx-2*dy 绘点 D<0 y=y+1;D = D + 2*dx - 2*dy; x=x+1; D = D - 2*dy; x=x+1; x

3.2程序代码 //-------------------------算法实现------------------------------// //绘制像素的函数DrawPixel(x, y); (1)DDA算法 void CExperiment_Frame_OneView::DDA(int X0, int Y0, int X1, int Y1) { //----------请实现DDA算法------------// float k, b; float d; k = float(Y1 - Y0)/float(X1 - X0); b = float(X1*Y0 - X0*Y1)/float(X1 - X0); if(fabs(k)<= 1) { if(X0 > X1) { int temp = X0; X0 = X1; X1 = temp; }

计算机图形学实验报告实验2

大学实验报告 学院: 计算机科学与信息专业:计算机科学与技术班级:计科101 喻志华学号1008060024 实验组实验时间2013/3/30 指导教师吴云成绩实验项目名称圆和椭圆的生成算法 实 验目的 根据圆的Brensenham算法、中点算法和中点改进算法,以及椭圆的中点算法,编写程序,实现圆与椭圆的绘制。 实 验要求1.圆、椭圆的中点算法 2.圆的优化后的算法:二次差分法 3.编制源程序; 4.对于一些较为重要的算法,可以摘抄在报告中; 实验原理 1.中点算法 A.构造函数 F(X,Y)=X2+Y2-R2,则可知 F(M)< 0:M在圆,取T F(M)≥ 0:M在圆外,取 B B.第一个M点的值有: (一)DM0 = F(M0)= F(1,R-0.5)= 12+(R-0.5)2-R2=1.25-R 若 D=d-0.25 则判别式d<0等价于D<-0.25。即DM0=1-R与DM0=1.25-R等价。 (二)如果dM<0,表示下一中点M在圆,选择T点,且: dMT= F(MT)= F(xp+2,yp-0.5) 则: ?dMT= dMT - dM=2xp+3 (三)如果dM>0,表示下一中点M在圆外,选择B点,且: dMB= F(xMB,yMB)= F(xp+2,yp-1.5)则: ?dMB= dMB - dM=2xp-2yp +5 2.中点改进算法——增量算法

设圆上某点I(xi,yi);则下一点为J点,坐标为(xi+1,yj)dT=2xp+3; dB=2(xp-yp)+5; d1=d2=0; 因为x每次加1,所以 dj点 A.将增量?dMT=2(xi+1)+3=dT+2=dT+d1; (d1=d1+2) B.将增量?dMB=2(xi+1)-2yj+5=dB+d1+d2; dj较之于di,x部分增量增加相同的量,y部分两种情况 1.取T点,yj不减1,y部分增量的增量无变化 2.取B点,yj减1,y部分增量的增量加 2. 所以当y—时,d2=d2+2 因此,d<0, d=d+dT+d1; d>0, d=d+dB+d1+d2; 3.Brensenham算法 1.基本思想: 当|D(Ti)|≥|D(Bi)|,则Bi更接近于圆周,选择Bi; 当|D(Ti)|<|D(Bi)|,则Ti更接近于圆周,选择Ti; 若令D=|D(Ti)|-|D(Bi)| 则D≥0,取Bi; D<0,取Ti; 2.三种情况 A.设x0=0,y0=R;则T1为(1,R),B1为(1,R-1), d1=(12+R2-R2)+[(12+(R-1)2-R2]=3-2R B.若di<0,则取Ti作为下一点,即Pi(xi-1+1,yi-1); d(i+1)=di+4xi-1+6 C.若di≥0,则取Bi作为下一点,即Pi(xi-1+1,yi-1-1), d(i+1)=di+4(xi-1-yi-1)+10 4.椭圆的中点算法

图形学实验报告

山东建筑大学测绘地理信息学院 实验报告 (2016—2017学年第一学期) 课程:计算机图形学 专业:地理信息科学 班级:地信141 学生姓名:王俊凝 学号:20140113010 指

实验一直线生成算法设计 一、实验目的 掌握基本图形元素直线的生成算法,利用编程语言C分别实现直线和圆的绘制算法。 二、实验任务 在TurboC环境下开发出绘制直线和圆的程序。 三、实验仪器设备 计算机。 四、实验方法与步骤 1 运行TurboC编程环境。 2 编写Bresenham直线绘制算法的函数并进行测试。 3 编写中点圆绘制算法的函数并进行测试。 4 增加函数参数,实现直线颜色的设置。 提示: 1. 编程时可分别针对直线和圆的绘制算法,设计相应的函数,例如void drawline(…)和void drawcircle(…),直线的两个端点可作为drawline的参数,圆的圆心和半径可作为drawcircle的参数。 2. 使用C语言编写一个结构体类型用来表示一个点,结构体由两个成员构成,x和y。这样,在向函数传入参数时,可使用两个点类型来传参。定义方法为:

typedef struct{ int x; int y; }pt2; 此处,pt2就是定义的一个新的结构体数据类型,之后就可用pt2来定义其他变量,具体用法见程序模板。 3. 在main函数中,分别调用以上函数,并传入不同的参数,实现对直线的绘制。 4. 线的颜色也可作为参数传入,参数可采用TurboC语言中的预设颜色值,具体参见TurboC图形函数。 五、注意事项 1 代码要求正确运行,直线和圆的位置应当为参数,实现可配置。 2 程序提交.c源文件,函数前和关键代码中增加注释。 程序模板 #include #include typedef struct{ int x; int y; }pt2; /*declare your drawing functions.*/ void drawline(pt2 startpt,pt2 endpt,int color); void drawcircle(pt2 centerpt,int radius,int color); void circlePlotPoints(pt2 centerpt,int x,int y,int color); int main() { int color,radius;

网络防御实验报告

网络防御实验报告 学院计算机学院 专业网络工程 班级1班 姓名刘小芳 学号41009040127 - 2013年12月30日

一.实验题目 网络防御实验 二.实验环境 PC 机一台; 操作系统:win7 物理地址:EO-E9-A5-81-A5-1D IP地址:192.168.1.102 三.实验目的 掌握有关网络防御的基本原理和方法; 四.常见网络防御方法 10.1物理层 10.2网络层 路由交换策略 VLAN划分 防火墙、隔离网闸 入侵检测 抗拒绝服务 传输加密 10.3系统层 漏洞扫描 系统安全加固 10.4应用层 防病毒 安全功能增强 10.5管理层 独立的管理队伍 统一的管理策略 五、实验方法概述 前面设计了网络攻击实验,现在在前面的基础上完成网络攻击的防御,主要模仿现在常用的网络防御手段,如防火墙等。 六.概述: 1.恶意代码及黑客攻击手段的三大特点: 传播速度惊人:“大型推土机”技术(Mass rooter),是新一代规模性恶意代码具备的显著功能。 这些恶意代码不仅能实现自我复制,还能自动攻击内外网上的其它主机,并以受害者为攻击源继续攻击其它网络和主机。 以这些代码设计的多线程和繁殖速度,一个新蠕虫在一夜之间就可以传播到互联网的各个角落。

2.受害面惊人:许多国家的能源、交通、金融、化工、军事、科技和政府部门等关键领域的信息化程度逐年提高,这些领域的用户单位的计算机网络,直接或间接地与Internet有所联系。 各种病毒、蠕虫等恶意代码,和各种黑客攻击,通过Internet为主线,对全球各行业的计算机网络用户都造成了严重的影响。 3穿透深度:蠕虫和黑客越来越不满足于攻击在线的网站,各种致力于突破各种边界防线的攻击方式层出不穷。 一个新的攻击手段,第一批受害对象是那些24小时在线的网站主机和各种网络的边界主机; 第二批受害对象是与Internet联网的,经常收发邮件的个人用户; 第三批受害对象是OA网或其它二线内网的工作站; 终极的受害对象可能会波及到生产网络和关键资产主机。 4.网络攻击的动机 偷取国家机密 商业竞争行为 内部员工对单位的不满 对企业核心机密的企望 网络接入帐号、信用卡号等金钱利益的诱惑 利用攻击网络站点而出名 对网络安全技术的挑战 对网络的好奇心 5.攻击的过程 预攻击攻击后攻击

实验1-木马病毒攻防

南昌航空大学实验报告 二〇一三年十一月八日 课程名称:信息安全实验名称:实验1木马攻击与防范 班级:xxx 姓名:xxx 同组人: 指导教师评定:签名: 一、实验目的 通过对木马的练习,使读者理解和掌握木马传播和运行的机制;通过手动删除木马,掌握检查木马和删除木马的技巧,学会防御木马的相关知识,加深对木马的安全防范意识。 二、实验原理 木马的全称为特洛伊木马,源自古希腊神话。木马是隐藏在正常程序中的具有特殊功能的恶意代码,是具备破坏、删除和修改文件、发送密码、记录键盘、实施DOS攻击甚至完全控制计算机等特殊功能的后门程序。它隐藏在目标计算机里,可以随计算机自动启动并在某一端口监听来自控制端的控制信息。 1.木马的特性 木马程序为了实现其特殊功能,一般应该具有以下性质: (1)伪装性(2)隐藏性(3)破坏性(4)窃密性 2.木马的入侵途径 木马入侵的主要途径是通过一定的欺骗方法,如更改图标、把木马文件与普通文件合并,欺骗被攻击者下载并执行做了手脚的木马程序,就会把木马安装到被攻击者的计算机中。木马也可以通过Script、ActiveX及ASP、CGI交互脚本的方式入侵,攻击者可以利用浏览器的漏洞诱导上网者单击网页,这样浏览器就会自动执行脚本,实现木马的下载和安装。木马还可以利用系统的一些漏洞入侵,获得控制权限,然后在被攻击的服务器上安装并运行木马。3.木马的种类 (1)按照木马的发展历程,可以分为4个阶段:第1代木马是伪装型病毒;第2代木马是网络传播型木马;第3代木马在连接方式上有了改进,利用了端口反弹技术,例如灰鸽子木马;第4代木马在进程隐藏方面做了较大改动,让木马服务器端运行时没有进程,网络操作插入到系统进程或者应用进程中完成,例如广外男生木马。 (2)按照功能分类,木马又可以分为:破坏型木马;密码发送型木马;服务型木马;DOS 攻击型木马;代理型木马;远程控制型木马。 4.木马的工作原理 下面简单介绍一下木马的传统连接技术、反弹端口技术和线程插入技术。 (1)木马的传统连接技术;C/S木马原理如图1-1所示。第1代和第2代木马都采用的是C/S连接方式,这都属于客户端主动连接方式。服务器端的远程主机开放监听端目等待外部的连接,当入侵者需要与远程主机连接时,便主动发出连接请求,从而建立连接。 (2)木马的反弹端口技术;随着防火墙技术的发展,它可以有效拦截采用传统连接方式。但防火墙对内部发起的连接请求则认为是正常连接,第3代和第4代“反弹式”木马就是利用这个缺点,其服务器端程序主动发起对外连接请求,再通过某些方式连接到木马的客户端,如图1-2和图1-3所示。

计算机图形学实验报告

《计算机图形学》 实验报告 学号:0908610211 姓名:宋雪英 班级:计算机0961 项目: 1.利用其它两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。 2.利用方形、线性两种画刷来绘制圆和椭圆。 3.实现交互式二维图形的放缩,旋转和对称变换 2012年12月25日

基本图形的生成技术 一、实验目的 在一个图形系统中,基本图形(也称为图元、图素等)的生成技术是最基本的,任何复杂的图形都是由基本图形组成的,基本图形生成的质量直接影响该图形系统绘图的质量。所以,需要设计出精确的基本图形生成算法,以确保图形系统绘图的精确性。本次实验的目的就是利用Bresenham 算法和中心画线法两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。利用方形、线性两种画刷来绘制圆和椭圆。实现交互式二维图形的放缩,旋转和对称变换。 二、实验任务 1.利用其它两种画直线方法实现放大10陪显示方法,交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。 2.利用方形、线性两种画刷来绘制圆和椭圆。 3.实现交互式二维图形的放缩,旋转和对称变换。 三、画直线的实验内容 任务一:利用其它两种画直线方法实现放大10陪显示方法交互式画直线,预先定义直线段的起止端点,每点击一次鼠标左键,画出直线上的一点,直到终点为止。 1、设计思路 第一步:建立DDAMouseLine工程文件; 第二步:向视图类中添加自定义的成员变量 用鼠标右键单击视图类,选择“Add Member Variable…”,添加下面三个成员变量。 proctected : CPoint m_p1; //起点 CPoint m_p2; //起点 CPoint m_p; //点击鼠标时点的取值 第三步:向视图类中添加自定义的成员函数原型:

计算机图形学实验报告记录

计算机图形学实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

计算机图形学实验报告 姓名:___ __________ 学号:_____ ________ 班级:______ _______ 时间:_____2016年12月_________

实验一OpenGL编程与图形绘制 1.实验目的 了解OpenGL编程,并熟悉OpenGL的主要功能、绘制流程和基本语法。学会配置OpenGL环境,并在该环境中编程绘图。 2.实验内容 OpenGL的主要功能:模型绘制、模型观察、颜色模式、光照应用、图像效果增强、位图和图像处理、纹理映射、实时动画和交互技术。 OpenGL的绘制流程分为两个方面:一个完整的窗口系统的OpenGL图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,最上面的层为应用软件;OpenGL命令将被放在一个命令缓冲区中,这样命令缓冲区中包含了大量的命令、顶点数据和纹理数据。当缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段。 OpenGL的基本语法中相关库有:OpenGL核心库:gl、OpenGL实用程序库:glu、OpenG 编程辅助库:aux、OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut、Windows 专用库:wgl。 OpenGL的基本语法中命名规则为:OpenGL函数都遵循一个命名约定,即采用以下格式:<库前缀><根命令><可选的参数个数><可选的参数类型>。 了解了上述基础知识后,配置好OpenGL环境,然后在该环境中编程练习图形的绘制,本次实验主要是对点的绘制、直线的绘制和多边形面的绘制。 3.实验代码及结果 3.1点的绘制: #include void Initial(void) { glClearColor(1.0f,1.0f,1.0f,1.0f); //设置窗口背景颜色为白色 glMatrixMode(GL_PROJECTION); //指定设置投影参数 gluOrtho2D(0.0,200.0,0.0,150.0); //设置投影参数 } void Display(void) {

计算机病毒实验报告

计算机病毒实验报告 ——windows病毒实验 姓名:张艳秋 学号:081300607 班级:信安0802 指导老师:韦俊银 实验日期:2011.5.27

实验内容 1.PE文件感染实验(选) 2.暴风一号病毒 3.VBS病毒产生 4.宏病毒实验(选)

PE文件感染实验 实验目的 了解pe病毒的感染过程 实验环境 硬件设备 PC机一台(建议虚拟机) 软件工具 Office Word 2007 实验步骤 一:参照病毒感染PE文件的7个步骤,记录病毒是如何感染文件(文字和截屏形式) 病毒感染文件过程(以感染文件ebookcode.exe为例): 重定位,获得所有API地址: …… 通过软件Stud_PE可查看可执行文件ebookcode.exe的结构可查看文件内容: 1.判断目标文件开始的两个字节是否为“MZ”:

2.判断PE文件标记“PE”: 3.判断感染标记,如果已被感染过则跳出继续执行宿主程序,否则继续: 4.读取IMAGE_FILE_HEADER的NumberOfSections域,获得Data Directory (数据目录)的个数,(每个数据目录信息占8个字节): 5.得到节表起始位置。(数据目录的偏移地址+数据目录占用的字节数=节表起始位置):

6.得到节表的末尾偏移(紧接其后用于写入一个新的病毒节信息)节表起始位置+节的个数*(每个节表占用的字节数28H)=节表的末尾偏移 7.开始写入节表,感染文件: 二:在掌握Stud_PE工具的基础上,比较文件感染前后有哪些变化。 感染前:

感染后: 由上两图可以看出,感染前后有4处发生了变化: 1:PE文件头中入口点: 感染病毒后ebookedit.exe程序的入口点变成了病毒文件的入口点 2:PointerToRawData域值,即该文件的偏移量发生了变化; 3:imag的大小发生了变化; 4:sections的数量发生了变化。 由.exe文件感染前后变化可知,PE病毒感染过程即在文件中添加一个新节,

大学大一c语言程序设计实验室上机题全部代码答案(实验报告)汇编

C语言实验报告 实验1-1: hello world程序: 源代码: #include main() { printf("hello world!\n"); system("pause"); } 实验1-2: 完成3个数据的输入、求和并输出计算结果的程序: 源代码: #include main() { int i,j,k,sum; scanf("%d%d%d",&i,&j,&k); sum=i+j+k; printf("sum=%d",sum); system("pause"); 实验1-3: 在屏幕上输出如下图形: A BBB CCCCC 源代码: #include main() { printf(" A\n"); printf(" BBB\n"); printf(" CCCCC\n"); system("pause"); } 实验2-1: 计算由键盘输入的任何两个双精度数据的平均值 源代码: #include

main() { double a,b; scanf("%lf%lf",&a,&b); printf("%.1lf\n",(a+b)/2); system("pause"); } 实验2-2: 写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算源代码: #include main() { float a,b,c,d,e,f,g,x; scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g); x=a + b * (c - d ) / e * f - g; printf("x=%f",x); system("pause"); } 实验2-3: 编写一个C语言程序,测试下列各表达式: i, j i + 1 , j + 1 i++ , j++ ++i , ++j i+++++j 源代码: #include main() { int i=1,j=1; printf("%d %d\n",i+1,j+1); printf("%d %d\n",i++,j++); printf("%d %d\n",++i,++j); printf("%d\n",(i++)+(++j)); system("pause"); } 实验2-4: 输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest (税前),输出时保留2位小数。 interest = money(1+rate)year - money

计算机图形学实验报告 (2)

中南大学信息科学与工程学院 实验报告实验名称 实验地点科技楼四楼 实验日期2014年6月 指导教师 学生班级 学生姓名 学生学号 提交日期2014年6月

实验一Window图形编程基础 一、实验类型:验证型实验 二、实验目的 1、熟练使用实验主要开发平台VC6.0; 2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序; 3、掌握Window图形编程的基本方法; 4、学会使用基本绘图函数和Window GDI对象; 三、实验内容 创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求: 1、用户可以通过菜单选择绘图颜色; 2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形; 四、实验要求与指导 1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。 2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形 其中“曲线”项有级联菜单,包括:圆、椭圆。 3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果: 六、实验主要代码 1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this); 在OnDraw函数中添加: m_pDC=new CClientDC(this); m_pDC->MoveTo(10,10); m_pDC->LineTo(100,100); m_pDC->SetPixel(100,200,RGB(0,0,0)); m_pDC->TextOut(100,100); 2、画圆: void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC) { int dx = xb - xa; int dy = yb - ya; int Steps, k; float xIncrement,yIncrement; float x = xa,y= ya; if(abs(dx)>abs(dy))

防火墙实验报告 2

计算机安全实验报告 实验题目:天网防火墙windows安全设置专业/班级:计科一班 学号:110511407 姓名:李冲 指导教师:张小庆

一天网防火墙技术 1 实验题目简述 个人防火墙是防止电脑中的信息被外部侵袭的一项技术,在系统中监控、阻止任何未经授权允许的数据进入或发出到互联网及其他网络系统。个人防火墙产品如著名Symantec公司的诺顿、Network Ice公司的BlackIce Defender、McAfee公司的思科及Zone Lab的free ZoneAlarm 等,都能帮助用户的系统进行监控及管理,防止特洛伊木马、spy-ware 等病毒程序通过网络进入电脑或向外部扩散。 这些软件都能够独立运行于整个系统中或针对个别程序、项目,所以在使用时十分方便及实用。本次试验采用天网个人防火墙SkyNet FireWall进行个人防火墙简单的配置应用。 2.实验目标和意义 实验的目标是在于熟悉个人防火墙的配置与应用,以便更加保证个人电脑的网络安全,避免恶意用户以及程序的入侵。防治安全威胁对个人计算机产生的破坏。 3.实验原理和实验设备 3.1 实验原理 随着计算机技术的迅速发展,在计算机上处理的业务也由基于单机的数学运算、文件处理,基于简单连接的内部网络的内部业务处理、办公自动化等发展到基于复杂的内部网、企业外部网、全球互联网的企业级计算机处理系统和世界范围内的信息共享和业务处理。在系统处理能力提高的同时,系统的连接能力也在不断的提高。但在连接能力信息、流通能力提高的同时,

基于网络连接的安全问题也日益突出,因此计算机安全问题,应该像每家每户的防火防盗问题一样,做到防范于未然。防火墙则是一个安全策略的检查站。所有进出的信息都必须通过防火墙,防火墙便成为安全问题的检查点,使可疑的访问被拒绝于门外。 防火墙对流经它的网络通信进行扫描,这样能够过滤掉一些攻击,以免其在目标计算机上被执行。防火墙还可以关闭不使用的端口。而且它还能禁止特定端口的流出通信,封锁特洛伊木马。最后,它可以禁止来自特殊站点的访问,从而防止来自不明入侵者的所有通信。 例如,防火墙可以限制 TCP、UDP协议及TCP协议允许访问端口范围,当不符合条件时,程序将询问用户或禁止操作,这样可以防止恶意程序或木马向外发送、泄露主机信息。并且可以通过配置防火墙IP规则,监视和拦截恶意信息。与此通知,还可以利用IP规则封杀指定 TCP/UDP端口,有效地防御入侵,如139漏洞、震荡波等。 3.1 实验设备 Window 7 天网个人防火墙2010版 4.实验步骤 4.1 实验步骤 第一步:局域网地址设置,防火墙将会以这个地址来区分局域网或者是INTERNET的IP来源。设置如图3-1.

周信东主编版C语言程序设计基础实验一实验报告

周信东主编版C语言程序设计基础实验一实验报告 The latest revision on November 22, 2020

实验1 C程序的运行环境和最简单的C程序设计 学号:姓名:莫新锋实验日期: 一、实验目的和要求 (1)熟悉C语言程序开发环境(Visual C++),了解开发环境中的编辑、编译、链接和运行命令。 (2)掌握在C语言开发环境中如何编辑、编译、链接和运行一个标准C语言程序。(3)掌握简单C语言程序的查错方法,理解编译错误信息的含义。 (4)掌握C语言数据类型的概念,熟悉如何定义一个整型、字符型、实型变量,以及如何对它们进行赋值。 (5)了解下列命令及函数:#include <>、main、printf、scanf。 (6)通过运行简单的程序,熟悉C语言的基本格式规范,并初步了解它的结构特点。 二、实验内容 实验指导书中的实验一的“基础部分”题目。 三、实验步骤及结果 (一)VC 实验平台的使用 1.简要描述在VC环境下开发一个C程序的主要步骤,并粘贴主要操作窗口的截图。【请填空。截图的操作方法:先点击欲截取的窗口使之置于屏幕最前方,并作适当的缩放,再按快捷键+将窗口截取到内存中,然后打开word将光标移到欲插入图片的位置上进行粘贴即可。也可对图片进行适当剪切,裁剪掉多余部分。注意:截图上必须有你自己的学号或姓名等信息,否则视为抄袭。】 主要步骤: 1: 创建一个工作文件夹。 2:启动 Visual C++。 3:新建一个 C 语言源程序。 4:编辑源程序 5:保存源程序 2.编译、链接、运行程序 (1)输入源程序后,如何编译该程序 【请填空】 输入好后在编译器中有一个编译按钮按一下就能编译 (2)如何链接程序生成可执行文件 【请填空】 得到后缀为obj的目标程序后选择build菜单下的build选项,表示要求连接并建立一个可执行文件 (3)如何运行程序查看结果 【请填空】

网络安全 实验报告

首都经济贸易大学信息学院实验报告 实验课程名称网络安全技术 首都经济贸易大学信息学院计算机系制

实验报告 学号:实验地点:3机房 姓名:实验时间: 一、实验室名称:网络安全实验 二、实验项目名称:冰河木马攻击 三、实验原理: 原理:特洛伊木马(简称木马),是一种基于远程控制的黑客工具,具有隐蔽性和破坏性的特点。大多数木马与正规的远程控制软件功能相似。但木马有一些明显的特点,例如,它的安装和操作都是在隐蔽之中完成。攻击者经常将木马隐蔽在一些游戏或小软件中,诱使粗心的用户在自己的机器上运行。最常见的情况是,用户从不正规的网站下载和运行了带恶意代码的软件,或者不小心点击了带恶意代码的邮件附件。 大多数木马包括客户端和服务器端两个部分。攻击者利用一种称为绑定程序的工具将服务器绑定到某个合法软件上,只要用户运行被绑定的合法软件,木马的服务器部分就在用户毫无知觉的情况下完成了安装过程。通常,木马的服务器部分是可以定制的,攻击者可以定制的项目一般包括服务器运行的IP端口号,程序启动时机、如何发出调用、如何隐身、是否加密。另外,攻击者还可以设置登录服务器的密码,确定通信方式。木马攻击者既可以随心所欲地查看已被入侵的机器,也可以用广播方式发布命令,指示所有在他控制之下的木马一起行动,或者向更广泛的范围传播,或者做其他危险的事情。 木马的设计者为了防止木马被发现,会采用多种手段隐藏木马,这样用户即使发现感染了木马,也很验证找到并清除它。木马的危害越来越大,保障安全的最好办法就是熟悉木马的类型、工作原理,掌握如何检测和预防这些代码。常见的木马,例如冰河、Netbus、网络神偷等,都是多用途的攻击工具包,功能非常全面,包括捕获屏幕、声音、视频内容的功能。这些木马可以当作键记录器、远程控制器、FTP服务器、HTTP服务器、Telnet服务器,还能够寻找和窃取密码。攻击者可以配置木马监听的端口、运行方式,以及木马是否通过Email、IRC或其他通信手段联系发起攻击的人。一些危害大的木马还有一定的反侦测能力,能够采取各种方式隐藏自身,加密通信,甚至提供了专业级的API供其他攻击者开发附加的功能。冰河在国内一直是不可动摇的领军木马,有人说在国内没有用过冰河的人等于没用过木马。冰河木马的目的是远程访问、控制。该软件主要用于远程监牢,具体功能包括: (1)自动跟踪目标机屏幕变化,同时完全模拟键盘及鼠标输入,即在同步变化的同时,监控端的一切键盘及鼠标操作将反映在被控端屏幕(局域网适用)。 (2)记录各种口令信息。包括开机口令、屏保口令、各种虚伪补齐诼绝大多数在对话框中出现过的口令信息,且1.2以上的版本中允许用户对该功能自行扩充,2.0以上的版本还同时提供了击键记录功能。 (3)获取系统信息。包括计算机名、注册公司、当前用户、系统路径、操作系统版本、当

实验报告(五)GUI程序设计(完整代码)

福建农林大学计算机与信息学院实验报告 实验(五)GUI程序设计 一、实验目的和要求 1.掌握简单GUI的设计和实现 2.理解并掌握GUI事件驱动的程序设计 3.理解网络程序设计 二、实验内容和原理 实现一个程序,用于浏览用户指定的文本文件。界面如图1所示: 图1 文本文件浏览的用户界面

2、界面实现 // Panel p to hold a label, a text field, and a button Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add(new Label("Filename"), BorderLayout.WEST); p.add(jtfFilename, BorderLayout.CENTER); p.add(jbtView, BorderLayout.EAST); // Add jsp and p to the frame add(jsp, BorderLayout.CENTER); add(p, BorderLayout.SOUTH); 3、事件驱动 // Register listener jbtView.addActionListener(new ActionListener() { /**Handle the View button*/ public void actionPerformed(ActionEvent e) { if (e.getSource() == jbtView) showFile(); //自己实现这个方法,在textArea中浏览文本文件内容 } }); 4、网络程序设计(可选) 实现一个网络服务,用于把指定的文件内容传给客户端(见Exp_5_Server.java),在“事件驱动”中调用方法“showFileFromServer()” package com.fafu.training; import java.awt.BorderLayout; import java.awt.Panel; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.Inputream; import java.io.Reader; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel;

《计算机图形学实验报告》

一、实验目的 1、掌握中点Bresenham直线扫描转换算法的思想。 2掌握边标志算法或有效边表算法进行多边形填充的基本设计思想。 3掌握透视投影变换的数学原理和三维坐标系中几何图形到二维图形的观察流程。 4掌握三维形体在计算机中的构造及表示方法 二、实验环境 Windows系统, VC6.0。 三、实验步骤 1、给定两个点的坐标P0(x0,y0),P1(x1,y1),使用中点Bresenham直线扫描转换算法画出连接两点的直线。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、使用中点Bresenham直线扫描转换算法实现自己的画线函数,函数原型可表示如下: void DrawLine(CDC *pDC, int p0x, int p0y, int p1x, int p1y); 在函数中,可通过调用CDC成员函数SetPixel来画出扫描转换过程中的每个点。 COLORREF SetPixel(int x, int y, COLORREF crColor ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用DrawLine 函数画出不同斜率情况的直线,如下图:

最后、调试程序直至正确画出直线。 2、给定多边形的顶点的坐标P0(x0,y0),P1(x1,y1),P2(x2,y2),P3(x3,y3),P4(x4,y4)…使用边标志算法或有效边表算法进行多边形填充。 实验基本步骤 首先、使用MFC AppWizard(exe)向导生成一个单文档视图程序框架。 其次、实现边标志算法或有效边表算法函数,如下: void FillPolygon(CDC *pDC, int px[], int py[], int ptnumb); px:该数组用来表示每个顶点的x坐标 py :该数组用来表示每个顶点的y坐标 ptnumb:表示顶点个数 注意实现函数FillPolygon可以直接通过窗口的DC(设备描述符)来进行多边形填充,不需要使用帧缓冲存储。(边标志算法)首先用画线函数勾画出多边形,再针对每条扫描线,从左至右依次判断当前像素的颜色是否勾画的边界色,是就开始填充后面的像素直至再碰到边界像素。注意对顶点要做特殊处理。 通过调用GDI画点函数SetPixel来画出填充过程中的每个点。需要画线可以使用CDC的画线函数MoveTo和LineTo进行绘制,也可以使用实验一实现的画直线函数。 CPoint MoveTo(int x, int y ); BOOL LineTo(int x, int y ); 实现边标志算法算法需要获取某个点的当前颜色值,可以使用CDC的成员函数 COLORREF GetPixel(int x, int y ); 再次、找到文档视图程序框架视图类的OnDraw成员函数,调用FillPolygon 函数画出填充的多边形,如下: void CTestView::OnDraw(CDC* pDC) { CTestcoodtransDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);

实验4-3的实验报告

电子科技大学 实验报告 学生姓名:学号:指导教师: 实验地点:主楼A2-413-1 实验时间: 一、实验室名称:主楼A2-413-1 二、实验项目名称:木马技术初级实验1 三、实验学时:1 学时 四、实验原理: 木马进行网络入侵,从过程上看大致可分为六步: (1)木马配置 一般来说,一个成熟的木马都有木马配置程序,从具体的配置内容看,主要是为了实现以下的功能:第一让木马程序更加隐蔽,比如隐蔽的文件名,文件图标,文件属性。第二就是设置信息反馈的方式,比如在窃取信息后,发送邮件到攻击者,或者上传至某处等等。第三就是如果是反向连接的木马,需要配置获得攻击者的IP并连接的具体方式。 (2)传播木马 根据配置生产木马后,需要将木马传播出去,比如通过邮件诱骗,漏洞攻击等。 (3)运行木马 在用户机器上木马程序一旦被运行后,木马便会安装并驻留在用户系统中。木马通过各种手段防止不被用户发现,并且随系统启动而启动,以求获得最长的生命期。并在这一期间会通过各种手段向攻击者发出反馈信息,表示木马已经获得运行。

(4)建立连接 无论是正向连接还是反向连接的木马,都会在入侵用户机器成功运行伺机与攻击者获得联系,正向连接的木马往往是开发一个特定的端口,然后由攻击者扫描到被攻击机器建立连接。如果是反向连接的木马,则是木马本身在一定的情况下获得攻击者的IP地址,并主动建立连接。 (5)远程控制 攻击者一端与被控端建立连接后,它们之间便架起了一条网络通讯的通道,攻击者通过向被控端发出各种请求操作实现远程控制。现在的木马程序功能都做的非常完善,操作远端机器就如同本地操作一样简单容易。 4.木马/后门的特点与技术 (1)木马隐蔽技术 木马的隐藏主要分为文件隐藏、进线程隐藏、端口隐藏、注册表隐藏等等。隐藏的手段也多种多样。并且这项技术是关乎木马本身生命周期的关键因素。通过编写驱动程序隐藏木马的方法已非常多见,用户在未使用一些更高级的工具之前是无法发现木马的存在的,对于防病毒软件来说清除难度也较大。 (2)传播 木马这种恶意代码本身并无传播能力,随着恶意代码各个种类的界限越来越模糊,木马也会具备一些传播的能力。 (3)自启动 自启动功能是木马的标准功能,因为需要在系统每次关机重启后都能再次获得系统的控制权。自启动的方法也是五花八门,种类繁多。 五、实验目的: 1.实践木马配置、木马控制的方法、并体会木马控制连接的实质。 2.学习和发现木马,研究检测木马的方法。 六、实验内容: 1.木马配置 2.木马应用 七、实验器材(设备、元器件):

相关文档
最新文档