久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

中南大學多媒體實驗報告[5篇模版]

時間:2019-05-15 10:15:34下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《中南大學多媒體實驗報告》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《中南大學多媒體實驗報告》。

第一篇:中南大學多媒體實驗報告

《多媒體技術》 實驗報告

學 院: 信息科學與工程學院 班 級:

學 號: 姓 名: 目錄

實驗一 圖像采集與編輯實驗..............................................3一、二、實驗目的...................................................................................................................3 實驗內容及成果.......................................................................................................3

實驗二 音頻信號的獲取與處理..........................................5一、二、三、四、實驗目的...................................................................................................................5 實驗設備...................................................................................................................5 實驗內容及步驟.......................................................................................................5 思考題.......................................................................................................................6

實驗三 波形音頻播放器......................................................6一、二、三、實驗目的...................................................................................................................6 實驗內容及要求.......................................................................................................7 思考題.......................................................................................................................8

實驗四 數字視頻播放器......................................................9一、二、實驗目的...................................................................................................................9 實驗內容及要求.......................................................................................................9

實驗五 視頻編輯實驗........................................................11一、二、實驗目的.................................................................................................................11 實驗內容及要求.....................................................................................................11 實驗六 綜合實驗................................................................14

一、實驗目的.................................................................................................................14

二、實驗內容及要求.............................................................................................................14

實驗一 圖像采集與編輯實驗

一、實驗目的

1.了解數碼相機基本使用。

2.熟悉PHOTOSHOP在圖像處理上的用途。3.掌握PHOTOSHOP一些基本的圖像操作。

二、實驗內容及成果

通過學習PHOTOSHOP的基本操作,制作以下三種圖像編輯效果圖。1.海市蜃樓效果

制作要求:用數碼照自己的照片,采用圖形合并等技術,將自己的照片移植至提供的風景圖片中,制造出海市蜃樓效果。

步驟: 準備好兩張圖象,一張沙漠圖片,一張自己照片。

在工具箱中用矩形工具選區所需的頭部圖象。用工具箱中的移動工具將圖象移到沙漠圖象中,作為一個新層Layer 1。點擊菜單“Edit編輯/Free Transform自由變換”命令來縮放圖象的大小,并移動到適當的位子。選擇背景擦除工具,將人物頭部之外的部分擦掉。按住Ctrl鍵,同時用鼠標單擊圖層面板中的Layer 1 層,將人物頭像選取。選擇羽化菜單,設置羽化半徑為“10 pixels”。在圖層面板中的圖層1單擊鼠標右鍵,選擇“剪切得到圖層”命令將羽化的圖象剪切到新層2,右鍵單擊圖層1,刪除圖層1。適當修飾后合并圖層,得到最終效果圖,如下:

2.換臉技術

制作要求:選擇一張明星照片,將自己用數碼照的照片中的臉換明星的臉,得到你的臉和明星的身材的新明星組合體。步驟:選擇兩張圖片

首先摳圖,將自己的臉輪廓選中。然后在工具箱中選擇移動工具,按住選區不放,將頭像移動到另外一張圖象里。適當調整大小和位置。在工具箱中選擇多邊套選工具

選取多余的部分,并按delete鍵將它刪除。選取底圖為,使臉部的邊緣顏色和底圖相近。選取工作圖層,點擊工具箱中的圖章工具工具箱中的海綿工具最終得到成品圖如下:,涂擦圖象邊緣,使之模糊一點一邊和底圖更加融合。3.特殊字體

制作要求:將自己的名字、班級、學號等信息制作成如下字體中的任兩種:發光字,火焰字,霓虹字,立體字。

選擇制作發光字和火焰字。步驟: 發光字

新建立一個RGB圖像,大小為12×6厘米,背景為黑色。使用文字工具在圖像中輸入名字。拖曳“”到圖層面板底部的新建按鈕,復制出一個副本層。按Ctrl鍵單擊面板中的副本層,安裝文字選區。執行“選擇|修改|擴展”命令,擴展量為4個像素。執行“選擇|羽化”命令,羽化半徑為3個像素。將前景色設置為淺黃綠色,然后執行“編輯|填充”命令,使用前景色填充選區。拖曳副本層至“發光”層下方,然后單擊“發光層”,將它設置為當前層。按Ctrl鍵單擊“”文字層載入文字選區,執行“編輯|填充”命令,使用黑色填充文字選區。將前景色設置為更亮的黃綠色,執行“編輯|描邊”命令,描邊寬度為2個像素。按Ctrl+D組合鍵取消選區,然后合并圖層,完成發光文字的制作。如下圖:

火焰字

新建一個灰度模式的圖像文件,背景填充為黑色。使用文本工具在圖像中輸入“電氣”兩字,顏色為白色。調整文字的位置,合并圖層。將圖像順時針旋轉90度, 執行風吹濾鏡。選擇對話框中的“風”項,“方向”欄中的“從右”項。然后再次使用剛使用過的風吹濾鏡,加強風吹效果。將圖像逆時針旋轉90度執行波浪濾鏡使火焰飄起來。將圖像轉換為Indexed Color模式。執行“顏色表”命令,打開Color Table對話框,在Table列表中選擇“黑體”色表。執行RGB Color命令,將圖像轉換為RGB模式。完成燃燒字的制作。如下圖:

實驗二 音頻信號的獲取與處理

一、實驗目的

1.熟悉多媒體素材聲音的采集和制作; 2.了解多媒體聲音的基本構成要素;

3.練習使用多媒體聲音的錄制、編輯和合成軟件。

二、實驗設備

1.安裝有Cool Edit Pro軟件和windows操作系統的微機系統; 2.麥克風和耳機。

三、實驗內容及步驟

通過錄音機將本人聲音錄入,并用Cool Edit軟件處理聲音;去除聲音文件的噪聲;聲音文件添加混響效果;進行淡入淡出處理;合成聲音文件。步驟: 1.打開錄音機,通過麥克風錄制一段語音信號作為自我介紹。

2.用Cool Edit軟件加載錄音機的聲音,并且將背景音樂“背景音樂-輕柔.MP3”也加載于其中,試聽兩個文件共同播放的效果,并且調整二者音量大小,使共同播放時二者均能聽清。3.對他降噪,去除其中的雜音。

4.選擇所給出的原始錄音文件,將其與本人所錄的音樂按字剪輯,組合成一個新的音頻文件,并做降噪等處理,保存成一個新的文件。5.添加一些音效。

6.對背景音樂進行淡入淡出處理。7.生成的聲音合成,輸出一個合成文件。

四、思考題

1. 數字音頻通常使用的采樣率為多少?

標準采樣頻率為44.1KHZ,量化位數為16位,立體聲;常用的有8kHz , 11.025kHz, 22.05, kHz 16kHz, 44.1kHz, 48kHz等。

2. 請舉出三種多媒體音頻技術中常用的存儲聲音信息的文件格式?

CD文件、MP3文件、WAV文件、VOC文件、MIDI文件、AIF文件、SNO文件和RMI文件等

3. 怎樣使用Cool Edit進行混音處理?

選擇“ 效果 ”,“ 常用效果器 ”里面的 “ 混響 ”“ 簡易混響 ”“ 完美混響”等。

4.使用Cool Edit混音處理后的聲音文件如果出現背景音樂過大或過小的問題,如何解決此問題?

在伴奏音軌點右鍵,選音軌音量適當調節。

實驗三 波形音頻播放器

一、實驗目的

1.了解Wave文件格式,并學習Windows下用MCI函數播放Wave文件。2.熟悉多媒體開發工具——Visual C++。3.制作波形音頻播放器。

二、實驗內容及要求

1.用VC建立應用程序框架:

a)菜單,點擊新建 b)編制應用程序界面

c)點擊查看?建立類向導,在Message Maps中建立相應的消息函數OnOpen(), OnPlay(), OnRecord(), OnSave(), OnStop(),點擊確定。

2.建立處理波形音頻的類CWaveAudio 3.加入所需的功能: a)在CWavePlayerDlg類中加入成員變量

b)在BOOL CWavePlayerDlg::OnInitDialog()中進行初始化

c)在OnOpen(), OnPlay(), OnRecord(), OnSave(), OnStop()中添加代碼 4.實驗注意事項:

a)調試程序時,Ctrl+F7 為Compile,Build為F7,運行時按F5。b)注意可重用類CwaveAudio的設計。c)熟練掌握MCI多媒體函數的應用。

d)編譯時,菜單選中“項目”?“設置”,要在庫的鏈接中加入winmm.lib

實驗成果如下:

思考題

1.什么是MCI接口?簡述MCI所囊括的內容。

MCI(Media Control Interface),即媒體控制接口,向基于Windows操作系統的應用程序提供了高層次的控制媒體設備接口的能力。MCI接口包括了CDAudio(激光唱機)、Scanner(圖像掃描儀)、VCR(磁帶錄像機)、Videodisc(激光視盤機)、DAT(數字化磁帶音頻播放機)、DigitalVideo(窗口中的數字視頻)、Overlay(窗口中的模擬視頻疊加設備)、MMMovie(多媒體影片演播器)、Sequencer(MIDI音序設備)、WaveAudio(波形音頻設備)、Other(未定義的MCI設備)等多媒體的主要產品。2.Windows下播放波形文件可采用幾種方法?各有什么優缺點?

Windows下波形文件有四種播放方法。

MessageBeep播放方式,sndPlaySound播放方式,MCI播放方式,WaveOut播放方式。

波形文件的MessageBeep播放方式原理簡單,操作靈活,不需聲卡也能發出鳴叫聲。但該方法僅適用于播放較短的波形文件,且波形文件必須要位于Windows目錄下。

sndPlaySound播放方式功能很強,可以播放磁盤文件或內存中的波形數 據,還可以將波形文件作為資源來播放。但該方法有很大局限性,播放對象是比較小的文件(100KB)以內,其次,需要將幾個波形文件連續播放時,不能體現出Windows的優越性,CPU利用率低。

MCI播放方式提供了一個標準接口,將聲卡,視卡,CD激光唱片等當做一個設備去處理。但代碼較長,必須用后釋放句柄。

WaveOut是最低層的播放方式,能控制產生的聲音(如音量,放音速度,音調)已達到音響硬件功能極限。但是代碼量非常大,且需熟悉RIFF文件結構。3.簡述Windows下多媒體程序開發的特點。

Windows的API對很多多媒體內容都可以支持。此外,directShow是非常重要的多媒體開發工具。Windows Media就是基于DirectShow的。

數字視頻播放器

一、實驗目的

1.進一步掌握MCI函數的應用。

2.制作數字視頻播放器,并具有以下功能:打開視頻播放設備,播放視頻文件,可靜態觀看每一幀視頻,并且可設置播放速度,還能在全屏播放與正常播放之間轉換。

二、實驗內容及要求

1.如實驗3建立應用程序框架 2.制作應用程序界面

a)制作對話框

在應用程序中插入一個對話框資源,用來設置播放速度,其ID設為IDD_SPEED: 還需向應用程序中插入一個對話框資源,用做視頻輸出窗口,ID為IDD_DISPLAY。

b)制作菜單

插入一個菜單資源,將ID設為IDR_MAINFRAME。

在你的主對話框的屬性中的菜單項中,選中IDR_MAINFRAME 現在編譯一下,就得到了我們所要的界面。c)添加消息處理函數 3.完成應用程序功能設計

a)將已設計好的類Cvideo加到工程中來 b)初始化主對話框

c)完成消息函數OnTimer, OnOpen, OnPlay, OnStop, OnPause,OnPre, OnNext, OnSound, OnLoop, OnFullScreen, OnSpeed 現在編譯執行,視頻播放器便完成了。

實驗五 視頻編輯實驗

一、實驗目的

1.熟悉PREMIERE對視頻的處理(視頻的剪輯和編輯); 2.熟悉PREMIERE的過渡效果和濾鏡效果

二、實驗內容及要求

1.編輯一段視頻圖像并制作字幕效果 連接幾段剪輯(test1): a)創建一個新節目 i.選擇File>New>Project命令。在New Project Settings對話框中,以自己學號和姓名命名工程文件名稱。ii.單擊Next打開New Project Settings對話框中的選擇中國的PAL制式,標準48KHz。

b)導入原始剪輯 i.ii.選擇File>Import>File,打開Import對話框,選擇你的文件目錄。載入文件出現在Project窗口中。對于導入的每個文件,節目窗口都列出了它的名稱、類別、持續時間和畫面大小等信息。保存之。

c)創建初稿 i.如果Timeline窗口沒有打開,則選擇Windows>Timeline.只有把導入的剪輯放入Timeline中,它們才能成為影像節目的一部分。ii.再打開文件時一定要注意序列的設置和素材的相匹配,否則無法打開文件,最好利用將視頻文件拖至“新建分項”的圖標上,然后在Project窗口中選擇“中南大學宣傳片.avi ”剪輯,并把他拖進Video 1A軌道中。拖動時,剪輯呈現為一個黑框,要確保剪輯黑框左端與Video 1A軌道左端對齊,然后釋放鼠標。iii.選擇蒲公英-無聲.avi剪輯,并把他拖進Video 1A軌道中,這次要把它正好放在中南大學宣傳片.avi后面,這樣使二者首尾連接。

裁剪剪輯(test2)a)首先確保Timeline窗口和Monitor窗口都是可見的,而且沒有重疊,單擊Timeline窗口標題欄激活該窗口。

b)剪輯一個剪輯包括設置一個新的切入點、切出點或兩者都設。切入點就是剪輯開始的陣,切出點就是剪輯最后的幀。

c)找到切入點,在源視圖下,拖動往復滑塊看到完成旅程,單擊切出點按鈕,然后使用Apply按鈕即可。

d)裁剪掉的區域并沒有被刪除,Premiere僅僅隱藏了被裁剪的幀,使之不出現在Timeline窗口中,并且在預覽或導出影像節目中也不再出現,把剪輯片斷建成一體。

2.過渡效果和濾鏡效果 過渡效果(test3)a)擴展Video 1軌道成Video 1A、T和Video 1B軌道,并使兩剪輯有部分重疊。由于過渡效果對兩個重疊的部分才起作用,只有Video 1 track擴展的時候,才可以在兩個素材重疊的部分添加過渡效果,注意素材重疊部分不包含重要的幀畫面。

b)拖動中南大學宣傳片.avi到Video 1A軌道,蒲公英-無聲.avi到Video 1B軌道,并使兩剪輯有部分重疊。

c)如果Transitions窗口沒打開,選擇Windows Show Transitions,打開Transitions窗口.d)從過渡效果調色板中選中所要的過渡效果。過渡效果的長度將自動與重疊部分的長度相吻合。

e)用選擇工具選擇和拖動過渡效果的邊緣,已拉長和縮短過渡效果。為了給過渡效果重新定位,則可以拖動過渡效果本身。

f)按住Alt鍵,然后在Timeline標尺中擦抹以移動編輯線橫跨過渡部分。這時指針變成一個小箭頭,表示正在預覽效果,預覽在監視器窗口的節目視圖中進行。濾鏡效果(test4)

a)在project窗口中,用鼠標把avi剪輯aif文件分別拖入Timeline窗口 中的Video視軌和audio音軌中,并調整好工作區域。

b)選擇Windows>show video effects。在出現的Video對話框中選擇需要的濾鏡效果。

c)用鼠標把Camera Blur拖動到Timeline的avi上,點擊右鍵,此時,就能在effect controls對話框中,看到濾鏡效果控制,進行操作。d)對于音頻用對于視頻同樣的方法進行處理。3.添加字幕

字幕分為靜態字幕和動態字幕,在制作視頻時,字幕要隨著視頻的播放顯示。4.其他效果

作品截圖

實驗六 綜合實驗

一、實驗目的

將之前所學過的多媒體實驗技巧融會貫通,制作成綜合性的、有自己特色的成果。

二、實驗內容及要求

制作一段主題為“我在中南”或“我在…”的視頻,時長不少于1分鐘。收集中南大學相關照片,使用Photoshop軟件對圖片或照片進行美化,將本人的照片嵌入圖片 視頻截圖

第二篇:中南大學 數據結構實驗報告

數據結構實驗報告

專業班級: 指導老師:余臘生 姓

名: 學

號: 實驗一 單鏈表的基本操作的實現

一、實驗目的

掌握單鏈表的基本操作:建立、插入、刪除、查找等運算。

二、實驗儀器

安裝VC++的PC機。

三、實驗原理

利用線性表的特性以及其鏈式存儲結構特點對線性表進行相關操作。

四、實驗內容

程序中演示了單鏈表的創建、插入、刪除和查找。程序如下:

#include #include #include #include typedef struct node { int data;struct node *next;} NODE;/******************************************/ NODE *Create(){ NODE *p,*head;int x;head=(NODE *)malloc(sizeof(NODE));head->next=NULL;printf(“Input data,-1 to End!n”);

scanf(“%d”,&x);while(x!=-1){ p=(NODE *)malloc(sizeof(NODE));p->data=x;p->next=head->next;head->next=p;scanf(“%d”,&x);} return(head);} /******************************************/ void Output(NODE *head){ NODE *p;p=head;printf(“Begin to dump the LinkList...n”);while(p->next!=NULL){ printf(“->%d”,p->next->data);p=p->next;} printf(“nThe LinkList ended!n”);} /******************************************/ int Listlen(NODE *head){ int i=0;NODE *p=head;while(p->next!=NULL){ i++;p=p->next;} return(i);} /******************************************/ int Get(NODE *head,int i){ int j=0;NODE *p=head;while(p->next&&jnext;} if(!p->next||j>i)return(0);else return(p->data);} /******************************************/ void Del(NODE *head,int i){ NODE *p=head;int j=0;while(p->next&&jnext;} if(!p->next||j>i-1)printf(“the position is wrongn”);else p->next=p->next->next;} /******************************************/ void Ins(NODE *head,int i,int e){ NODE *p=head,*q;int j=0;while(p->next&&jnext;} if(!p->next&&j>i-1)printf(“Wrong positionn”);else { q=(NODE *)malloc(sizeof(NODE));q->data=e;q->next=p->next;p->next=q;} } /******************************************/ main(){ NODE *head;int length;int i,element;system(“CLS”);head=Create();Output(head);length=Listlen(head);printf(“the length of the link is %dn”,length);printf(“input the order :n”);scanf(“%d”,&i);element=Get(head,i);printf(“the element of the order is %dn”,element);printf(“input the del position n”);scanf(“%d”,&i);Del(head,i);Output(head);printf(“Input the insert posion and element:n”);scanf(“%d%d”,&i,&element);Ins(head,i,element);Output(head);getch();}

五、數據記錄及處理

1、運行程序,輸入下面一組數據: 93 94 12 13 20 14 鏈表順序:14 20 13 12 94 93

2、刪除第二個數據結點,在第一個位置插入數據20。

運行結果如下: 插入結果:14 13 12 94 93 刪除結果:20 14 13 12 94 93 運行結果截圖:

實驗二 棧和隊列的實現

一、目的和要求

1.理解隊列和棧的順序存儲結構和鏈式存儲結構。通過本實驗,熟悉隊列、棧的結構特點; 2.熟悉隊列、棧結構上的操作與算法的實現。

二、實驗內容

1.隊列的基本操作和應用。2.棧的基本操作和應用。

三、儀器、設備和材料

1.適合實驗要求的計算機系統。2.VC++編程平臺。

四、實驗原理

隊列與棧是一種操作受限制的線性表,在了解線性表的基本原理的基礎上,理解與完成此項實驗。

五、實驗步驟

1.采用隊列的順序存儲結構。

2.用菜單的形式完成隊列的建立,出隊,入隊等基本操作。3.采用棧的鏈式存儲結構。

4.用菜單的形式完成棧的出棧、入棧等基本操作。

六、程序算法

#include #include #define OVERFLOW-2 #define ERROR 0 #define OK 1 #define MAX 100 //棧的最大值 typedef int SElemType;typedef int QElemType;typedef struct {SElemType *base;

SElemType *top;}SqStack;

SqStack InitStacka()//順序存儲實現棧的初始化 {SqStack S;S.base=(SElemType *)malloc(MAX*sizeof(SElemType));if(!S.base)exit(OVERFLOW);S.top=S.base;return(S);}

void Pusha(SqStack &S,int x)//順序存儲實現棧的入棧操作 {if(S.top-S.base>=MAX)exit(OVERFLOW);*S.top++=x;}

void Popa(SqStack &S)//順序存儲實現棧的出棧操作 {SElemType *p;int x;if(S.top==S.base)return;else {p=S.top;x=*--S.top;printf(“t刪除的棧頂元素是%dnt出棧操作完成后的棧為:n”,x);} } void printa(SqStack S)//輸出 {SElemType *p;p=S.base;printf(“t”);while(p!=S.top){printf(“%d ”,*(p++));} printf(“n”);}

typedef struct SqNode {SElemType data;SqNode *Link;}*Sqptr,NODE;typedef struct {Sqptr top;}Stack;

Stack InitStackb()//鏈式存儲實現棧的初始化 {Stack S;S.top=(Sqptr)malloc(sizeof(NODE));if(!S.top)exit(OVERFLOW);S.top->Link=NULL;return(S);}

void Pushb(Stack &S,int x)//鏈式存儲實現棧的入棧操作 {Sqptr p;p=(Sqptr)malloc(sizeof(NODE));if(!p)return;p->data=x;p->Link=S.top->Link;S.top->Link=p;}

void Popb(Stack &S)//鏈式存儲實現棧的出棧操作 {int x;Sqptr p;if(S.top->Link==NULL)return;else {p=S.top->Link;

x=p->data;

S.top->Link=p->Link;

printf(“t刪除的棧頂元素是%dn”,x);

free(p);} }

typedef struct QNode {QElemType data;struct QNode *next;}*QueuePtr,QNode;typedef struct {QueuePtr front;QueuePtr rear;}LinkQueue;LinkQueue InitQueue()//鏈式存儲實現隊列的初始化 {LinkQueue Q;Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));if(!Q.front)exit(OVERFLOW);Q.front->next=NULL;

return(Q);} void EnQueue(LinkQueue &Q,QElemType x)//鏈式存儲實現隊列的入隊 {QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode));if(!p)exit(OVERFLOW);p->data=x;p->next=NULL;Q.rear->next=p;Q.rear=p;} void DeQueue(LinkQueue &Q)//鏈式存儲實現隊列的出隊 {int x;if(Q.front==Q.rear)return;QueuePtr p;p=Q.front->next;x=p->data;printf(“t刪除的隊頭元素是:%dn”,x);Q.front->next=p->next;if(Q.rear==p)Q.rear=Q.front;free(p);return;}

typedef struct {SElemType *base;int front,rear;}SqQueue;SqQueue InitQueueb()//順序存儲實現隊列的初始化 {SqQueue S;S.base=(SElemType *)malloc(MAX*sizeof(SElemType));if(!S.base)exit(OVERFLOW);S.front=S.rear=0;return(S);} void EnQueueb(SqQueue &S,int x)

//順序存儲實現隊列的入隊 {if((S.rear+1)%MAX==S.front)return;S.base[S.rear]=x;S.rear=(S.rear+1)%MAX;} void DeQueueb(SqQueue &S)//順序存儲實現隊列的出隊 {int x;if(S.front==S.rear)return;x=S.base[S.front];S.front=(S.front+1)%MAX;printf(“t刪除的隊頭元素是:%dn”,x);} void main(){int choice;int n,x;printf(“nn”);printf(“t1.采用鏈式存儲實現棧的初始化、入棧、出棧操作n”);printf(“t2.采用順序存儲實現棧的初始化、入棧、出棧操作n”);printf(“t3.采用鏈式存儲實現隊列的初始化、入隊、出隊操作n”);printf(“t4.采用順序存儲實現隊列的初始化、入隊、出隊操作n”);printf(“t請選擇:”);scanf(“%d”,&choice);switch(choice){case 1:Stack Sa;

printf(“t1.鏈式存儲實現棧的初始化n”);

printf(“t2.鏈式存儲實現棧的入棧操作n”);

printf(“t3.鏈式存儲實現棧的出棧操作n”);

while(1){

printf(“t請選擇:”);

scanf(“%d”,&n);

switch(n)

{case 1:Sa=InitStackb();

printf(“t鏈式存儲棧的初始化完成!n”);break;

case 2:printf(“t以'0'結束n”);printf(“t”);

scanf(“%d”,&x);

while(x){

Pushb(Sa,x);scanf(“%d”,&x);}

printf(“t鏈式存儲棧的入棧操作完成!n”);break;

case 3:Popb(Sa);break;}}break;

case 2:SqStack S;

printf(“t1.順序存儲實現棧的初始化n”);

printf(“t2.順序存儲實現棧的入棧操作n”);

printf(“t3.順序存儲實現棧的出棧操作n”);

while(1){

printf(“t請選擇:”);

scanf(“%d”,&n);

switch(n)

{ case 1:S=InitStacka();

printf(“t順序存儲棧的初始化完成!n”);break;

case 2:printf(“t以'0'結束n”);

printf(“t”);

scanf(“%d”,&x);

while(x){

Pusha(S,x);

scanf(“%d”,&x);}

printf(“t順序存儲棧的入棧操作完成!n”);

printa(S);break;

case 3:Popa(S);

printa(S);break;}}break;

case 3:LinkQueue Q;

printf(“t1.鏈式存儲實現隊的初始化n”);

printf(“t2.鏈式存儲實現隊的入棧操作n”);

printf(“t3.鏈式存儲實現隊的出棧操作n”);

while(1){

printf(“t請選擇:”);

scanf(“%d”,&n);

switch(n)

{

case 1:Q=InitQueue();

printf(“t鏈式存儲隊的初始化完成!n”);break;

case 2:printf(“t以'0'結束n”);printf(“t”);scanf(“%d”,&x);

while(x){

EnQueue(Q,x);scanf(“%d”,&x);}

printf(“t鏈式存儲隊的入棧操作完成!n”);break;

case 3:DeQueue(Q);break;}}break;

case 4:SqQueue Sv;

printf(“t1.順序存儲實現隊的初始化n”);

printf(“t2.順序存儲實現隊的入棧操作n”);

printf(“t3.順序存儲實現隊的出棧操作n”);

while(1){

printf(“t請選擇:”);

scanf(“%d”,&n);

switch(n)

{case 1:Sv=InitQueueb();

printf(“t鏈式存儲棧的初始化完成!n”);break;

case 2:printf(“t以'0'結束n”);printf(“t”);scanf(“%d”,&x);

while(x){

EnQueueb(Sv,x);scanf(“%d”,&x);}

printf(“t鏈式存儲棧的入棧操作完成!n”);break;

case 3: DeQueueb(Sv);break;}}break;} } 程序調試截圖:

1.采用鏈式存儲實現棧的初始化、入棧、出棧操作

2.采用順序存儲實現棧的初始化、入棧、出棧操作

3.采用鏈式存儲實現隊列的初始化、入隊、出隊操作

4.采用順序存儲實現隊列的初始化、入隊、出隊操作

七、心得體會

實踐才能出真知,在通過了上機操作后,才發現了許多在平時上理論課的時候沒有想到的方方面面,編寫程序時發現很多語法的錯誤,以及很多英語單詞的記不熟,記錯,程序函數錯用等等,我想需要在以后多多練習,才能逐步解決這些問題。實驗三 二叉樹的建立和遍歷

一、目的和要求

1、了解二叉樹的建立的方法及其遍歷的順序,熟悉二叉樹的三種遍歷

2、檢驗輸入的數據是否可以構成一顆二叉樹

二、實驗內容

1.二叉樹的建立和遍歷

三、儀器、設備和材料

1.適合實驗要求的計算機系統。2.VC++編程平臺。

四、實驗的描述和算法

1、實驗描述

二叉樹的建立首先要建立一個二叉鏈表的結構體,包含根節點和左右子樹。因為耳熟的每一個左右子樹又是一顆二叉樹,所以可以用遞歸的方法來建立其左右子樹。二叉樹的遍歷是一種把二叉樹的每一個節點訪問完并輸出的過程,遍歷時根結點與左右孩子的輸出順序構成了不同的遍歷方法,這個過程需要按照不同的遍歷的方法,先輸出根結點還是先輸出左右孩子,可以用選擇語句實現。

2、算法

#include #include using namespace std;template struct BinTreeNode

//二叉樹結點類定義 { T data;

//數據域

BinTreeNode *leftChild,*rightChild;

//左子女、右子女域

BinTreeNode(T x=T(),BinTreeNode* l =NULL,BinTreeNode* r = NULL)

:data(x),leftChild(l),rightChild(r){}

//可選擇參數的默認構造函數 };//-----------template void PreOrder_2(BinTreeNode *p)

//非遞歸前序遍歷 { stack * > S;while(p!=NULL ||!S.empty()){

while(p!=NULL)

{

cout<

data;

//訪問根結點

S.push(p);

p=p->leftChild;

//遍歷指針進到左子女結點

}

if(!S.empty())

//棧不空時退棧

{

p=S.top();

S.pop();

p = p->rightChild;

//遍歷指針進到右子女結點

} } } //--template void InOrder_2(BinTreeNode *p)

//非遞歸中序遍歷 { stack* > S;do {

while(p!=NULL)

//遍歷指針未到最左下的結點,不空

{

S.push(p);

p=p->leftChild;

}

if(!S.empty())

//棧不空時退棧

{

p=S.top();

S.pop();

cout<

data;

p=p->rightChild;

} } while(p!=NULL ||!S.empty());}

//----template void PostOrder_2(BinTreeNode *p)//非遞歸后序遍歷 { stack * > S;stack tag;//定義一個新的棧用來保存tag域判別根結點的左右子樹是否均遍歷過

while(p!= NULL ||!S.empty())

//左子樹經過結點加L進棧

{

while(p!=NULL)

{

S.push(p);//首先將t和tag為入棧,遍歷左子樹

tag.push(0);//遍歷左子樹前的現場保護

p=p->leftChild;

}

while(!S.empty()&& tag.top()==1)

{

p=S.top();

S.pop();

tag.pop();

cout<

data;//最后訪問根結點。

}

if(!S.empty())

{

tag.pop();

tag.push(1);//遍歷右子樹前的現場保護,修改棧頂tag為,遍歷右子樹

p=S.top();

// 取棧頂保存的指針

p=p->rightChild;

}

else

break;

} } template void InOrder_1(BinTreeNode * subTree){//遞歸函數:中序次序遍歷以subTree為根的子樹。

if(subTree!=NULL)

//NULL是遞歸終止條件

{

InOrder_1(subTree->leftChild);//中序遍歷根的左子樹

cout<data;

//訪問根結點

InOrder_1(subTree->rightChild);//中序遍歷根的右子樹

} } template void PreOrder_1(BinTreeNode * subTree){//遞歸函數:前序遍歷以subTree為根的二叉樹。if(subTree!=NULL)

//遞歸結束條件

{

cout<data;//訪問根結點

PreOrder_1(subTree->leftChild);

//前序遍歷根的左子樹

PreOrder_1(subTree->rightChild);

//前序遍歷根的右子樹

} } template void PostOrder_1(BinTreeNode * subTree){//遞歸函數:后序次序遍歷以subTree為根的子樹。

if(subTree!=NULL)

//NULL是遞歸終止條件

{

PostOrder_1(subTree->leftChild);//后序遍歷根的左子樹

PostOrder_1(subTree->rightChild);//后序遍歷根的右子樹

cout<data;

//訪問根結點

} } //------------template void CreateBinTree(BinTreeNode * & subTree){//遞歸方式建立二叉樹

T item;

cin>>item;

if(item!=-1)

{

subTree = new BinTreeNode();

if(subTree == NULL)

{

cerr<<“存儲分配錯!”<

exit(1);

}

subTree->data = item;

CreateBinTree(subTree->leftChild);//遞歸建立左子樹

CreateBinTree(subTree->rightChild);//遞歸建立右子樹

}

else subTree = NULL;

//封閉指向空子樹的指針 } int main(){

BinTreeNode * Tree = NULL;cout<<“請輸入每個結點,回車確認,并以-1結束:”;CreateBinTree(Tree);

cout<<“先序遍歷二叉樹結果:”;

PreOrder_1(Tree);

cout<

cout<<“后序遍歷二叉樹結果:”;

PostOrder_1(Tree);cout<

cout<<“非遞歸中序遍歷二叉樹結果:”;InOrder_2(Tree);cout<

3、實驗程序運行截圖

實驗四 散列法查找和排序

一、目的和要求

1.用散列法實現順序查找,折半查找。

二、儀器、設備和材料

1.適合實驗要求的計算機系統。2.VC++編程平臺。

三、實驗步驟 和程序

1、順序查找 #include #include #include #define m

#define NULLKEY 0 typedef int KeyType;

/* 假設關鍵字為整型 */ typedef struct { KeyType key;}RecordType;typedef RecordType HashTable[m];int hash(KeyType k)/*除留余數法構造哈希函數*/ { int h;h = k%m;return h;} int HashSearch(HashTable ht, KeyType K)/*哈希查找*/ { int h0;int i;int hi;h0=hash(K);if(ht[h0].key==NULLKEY)

return(-1);else

if(ht[h0].key==K)

return(h0);

else

/* 用線性探測再散列解決沖突 */

{

for(i=1;i<=m-1;i++)

{

hi=(h0+i)% m;

if(ht[hi].key==NULLKEY)

return(-1);

else

if(ht[hi].key==K)

return(hi);

}

return(-1);

}

} void main(){ int i,j;int n;int p;int hj;int k;int result;HashTable ht;for(i=0;i

ht[i].key = NULLKEY;printf(“請輸入哈希表的元素個數:”);scanf(“%d”,&n);for(i=1;i<=n;i++){

printf(“請輸入第%d個元素:”,i);

fflush(stdin);

scanf(“%d”,&p);

j = hash(p);

if(ht[j].key == NULLKEY)

ht[j].key = p;

else

{

for(i=1;i<=m-1;i++)

{

hj=(j+i)% m;

if(ht[hj].key==NULLKEY)

{

ht[j].key = p;

}

i = m;

}

}

} } printf(“請輸入要查找的元素:”);fflush(stdin);scanf(“%d”,&k);result = HashSearch(ht,k);if(result ==-1)printf(“未找到!n”);else printf(“元素位置為%dn”,result);system(“pause”);運行結果如下:

2、折半查找

#include #define N 21 void main(void){ int a[N];int i,n,num;int top,bottom,mid;int flag=1;int loc=-1;printf(“你想在多少個數中進行折半查找,請輸入(1--20):”);scanf(“%d”,&n);while(n<1||n>20){

printf(“你輸入的數不正確,請重新輸入:n”);

printf(“你想在多少個數中進行折半查找,請輸入(1--20):”);

scanf(“%d”,&n);} printf(“請你輸入一個整數a[1]:”);scanf(“%d”,&a[1]);i=2;while(i<=n){

printf(“請你輸入一個整數a[%d]:”,i);

scanf(“%d”,&a[i]);

i++;} printf(“n輸出表列n”);for(i=1;i<=n;i++){ printf(“%6d”,a[i]);} printf(“n”);printf(“請你輸入要查找的數:”);scanf(“%d”,&num);flag=1;top=n;bottom=1;mid=(top+bottom)/2;while(flag){ printf(“top=%d,bottom=%d,mid=%d,a[i]=%dn”,top,bottom,mid,mid,a[mid]);if((num>a[top])||(num

loc=-1;

flag=0;} else if(a[mid]==num){

loc=mid;

printf(“找到數

%6d的位置%2dn”,num,loc);

break;} else if(a[mid]>num){

top=mid-1;

mid=(top+bottom)/2;} else if(a[mid]

bottom=mid+1;

mid=(top+bottom)/2;} } if(loc==-1){ printf(“%d這個數在表列中沒有找到。n”,num);} } 運行結果如下:

第三篇:中南大學 網絡安全實驗報告

CENTRAL SOUTH UNIVERSITY

網 絡 安 全 實 驗 報 告

學生姓名

專業班級

學 號

學 院 信息科學與工程學院 指導教師 劉嬪

實驗時間 2014年12月 實驗一 CA證書與SSL連接

應用場景

在訪問Web 站點時,如果沒有較強的安全措施,用戶訪問的數據是可以使用網絡工具 捕獲并分析出來的。在Web 站點的身份驗證中,有一種基本身份驗證,要求用戶訪問輸入 用戶名和密碼時,是以明文形式發送密碼的,蓄意破壞安全性的人可以使用協議分析程序破 譯出用戶名和密碼。那我們該如果避免呢?可利用SSL 通信協議,在Web 服務器上啟用安 全通道以實現高安全性。

SSL 協議位于TCP/IP 協議與各種應用層協議之間,為數據通訊提供安全支持。SSL 協 議可分為兩層: SSL 記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。SSL 握手協議(SSL Handshake Protocol):它建立在SSL 記錄協議之上,用于在實際的數據傳輸開始前,通訊雙 方進行身份認證、協商加密算法、交換加密密鑰等。每一個Windows Server 2003 證書頒發 機構都有可供用戶和管理員使用的網頁。

實驗目標

??掌握在Windows Server 2003 下獨立根CA 的安裝和使用。??使用WEB 方式申請證書和安裝證書。??建立SSL 網站。

??分析SSL 網站的數據包特點。

實驗拓撲

VM Client

VM Server

實驗環境

虛擬機:Windows Server 2003,Windows XP,Wireshark 抓包軟件。

實驗過程指導

任務一:windows server 2003 環境下獨立根CA 的安裝及使用

1、啟動Windows Server 2003 和Windows XP,配置其IP,使其在同一局域網網段。

2、在Windows Server 2003 中,選擇【開始】|【控制面板】|【添加和刪除程序】,在彈出窗

口中選擇【添加和刪除windows 組件】,在【組件】列表框中選擇【證書服務】,再單擊【下 一步】按鈕,如下圖所示。

3、在彈出的窗口中選擇【獨立根CA】單選按鈕,單擊【下一步】按鈕,在彈出窗口中按 要求依次填入CA 所要求的信息,單擊【下一步】按鈕,如下圖所示。

4、繼續選擇【證書數據庫】、【數據庫日志】和配置信息的安裝、存放路徑,如下圖所示。

單擊【下一步】按鈕。安裝的時候,可能會彈出如下窗口,為了實驗方便,已經把I386 文 件夾復制到C:下,選擇【瀏覽】,選擇文件夾“C:I386”,點【確定】,完成安裝。

5、選擇【開始】|【程序】|【管理工具】,可以找到【證書頒發機構】,說明CA 的安裝已經

完成,如下圖所示。

6、從同一局域網中的另外一臺XP 開啟IE 瀏覽器,輸入http://windows2003 的IP/certsrv/, 選中【申請一個證書】,如下圖所示,在彈出的頁面中選擇【web 瀏覽器證書】。

7、在彈出窗口中填寫用戶的身份信息,完成后進行【提交】。此種情況下,IE 瀏覽器采用 默認的加密算法生成公鑰對,私鑰保存在本地計算機中,公鑰和用戶身份信息按照標準的格式發給CA 服務器,如圖所示,單擊【是】,進入下一步。CA 服務器響應后,彈出證書申請 成功頁面,如下圖所示。

8、在根CA 所在的計算機上,選擇【開始】|【程序】|【管理工具】|【證書頒發機構】,上

面申請的證書便會出現在窗口右邊,選擇證書單擊右鍵,選擇【所有任務】|【頒發】,進行 證書頒發,如下圖所示。證書頒發后將從【掛起的申請】文件夾轉入【頒發的證書】文件夾 中,表示證書頒發完成。

9、在申請證書的計算機上打開IE,輸入http://windows2003 的IP/certsrv/,進入證書申請頁

面,選擇【查看掛起的證書申請狀態】,彈出的頁面中選擇一個已經提交的證書申請,如下 圖所示。選擇安裝此證書。

10、現在驗證此CA 系統頒發的新證書是否可信,為此需要安裝CA 系統的根證書,進入證書申請主頁面,選擇當前的CA 證書進行下載,并保存到合適路徑,如下圖所示。

11、下載完畢之后,在證書的保存目錄中查看證書信息,單擊【安裝證書】按鈕,進入證書 導入向導,按照默認的配置完成證書的導入,導入成功后,單擊【確定】按鈕,之后完成。

任務二:基于Web 的SSL 連接設置

1、在XP 中,左下角【開始】,打開【Wireshark】,并點擊開始抓包的按鈕。打開IE 瀏覽器,輸入網址http://windows2003 的IP/?id=1(比如:http://192.168.1.130/?id=1),然后保存Wireshark的抓包結果1。

2、選擇【開始】|【程序】|【管理工具】|【IIS(Internet 信息服務)管理器】,在彈出窗口

右鍵單擊【默認網站】,彈出的快捷菜單中選擇【屬性】選項,如下圖所示。

3、在彈出窗口內選擇【目錄安全性】標簽,單擊【安全通信】中的【服務器證書】按鈕,如下圖所示。

4、彈出【IIS 證書向導】窗口,選中【新建證書】復選項,一直單擊【下一步】按鈕,輸入自定義的名稱,如下圖所示。填寫相應的信息后,單擊【下一步】按鈕。

5、彈出【請求文件摘要】窗口,確認后單擊【下一步】按鈕,接著單擊【完成】按鈕,完 成服務器端證書配置,如下圖所示。

6、打開IE 瀏覽器(windows2003 中的),進入證書申請主界面,如下圖所示。

7、在出現的網頁中選擇【高級證書申請】,如圖所示,在出現的網頁中單擊第二個選項【base64 編碼】。打開剛才IIS 證書向導生成的請求文件,(默認路徑C:certreq.txt),復制并粘貼文件

內容到第一個文本框,如下圖所示,單擊【提交】按鈕,轉到完成提交后的頁面。

8、回到首頁,選擇【查看掛起的證書申請狀態】,彈出的頁面中選擇一個已經提交的證書申 請,如下圖所示。選擇【Base 64 編碼】,點擊【下載證書】,【保存】certnew.cer 文件到桌面。

9、選擇【開始】|【程序】|【管理工具】|【IIS(Internet 信息服務)管理器】,在彈出窗口

右鍵單擊【默認網站】,彈出的快捷菜單中選擇【屬性】選項,在彈出窗口內選擇【目錄安 全性】標簽,選擇【服務器證書】,選擇【下一步】,【處理掛起的請求并安裝證書】選擇【下 一步】,【瀏覽】選擇剛才保存的certnew.cer 文件,如下圖所示?!鞠乱徊健俊鞠乱徊健俊就瓿伞?。

10、還是在【目錄安全性】下,選擇【安全通信】下的【編輯】,在下如圖所示的彈出窗口 中選中【要求安全通道(SSL)】復選項,并在【客戶端證書】欄中選中【接受客戶端證書】 復選項,再單擊【確定】按鈕。返回【目錄安全性】面板,單擊【應用】按鈕及【確定】按

鈕,完成配置。

11、在XP 系統打開瀏覽器,輸入服務器IP 地址,進入證書申請主頁面,此時會顯示錯誤 信息頁面,要求采用https 的方式連接服務器,如圖所示。

12、把http 改成https 繼續訪問,此時瀏覽器提示你要安裝證書,安裝完證書后,就可以正 常使用了。、再次打開Wireshark,并點擊開始抓包的按鈕。打開IE 瀏覽器,輸入網址

https://windows2003 的IP/?id=1(比如:https://192.168.1.130/?id=1),然后保存Wireshark 的抓

包結果2。

14、分析比較抓包結果1 和抓包結果2 中,對IP/?id=1 請求處理的差異。

實驗截圖

1、寫出windows server 2003 下獨立根CA 的配置及應用的過程,將重要的步驟截圖并保存。如上所示,重要的步驟截圖已置于相應步驟下。

2、寫出windows server 2003 下基于Web的SSL連接設置的過程,將重要的步驟截圖并保存。如上所示,重要的步驟截圖已置于相應步驟下。

實驗心得

通過此次實驗,我學會了Wireshark抓包的基本使用方法,學到了很多課本上沒有的新知識,并對課本上的概念有了實際的更深的認識。通過Wireshark所抓到的未使用SSL 連接和使用SSL 連接的信息的對比,我對HTTPS有了一定的了解,對計算機網絡通信中的數據傳輸安全有了大概的認識。

HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。它是一個URI scheme(抽象標識符體系),句法類同http:體系。用于安全的HTTP數據傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默 14 認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統的最初研發由網景公司(Netscape)進行,并內置于其瀏覽器Netscape Navigator中,提供了身份驗證與加密通訊方法?,F在它被廣泛用于萬維網上安全敏感的通訊,例如交易支付方面。它的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性,凡是使用了 https 的網站,都可以通過點擊瀏覽器地址欄的鎖頭標志來查看網站認證之后的真實信息,也可以通過 CA 機構頒發的安全簽章來查詢。

Wireshark所抓到的未使用SSL 連接的http 信息,信息是明文傳輸,而使用SSL連接的https 則具有安全性的ssl加密傳輸協議,更加安全。

實驗二 配置和管理主機防火墻

應用場景

對于Internet 上的系統,不管是什么情況,首先我們要明確一點:網絡是不安全的。因此,雖然創建一個防火墻并不能保證系統100%安全,但卻是絕對必要的。和社會上其它任何事物一樣,Internet 經常會受到一些無聊的或者別有用心的人的干擾,防火墻的目的就是將這類人擋在你的網絡之外,同時使你仍然可以完成自己的工作。

那么構筑怎樣的Linux 防火墻系統才算是足夠安全呢?這是一個很難回答的問題,因為不同的應用環境對安全的要求不一樣。用一句比較恰當而且簡單的話來回答這個問題:用戶了解自己的Linux 系統和設置,并且可以很好地保護好自己的數據和機密文件的安全,這對于該計算機用戶來說就可以稱之為他的計算機有足夠的安全性。

那么到底什么是防火墻呢?防火墻是一個或一組系統,它在網絡之間執行訪問控制策略。實現防火墻的實際方式各不相同,但是在原則上,防火墻可以被認為是這樣一對機制:一種機制是攔阻傳輸流通行,另一種機制是允許傳輸流通過。一些防火墻偏重攔阻傳輸流的通行,而另一些防火墻則偏重允許傳輸流通過。了解有關防火墻的最重要的概念可能就是它實現了一種訪問控制策略。

一般來說,防火墻在配置上是防止來自“外部”世界未經授權的交互式登錄的。這大大有助于防止破壞者登錄到你網絡中的計算機上。一些設計更為精巧的防火墻可以防止來自外部的傳輸流進入內部,但又允許內部的用戶可以自由地與外部通信。如果你切斷防火墻的話,它可以保護你免受網絡上任何類型的攻擊。防火墻的另一個非常重要的特性是可以提供一個單獨的“攔阻點”,在“攔阻點”上設置安全和審計檢查。與計算機系統正受到某些人利用調制解調器撥入攻擊的情況不同,防火墻可以發揮一種有效的“電話監聽”和跟蹤工具的作用。防火墻提供了一種重要的記錄和審計功能;它們經??梢韵蚬芾韱T提供一些情況概要,提供有關通過防火墻的傳輸流的類型和數量,以及有多少次試圖闖入防火墻的企圖等信息。

因此本實驗將介紹如何配置linux 防火墻。

VM Client

VM Server

實驗目標

1.掌握linux 下基本的iptables 知識 2.學會配置iptables VM Windows VM Linux

實驗環境

虛擬機:linux,windowsXP;linux 主機用戶名:root;密碼:root 16 實驗過程指導

一.Iptables 的規則表、鏈結構

1.規則表(iptables管理4個不同的規則表,其功能由獨立的內核模塊實現)filter 表:包含三個鏈INPUT OUTPUT FORWARD nat表:PREROUTING POSTROTING OUTPUT mangle 表:PREROUTING POSTROUTING INPUT OUTPUT FORWARD raw 表:OUTPUT PREROUTING 2.規則鏈

INPUT 鏈當收到訪問防火墻本機的數據包(入站)時,應用此鏈中的規則 OUTPUT鏈當防火墻本機向外發送數據包(出站)時,應用此鏈中的規則 FORWARD鏈收到需要通過防火墻發送給其他地址的數據包,應用此鏈 PREROUTING鏈做路由選擇之前,應用此鏈

POSTROUTING鏈對數據包做路由選擇之后,應用此鏈中的規則

二.數據包的匹配流程

1.規則表之間的優先級 raw mangle nat filter 2.規則鏈之間的優先級

入站數據流向:來自外界的數據包到達防火墻,首先PREROUTING規則鏈處理(是否被修改地址),之后會進行路由選擇(判斷該數據包應該發往何處),如果數據包的目標地址是防火墻本機,那么內核將其傳遞給INPUT 鏈進行處理,通過以后再交給上次的應用程序進行響應。

轉發數據流向:來自外界的數據包到達防火墻后,首先被PREROUTING 規則鏈處理,之后進行路由選擇,如果數據包的目標地址是其他外部地址,則內核將其傳遞給FPRWARD 鏈進行處理,然后再交給POSTROUTIING 規則鏈(是否修改數據包的地址等)進行處理。

出站數據流向:防火墻本身向外部地址發送數據包,首先被OUTPUT 規則鏈處理,之后進行路由選擇,然后交給POSTROUTING 規則鏈(是否修改數據包的地址等)進行處理。3.規則鏈內部各防火墻規則之間的優先順序

依次按第1條規則、第2條規則、第3條規則??的順序進行處理,找到一條能夠匹配的數據包規則,則不再繼續檢查后面的規則(使用LOG記錄日志的規則例外)。如果找不到匹配規則,就按照規則鏈的默認策略進行處理。

三.管理和設置iptables規則

Iptables 的基本語法格式選項名-A-D-I-R

功能及特點

在指定鏈的末尾添加(--append)一條新規則

刪除(--delete)指定鏈中的某一條規則,按規則序號或內容確定要刪除的規則 在指定鏈中插入一條新規則,若未指定插入位置,則默認在鏈的開頭插入 修改、替換指定鏈中的一條規則,按按 17-L-F-X-P-n-v-V-h--line-numbers-N

1.查看規則表

# iptables-L INPUT--line-numbers //查看filter表中INPUT鏈中的所有規則,同時顯示各條規則的順序號

規則序號或內容確定要替換的規則 列出指定鏈中所有的規則進行查看,若未指定鏈名,則列出表中所有鏈的內容 清空指定鏈中的所有規則,若未指定鏈名,則清空表中所有鏈的內容 刪除表中用戶自定義的規則鏈 設置指定鏈的默認策略(大p)

使用數字形式顯示輸出結果,如顯示主機的IP地址而不是主機名

查看規則列表時顯示詳細的信息 查看iptables命令工具的版本信息 查看命令幫助信息

查看規則列表時,同時顯示規則在鏈中的順序號

新建一條用戶自定義的規則鏈

2.刪除、清空規則

# iptables-F //不指定表名時,默認情況filter表

3.設置規則鏈的默認策略

# iptables-t filter-P FORWARD DROP //將filter表中FORWARD規則的默認策略設為DROP # iptables-P OUTPUT ACCEPT //將filter表中OUTPUT規則的默認策略設為ACCEPT 18

四.條件匹配

1.通用(general)條件匹配(直接使用,而不依賴于其他的條件匹配及其擴展)協議匹配(允許使用的協議名包含在/etc/protocols文件中)

# iptables-AINPUT-p icmp–j REJECT //拒絕進入防火墻的所有icmp數據包

地址匹配

拒絕轉發來自192.168.1.11主機的數據,允許轉發來自192.168.0./24網段的數據 # iptables-A FORWARD-s 192.168.1.11-j REJECT

2.隱含(implicit)條件匹配(需要指定的協議匹配為前提,其對應的功能由iptables自動(隱含)的裝載入內核),如果無匹配條件,默認為REJECT。

端口匹配

僅允許系統管理員從202.13.0.0/16網段使用SSH方式遠程登錄防火墻主機 # iptables-A INPUT-p tcp--dport 22-s 202.13.0.0/16-j ACCEPT

五.在進行了上述規則講解與熟悉之后,接下來的步驟進行防火墻規則配置與測試

禁止Windows主機ping防火墻linux主機,但是允許從防火墻上ping其他主機(允許接受ICMP回應數據)

1.配置linux防火墻主機ip地址,如下圖所示:

2.配置windows 主機ip地址,如下圖所示:

3.配置linux 主機防火墻規則,如下圖所示:

4.在此在windows 主機和linux 主機上進行相互ping 測試,測試結果如下圖所示:

windows主機無法ping通linux防火墻主機,但是linux主機可以ping通windows主機。

實驗截圖

如上所示,重要的步驟截圖已置于相應步驟下。

實驗心得

1)如何在linux 主機上配置防火墻規則以防止DDOS 高級?

答:默認的iptables規則是無法過濾DDOS攻擊數據的,我們需要添加過濾規則實現iptables擁有抗DDOS的能力:

屏蔽 SYN_RECV 的連接

-A FORWARD-p tcp-m tcp--tcp-flags FIN,SYN,RST,ACK SYN-m limit--limit 1/sec-j ACCEPT 限制IP碎片,每秒鐘只允許100個碎片,用來防止DoS攻擊-A FORWARD-f-m limit--limit 100/sec--limit-burst 100-j ACCEPT 限制ping包每秒一個,10個后重新開始

-A FORWARD-p icmp-m limit--limit 1/sec--limit-burst 10-j ACCEPT 限制ICMP包回應請求每秒一個

-A FORWARD-p icmp-m icmp--icmp-type 8-m limit--limit 1/sec-j ACCEPT 此處自定義一個表

-A FORWARD-j RH-Firewall-1-INPUT 完全接受 loopback interface 的封包-A RH-Firewall-1-INPUT-i lo-j ACCEPT 允許主機接受 ping-A RH-Firewall-1-INPUT-p icmp-m icmp--icmp-type any-j ACCEPT 允許連線出去后對方主機回應進來的封包

22-A RH-Firewall-1-INPUT-m state--state RELATED,ESTABLISHED-j ACCEPT 允許防火墻開啟指定端口

-A RH-Firewall-1-INPUT-p tcp-m state--state NEW-m tcp--dport port-j ACCEPT 限制SSH登陸

只允許在***.***.***.***上使用ssh遠程登錄,從其它計算機上禁止使用ssh iptables-A INPUT-s ***.***.***.***-p tcp--dport 22-j ACCEPT iptables-A INPUT-p tcp--dport 22-j DROP

2)linux 主機防火墻處理數據包的順序是什么?

答:(1)當包到達端口時,對包報頭進行語法分析。大多數包過濾設備只檢查IP、TCP、或UDP報頭中的字段。

(2)若一條規則阻止包傳輸或接收,則此包便不被允許。

(3)若一條規則允許包傳輸或接收,則此包便可以被繼續處理。(4)若包不滿足任何一條規則,則此包便被阻塞。

實驗三WIFI 釣魚

步驟一 共享WIFI 工具:電腦、WIN7 系統、無線網卡

步驟

1.開始菜單-->命令提示符(cmd)-->右鍵,以管理員身份運行 2.運行以下命令啟用虛擬網卡

>netsh wlan set hostednetwork mode=allow ssid=(這里寫無線網名字)key=(這里是密碼)

3.網絡共享中心-->更改高級適配器設置-->右鍵已連接到Internet 的網絡連接-->屬性-->切換 到“共享”選項卡,選中其中的復選框,并選擇允許其共享Internet 的網絡連接,這里即我 們的虛擬WIFI 網卡

4.開啟無線網絡,繼續在命令提示符中運行以下命令: >netsh wlan start hostednetwork 24 即可開啟我們之前設置好的無線網絡(相當于打開路由器的無線功能)

步驟二 WIFI 釣魚

工具:其他筆記本或手機、Wareshark 步驟

1.搜索到剛剛設置的WIFI,連接上(密碼為剛剛設置的key:12345679)

2.在筆記本上打開wareshark,選擇capture-->interfaces 3.選擇Packets 最多的項,點擊start 按鈕

4.在手機或筆記本上打開中南大學郵箱網站:http://mail.csu.edu.cn/,在主機上用wareshark 捕捉

http 的包

(這里大家可以自由實驗,能監控到連接到該WIFI 的機器的所有包的情況)5.在手機或筆記本上輸入用戶名和密碼,點擊登錄

6.在主機上用wareshark 捕捉到剛剛post 提交的http 包,右鍵選擇Follow tcp stream

7.可以看到剛剛提交的用戶名和密碼,且是未經過加密的

實驗截圖

如上所示,重要的步驟截圖已置于相應步驟下。

實驗心得

本次實驗是在自己的筆記本上做的,實驗也比較簡單,所以做得比較快效果比較好。通過本次實驗,大致了解了WIFI釣魚的操作過程,同時,也讓自己有了警覺之心,要養成良好的WIFI使用習慣。手機會把使用過的WIFI熱點都記錄下來,如果WiFi開關處于打開狀態,手機就會不斷向周邊進行搜尋,一旦遇到同名的熱點就會自動進行連接,存在被釣魚風險。因此當我們進入公共區域后,盡量不要打開WIFI開關,或者把WiFi調成鎖屏后不再自動連接,避免在自己不知道的情況下連接上惡意WIFI。

實驗四 SQL注入攻擊

【實驗目的】

SQL注入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程序,而這些輸入大都是SQL語法里的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,其主要原因是程序沒有細致地過濾用戶輸入的數據,致使非法數據侵入系統。根據相關技術原理,SQL注入可以分為平臺層注入和代碼層注入。前者由不安全的數據庫配置或數據庫平臺的漏洞所致;后者主要是由于程序員對輸入未進行細致地過濾,從而執行了非法的數據查詢。

本次實驗目的是了解sql注入的常見手段,要到兩個工具:

①dvwa(Dam Vulnerable Web Application)是用PHP+Mysql編寫的一套用于常規WEB漏洞教學和檢測的WEB脆弱性測試程序。包含了SQL注入、XSS、盲注等常見的一些安全漏洞。

② sqlmap是一個自動化的SQL注入工具,其主要功能是掃描,發現并利用給定的URL的SQL注入漏洞。

【實驗組網拓撲】

VM Client

VM Server

【實驗一:dvwa手動sql注入】

1、連接好虛擬機拓撲圖,配置WindowsXP Client和Windows XP Server的IP使其在同一個局域網網段。

2、打開Server端的xampp,啟動apache和mysql。打開Client的瀏覽器,訪問Server的IP/dvwa,如“192.168.1.32/dvwa”,登陸賬戶為admin,密碼為password。

3、選擇SQLInjection,點擊右下角的ViewSource,查看PHP源代碼。

4、正常測試,輸入“1”,得到正常結果,如下所示。

5、當將輸入變為“'”時,頁面提示錯誤“YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'''''atline1”,結果如圖??吹竭@個結果,可以知道,這個表單存在著注入漏洞。

6、嘗試輸入:“1’or 1=1–”注意“--”后面有空格!此時成功進行sql注入。

7、測試查詢信息列數。利用語句order by num。這里輸入“ 1'order by 1--” 結果頁面正常顯示,注意--后面有空格。繼續測試,“ 1'order by 2--”,“ 1'order by 3--”,當輸入3是,頁面報錯。頁面錯誤信息如下,Unknown column '3' in 'order clause',由此查詢結果值為2列。

8、嘗試注入“1' and 1=2 union select 1,2--”,從而得出First name處顯示結果為查詢結果第一列的值,surname處顯示結果為查詢結果第二列的值,利用內置函數user(),及database(),version()注入得出連接數據庫用戶以及數據庫名稱:“1' and 1=2 union select user(),database()--”。

9、選擇DVWA Security,將安全級別分別設置為中、高。再運行上面的實驗sql語句,結合右下角的ViewSource,分析三種等級的代碼和sql注入效果有何區別。在安全級別分別設置為低時,結合PHP源代碼,考慮不采用“--”的情形下,完成sql注入,寫出sql注入語句。

【實驗二:sqlmap測試dvwa】

1、打開Server端的xampp,啟動apache和mysql。打開Client的瀏覽器,訪問Server的IP/dvwa,如“169.254.180.158/dvwa”,登陸賬戶為admin,密碼為password。選擇DVWA Security,將安全級別分別設置為低。

2、選擇XSS reflected,輸入“alert(document.cookie)”,獲取登陸系統后的cookie值,截圖保存cookie值。

3、使用sqlmap查找注入點,打開Client端的控制臺窗口,轉到目錄“C:Python27sqlmap”,輸入以下命令,注意!“169.254.180.158”表示Server的IP,“security=low;PHPSESSID=mkoc8iuc07hfre7vvo0e5ghjv5”表示上一步所獲得的cookie值,請同學們按照實際環境 33 填寫相應的值!“sqlmap.py-u “http://169.254.180.158/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=mkoc8iuc07hfre7vvo0e5ghjv5””。

依據以下信息,得到可能的注入點是id,數據庫是mysql。

[INFO] heuristic(basic)test shows that GET parameter 'id' might be injectable(possible DBMS: 'MySQL')[INFO] GET parameter 'id' is 'MySQL UNION query(NULL)-1 to 20 columns' injectable

4、輸入“sqlmap.py-u “http://169.254.180.158/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=mkoc8iuc07hfre7vvo0e5ghjv5”--current-db”得到當前數據庫名。

current database: 'dvwa'

5、輸入“sqlmap.py-u “http://169.254.180.158/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=mkoc8iuc07hfre7vvo0e5ghjv5”--current-db--tables-Ddvwa”得到數據庫所有表。

6、輸入“sqlmap.py-u “http://169.254.180.158/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=mkoc8iuc07hfre7vvo0e5ghjv5”-T users--columns”得到user表的所有列。

7、輸入“sqlmap.py-u “http://169.254.180.158/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=mkoc8iuc07hfre7vvo0e5ghjv5”-T users--dump”得到user表的所有列,在sqlmap詢問時候破解密碼時,選擇是,sqlmap會使用自己的字典來破解密碼,得到5個用戶的密碼。此時就完成了利用sqlmap進行“拖庫”的基本步驟。

實驗截圖

如上所示,重要的步驟截圖已置于相應步驟下。

實驗心得

隨著B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由于程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。

此次的實驗讓我了解了SQL注入攻擊的原理和過程,讓我了解到了做這方面開發的時候需要注意的安全性問題,也意識到安全的重要性和數據庫的一些欠缺,提高了自己在這方面的安全意識。在實驗的過程中遇到了很多困難,配置上的,環境上的,還有一些需要注意的小問題。很高興順利完成了這次實驗,期待下次能使用更高級的工具進行掃描和實施攻擊,當然,以后的開發過程中也要特別注意這些脆弱點了。

第四篇:中南大學網絡安全實驗報告

學生姓名指導教師學 院專業班級學 號完成時間中南大學

網絡安全 實驗報告

代巍 張士庚 信息科學與工程學院 信安1201班 0909121615 年12月15日

2014

目錄

實驗一 CA證書與SSL連接 實驗二 WIFI釣魚 實驗三 SQL注入攻擊

實驗四 配置和管理主機防火墻

實驗一 CA證書與SSL連接

一.實驗目的

通過申請、安裝數字證書,掌握使用SSL建立安全通信通道的方法。掌握在Windows Server 2003 下獨立根CA 的安裝和使用。使用WEB 方式申請證書和安裝證書。建立SSL 網站。

分析SSL 網站的數據包特點。二.實驗原理

SSL協議的工作原理、數字證書的原理

在訪問Web 站點時,如果沒有較強的安全措施,用戶訪問的數據是可以使用網絡工具 捕獲并分析出來的。在Web 站點的身份驗證中,有一種基本身份驗證,要求用戶訪問輸入

用戶名和密碼時,是以明文形式發送密碼的,蓄意破壞安全性的人可以使用協議分析程序破

譯出用戶名和密碼。那我們該如果避免呢?可利用SSL 通信協議,在Web 服務器上啟用安

全通道以實現高安全性。

SSL 協議位于TCP/IP 協議與各種應用層協議之間,為數據通訊提供安全支持。SSL 協 議可分為兩層: SSL 記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)

之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。SSL 握手協議(SSL Handshake Protocol):它建立在SSL 記錄協議之上,用于在實際的數據傳輸開始前,通訊雙

方進行身份認證、協商加密算法、交換加密密鑰等。每一個Windows Server 2003 證書頒發

機構都有可供用戶和管理員使用的網頁。三.實驗環境

虛擬機:Windows Server 2003,Windows XP,Wireshark 抓包軟件。四.實驗過程

任務一:windows server 2003 環境下獨立根CA 的安裝及使用

1、windows server 2003 環境下獨立根CA 的安裝及使用,啟動Windows Server 2003 和Windows XP,配臵其IP,使其在同一局域網網段。在Windows Server 2003 中,選擇【開始】|【控制面板】|【添加和刪除程序】,在彈出窗口中選擇【添加和刪除windows 組件】,在【組件】列表框中選擇【證書服務】,再單擊【下一步】按鈕,如下圖所示。

2、在彈出的窗口中選擇【獨立根CA】單選按鈕,單擊【下一步】按鈕,在彈出窗口中按要求依次填入CA 所要求的信息,單擊【下一步】按鈕,如下圖所示。

3、繼續選擇【證書數據庫】、【數據庫日志】和配臵信息的安裝、存放路徑,如下圖所示,單擊【下一步】按鈕。安裝的時候,可能會彈出如下窗口,為了實驗方便,已經把I386 文件夾復制到C:下,選擇【瀏覽】,選擇文件夾“C:I386”,點【確定】,完成安裝。

4、選擇【開始】|【程序】|【管理工具】,可以找到【證書頒發機構】,說明CA 的安裝已經完成,如下圖所示。

5、從同一局域網中的另外一臺XP 開啟IE 瀏覽器,輸入http://windows2003 的IP/certsrv/,選中【申請一個證書】,如下圖所示,在彈出的頁面中選擇【web 瀏覽器證書】。

6、在彈出窗口中填寫用戶的身份信息,完成后進行【提交】。此種情況下,IE 瀏覽器采用

默認的加密算法生成公鑰對,私鑰保存在本地計算機中,公鑰和用戶身份信息按照標準的格式發給CA 服務器,如圖所示,單擊【是】,進入下一步。CA 服務器響應后,彈出證書申請成功頁面,如下圖所示。

7、在根CA 所在的計算機上,選擇【開始】|【程序】|【管理工具】|【證書頒發機構】,上面申請的證書便會出現在窗口右邊,選擇證書單擊右鍵,選擇【所有任務】|【頒發】,進行證書頒發,如下圖所示。證書頒發后將從【掛起的申請】文件夾轉入【頒發的證書】文件夾中,表示證書頒發完成。

8、在申請證書的計算機上打開IE,輸入http://windows2003 的IP/certsrv/,進入證書申請頁面,選擇【查看掛起的證書申請狀態】,彈出的頁面中選擇一個已經提交的證書申請,如下圖所示。選擇安裝此證書。

9、現在驗證此CA 系統頒發的新證書是否可信,為此需要安裝CA 系統的根證書,進入證書申請主頁面,選擇當前的CA 證書進行下載,并保存到合適路徑,如下圖所示。

10、下載完畢之后,在證書的保存目錄中查看證書信息,單擊【安裝證書】按鈕,進入證書導入向導,按照默認的配臵完成證書的導入,導入成功后,單擊【確定】按鈕,之后完成。

任務二:基于Web的SSL連接設臵

1、在XP 中,左下角【開始】,打開【Wireshark】,并點擊開始抓包的按鈕。打開IE 瀏覽器,輸入網址http://windows2003 的IP/?id=1(比如:http://192.168.1.130/?id=1),然后保存Wireshark的抓包結果1。

2、選擇【開始】|【程序】|【管理工具】|【IIS(Internet 信息服務)管理器】,在彈出窗口右鍵單擊【默認網站】,彈出的快捷菜單中選擇【屬性】選項。

3、在彈出窗口內選擇【目錄安全性】標簽,單擊【安全通信】中的【服務器證書】按鈕,如下圖所示。

4、彈出【IIS 證書向導】窗口,選中【新建證書】復選項,一直單擊【下一步】按鈕,輸入自定義的名稱,如下圖所示。填寫相應的信息后,單擊【下一步】按鈕。

5、彈出【請求文件摘要】窗口,確認后單擊【下一步】按鈕,接著單擊【完成】按鈕,完成服務器端證書配臵,如下圖所示

6、打開IE 瀏覽器(windows2003 中的),進入證書申請主界面,如下圖所示。

7、在出現的網頁中選擇【高級證書申請】,如圖所示,在出現的網頁中單擊第二個選項【base64編碼】。打開剛才IIS 證書向導生成的請求文件,(默認路徑C:certreq.txt),復制并粘貼文件內容到第一個文本框,如下圖所示,單擊【提交】按鈕,轉到完成提交后的頁面。

8、回到首頁,選擇【查看掛起的證書申請狀態】,彈出的頁面中選擇一個已經提交的證書申請,如下圖所示。選擇【Base 64 編碼】,點擊【下載證書】,【保存】certnew.cer 文件到桌面。

9、選擇【開始】|【程序】|【管理工具】|【IIS(Internet 信息服務)管理器】,在彈出窗口右鍵單擊【默認網站】,彈出的快捷菜單中選擇【屬性】選項,在彈出窗口內選擇【目錄安全性】標簽,選擇【服務器證書】,選擇【下一步】,【處理掛起的請求并安裝證書】選擇【下一步】,【瀏覽】選擇剛才保存的certnew.cer 文件,如下圖所示。【下一步】【下一步】【完成】。

10、還是在【目錄安全性】下,選擇【安全通信】下的【編輯】,在下如圖所示的彈出窗口中選中【要求安全通道(SSL)】復選項,并在【客戶端證書】欄中選中【接受客戶端證書】復選項,再單擊【確定】按鈕。返回【目錄安全性】面板,單擊【應用】按鈕及【確定】按鈕,完成配臵。

11、在XP 系統打開瀏覽器,輸入服務器IP 地址,進入證書申請主頁面,此時會顯示錯誤信息頁面,要求采用https 的方式連接服務器,如圖所示。

12、把http 改成https 繼續訪問,此時瀏覽器提示你要安裝證書,安裝完證書后,就可以正常使用了。、再次打開Wireshark,并點擊開始抓包的按鈕。打開IE 瀏覽器,輸入網址https://windows2003 的IP/?id=1(比如:https://192.168.1.130/?id=1),然后保存Wireshark 的抓包結果2。

14、分析比較抓包結果1 和抓包結果2 中,對IP/?id=1 請求處理的差異。

五、實驗感想

至此,我完成了整個數字證書的安裝和使用實驗。通過本次實驗我學會了SSL協議的工作原理,同時了解到了CA證書的頒發機制。

任何一個安全性系統整體性設計,都離不開數字證書的加密,可以想象加密機制對信息安全的重要性。

需要說明的是,盡管SSL能提供實際不可破譯的加密功能,但是SSL安全機制的實現會大大增加系統的開銷,增加了服務器CPU的額外負擔,使得SSL加密傳輸的速度大大低于非加密傳輸的速度。因此,為了防止整個Web網站的性能下降,可以考慮只把SSL安全機制用來處理高度機密的信息,例如提交包含信用卡信息的表格。

實驗二 WIFI釣魚

一.實驗目的

1、通過實際測試,模擬入侵者利用wifi抓包來竊取用戶數據的過程。掌握整個過程中的原理,數據分析等。

2、掌握抓包軟件的使用。二.實驗原理

在一個可控的網絡環境里,劫持數據有很多方法。比較有名的網絡層抓包工具有wireshark,tcpdump,都是很好的網絡協議分析工具。我們現在手機上的大多數APP應用層都是使用的HTTP協議,因此我們很多的在web安全測試里面用到的分析工具如fiddler,burp,httpanalyzer,Charles等也都是可以用來分析或者劫持APP的通信流。

用戶手機里的app默認會進行很多敏感的請求,手機會自動去登陸和獲取最新的信號;如果手機默認會鏈接周圍已經被保存sid的wifi;通過內臵最常見的sid和信息,入侵者可以使得周圍的人會自動鏈接上入侵者假設好的wifi,通過抓取相應的數據取得里面的敏感信息,理論上是可以劫持用戶的相關密碼信息的。三.實驗環境

帶有無線網卡的筆記本電腦,Wireshark 抓包軟件,智能手機。四.實驗過程 步驟一共享WIFI 工具:電腦、WIN7 系統、無線網卡 步驟

1.開始菜單-->命令提示符(cmd)-->右鍵,以管理員身份運行

2.運行以下命令啟用虛擬網卡>netsh wlan set hostednetwork mode=allow ssid=(這里寫無線網名字)key=(這里是密碼)

3.網絡共享中心-->更改高級適配器設臵-->右鍵已連接到Internet 的網絡連接-->屬性-->切換

到“共享”選項卡,選中其中的復選框,并選擇允許其共享Internet 的網絡連接,這里即我們的虛擬WIFI 網卡

4.開啟無線網絡,繼續在命令提示符中運行以下命令:>netsh wlan start hostednetwork即可開啟我們之前設臵好的無線網絡(相當于打開路由器的無線功能)

步驟二WIFI 釣魚工具:其他筆記本或手機、Wareshark 步驟

1.搜索到剛剛設臵的WIFI:dave,連接上(密碼為剛剛設臵的key:12345678)2.在筆記本上打開wareshark,選擇capture-->interfaces

3.選擇Packets 最多的項,點擊start 按鈕

4.在手機或筆記本上打開中南大學郵箱網站:http://mail.csu.edu.cn/,在主機上用wareshark 捕捉http 的包(這里大家可以自由實驗,能監控到連接到該WIFI 的機器的所有包的情況)

5.在手機或筆記本上輸入用戶名和密碼,點擊登錄

6.在主機上用wareshark 捕捉到剛剛post 提交的http 包,右鍵選擇Follow tcp stream

7.可以看到剛剛提交的用戶名和密碼,且是未經過加密的

五、實驗感想

通過這次實驗,我實際地模擬了一次入侵者通過假設釣魚WIFI網絡,來竊取連接此網絡的用戶的密碼信息過程。整個過程中我成功地完成了對各種用戶數據抓包,并分析出用戶密碼。

這讓我對wifi網絡產生了新的看法,我意識到了鏈接wifi網絡過程當中存在很多安全隱患,如果被圖謀不軌的人利用到,一旦泄露商業機密等重要信息,勢必會產生重大的經濟損失。

隨著人們的生活越來越離不開網絡,也越來越離不開移動手機,一般的公共廠商都已經將wifi作為基礎服務進行提供,譬如在星巴克、麥當勞等公共場所邊點杯熱飲邊“蹭網”,已經是一個基本的習慣了,甚至一些大型的電信提供商已經嘗試將wifi作為一個基礎的接入。如今公共的wifi很多,尤其是免費的,手機上還有幫助尋找免費wifi的各類app。很多人為了省流量,看到免費的wifi,總會去連接一下嘗試網上沖浪。不過,在這些免費的wifi以及大家使用wifi的習慣,加上手機及app的默認行為,就可以導致一些嚴重安全問題。

實驗三 SQL注入攻擊

一.實驗目的

是了解sql注入攻擊的原理,掌握網站的工作機制,認識到SQL注入攻擊的防范措施,加強對Web攻擊的防范。

二.實驗原理

SQL注入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程序,而這些輸入大都是SQL語法里的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,其主要原因是程序沒有細致地過濾用戶輸入的數據,致使非法數據侵入系統。

根據相關技術原理,SQL注入可以分為平臺層注入和代碼層注入。前者由不安全的數據庫配臵或數據庫平臺的漏洞所致;后者主要是由于程序員對輸入未進行細致地過濾,從而執行了非法的數據查詢。

三.實驗環境

虛擬機WindowsXP系統、Windows2003系統。dvwa(Dam Vulnerable Web Application)工具,sqlmap SQL注入工具、四.實驗過程

【實驗一:dvwa手動sql注入】

1、連接好虛擬機拓撲圖,配臵WindowsXP Client和Windows XP Server的IP使其在同一個局域網網段。

2、打開Server端的xampp,啟動apache和mysql。打開Client的瀏覽器,訪問Server的IP/dvwa,如“192.168.1.32/dvwa”,登陸賬戶為admin,密碼為password

3、選擇SQLInjection,點擊右下角的ViewSource,查看PHP源代碼。

4、正常測試,輸入“1”,得到正常結果,如下所示。

5、當將輸入變為“'”時,頁面提示錯“YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'''''atline1”,結果如圖??吹竭@個結果,可以知道,這個表單存在著注入漏洞。

6、嘗試輸入:“1’or 1=1–”注意“--”后面有空格!此時成功進行sql注入。

7、測試查詢信息列數。利用語句order by num。這里輸入“ 1'order by 1--” 結果頁面正常顯示,注意--后面有空格。繼續測試,“ 1'order by 2--”,“ 1'order by 3--”,當輸入3是,頁面報錯。頁面錯誤信息如下,Unknown column '3' in 'order clause',由此查詢結果值為2列。

8、嘗試注入“1' and 1=2 union select 1,2--”,從而得出First name處顯示結果為查詢結果第一列的值,surname處顯示結果為查詢結果第二列的值,利用內臵函數user(),及database(),version()注入得出連接數據庫用戶以及數據庫名稱:“1' and 1=2 union select user(),database()--”。

9、選擇DVWA Security,將安全級別分別設臵為中、高。再運行上面的實驗sql語句,結合右下角的ViewSource,分析三種等級的代碼和sql注入效果有何區別。在安全級別分別設臵為低時,結合PHP源代碼,考慮不采用“--”的情形下,完成sql注入,寫出sql注入語句。

【實驗二:sqlmap測試dvwa】

1、打開Server端的xampp,啟動apache和mysql。打開Client的瀏覽器,訪問Server的IP/dvwa,如“192.168.1.32/dvwa”,登陸賬戶為admin,密碼為password。選擇DVWA Security,將安全級別分別設臵為低。

2、選擇XSS reflected,輸入“alert(document.cookie)”,獲取登陸系統后的cookie值,截圖保存cookie值。

3、使用sqlmap查找注入點,打開Client端的控制臺窗口,轉到目錄“C:Python27sqlmap”,輸入以下命令,注意!“192.168.1.32”表示Server的IP,“security=low;PHPSESSID=tvitu9mog097jl4ctfsqhbs9o6”表示上一步所獲得的cookie值,請同學們按照實際環境填寫相應的值!“sqlmap.py-u http://192.168.1.32/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit--cookie=“security=low;PHPSESSID=tvitu9mog097jl4ctfsqhbs9o6””。

依據以下信息,得到可能的注入點是id,數據庫是mysql。

[INFO] heuristic(basic)test shows that GET parameter 'id' might be injectable(possible DBMS: 'MySQL')

[INFO] GET parameter 'id' is 'MySQL UNION query(NULL)-1 to 20 columns' injectable

4、輸入“sqlmap.py-u “http://192.168.1.32/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=tvitu9mog097jl4ctfsqhbs9o6”--current-db”得到當前數據庫名。

current database: 'dvwa'

5、輸入“sqlmap.py-u “http://192.168.1.32/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=tvitu9mog097jl4ctfsqhbs9o6”--current-db--tables-Ddvwa”得到數據庫所有表。

6、輸入“sqlmap.py-u “http://192.168.1.32/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=tvitu9mog097jl4ctfsqhbs9o6”-T users--columns”得到user表的所有列。

7、輸入“sqlmap.py-u “http://192.168.1.32/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=tvitu9mog097jl4ctfsqhbs9o6”-T users--dump”得到user表的所有列,在sqlmap詢問時候破解密碼時,選擇是,sqlmap會使用自己的字典來破解密碼,得到5個用戶的密碼。此時就完成了利用sqlmap進行“拖庫”的基本步驟。五.實驗感想

通過實驗,我明白了帶有參數的動態網頁,很多都是沒有進行過濾的。如果能夠被SQL注入工具,就存在安全隱患,有可能就因為這個漏洞,入侵者就可以得到登錄權限并控制整個服務器。

從實驗可以看出,只要是帶有參數的動態網頁,且此網頁訪問了數據庫,就有可能存在SQL注入攻擊,因此SQL注入攻擊潛在的發生概率相對于其他Web攻擊要高很多,危害面也更廣。其主要危害包括:獲取系統控制權、未經授權狀況下操作數據庫的數據、惡意篡改網頁內容、私自添加系統帳號或數據庫使用者帳號等。

目前基于數據庫的網絡應用越來越多。與此同時,用于搜索SQL注入點的軟件在網絡上隨處可見,攻擊者只需要具備少量的專業知識就可以利用這些軟件尋找目標進行攻擊。攻擊目標和攻擊者的增加使得SQL注入攻擊在近幾年出現擴大的趨勢

為了防止SQL注入帶來的危害,在網站開發的過程中,需要對需要輸入參數的模塊進行過濾,并加入相關權限認證模塊。

實驗四 配置和管理主機防火墻

一.實驗目的

1.學習配臵和管理主機防火墻,介紹如何配臵linux 防火墻。2.掌握linux 下基本的iptables 知識,學會配臵iptables

二.實驗原理

對于Internet 上的系統,不管是什么情況,首先我們要明確一點:網絡是不安全的。因此,雖然創建一個防火墻并不能保證系統100%安全,但卻是絕對必要的。和社會上其它任何事物一樣,Internet 經常會受到一些無聊的或者別有用心的人的干擾,防火墻的目的就是將這類人擋在你的網絡之外,同時使你仍然可以完成自己的工作。因為不同的應用環境對安全的要求不一樣。用一句比較恰當而且簡單的話來回答這個問題:用戶了解自己的Linux 系統和設臵,并且可以很好地保護好自己的數據和機密文件的安全,這對于該計算機用戶來說就可以稱之為他的計算機有足夠的安全性。防火墻是一個或一組系統,它在網絡之間執行訪問控制策略。實現防火墻的實際方式各不相同,但是在原則上,防火墻可以被認為是這樣一對機制:一種機制是攔阻傳輸流通行,另一種機制是允許傳輸流通過。一些防火墻偏重攔阻傳輸流的通行,而另一些防火墻則偏重允許傳輸流通過。了解有關防火墻的最重要的概念可能就是它實現了一種訪問控制策略。

一般來說,防火墻在配臵上是防止來自“外部”世界未經授權的交互式登錄的。這大大有助于防止破壞者登錄到你網絡中的計算機上。一些設計更為精巧的防火墻可以防止來自外部的傳輸流進入內部,但又允許內部的用戶可以自由地與外部通信。如果你切斷防火墻的話,它可以保護你免受網絡上任何類型的攻擊。防火墻的另一個非常重要的特性是可以提供一個單獨的“攔阻點”,在“攔阻點”上設臵安全和審計檢查。與計算機系統正受到某些人利用調制解調器撥入攻擊的情況不同,防火墻可以發揮一種有效的“電話監聽”和跟蹤工具的作用。防火墻提供了一種重要的記錄和審計功能;它們經常可以向管理員提供一些情況概要,提供有關通過防火墻的傳輸流的類型和數量,以及有多少次試圖闖入防火墻的企圖等信息。

三.實驗環境

虛擬機:linux,windowsXP;linux 主機用戶名:root;密碼:root 四.實驗過程 1.查看規則表

# iptables-L INPUT--line-numbers //查看filter表中INPUT鏈中的所有規則,同時顯示各條規則的順序號

2.刪除、清空規則

# iptables-F //不指定表名時,默認情況filter表

3.設臵規則鏈默認策略

# iptables-t filter-P FORWARD DROP //將filter表中FORWARD規則的默認策略設為DROP # iptables-P OUTPUT ACCEPT //將filter表中OUTPUT規則的默認策略設為ACCEPT 4.通用(general)條件匹配(直接使用,而不依賴于其他的條件匹配及其擴展)協議匹配(允許使用的協議名包含在/etc/protocols文件中)# iptables-AINPUT-p icmp–j REJECT //拒絕進入防火墻的所有icmp數據包

地址匹配

拒絕轉發來自192.168.1.11主機的數據,允許轉發來自192.168.0./24網段的數據

# iptables-A FORWARD-s 192.168.1.11-j REJECT

5.隱含(implicit)條件匹配(需要指定的協議匹配為前提,其對應的功能由iptables自動(隱含)的裝載入內核),如果無匹配條件,默認為REJECT。端口匹配

僅允許系統管理員從202.13.0.0/16網段使用SSH方式遠程登錄防火墻主機 # iptables-A INPUT-p tcp--dport 22-s 202.13.0.0/16-j ACCEPT # iptables-A INPUT-p tcp--dport 22-j DROP

6.禁止Windows主機ping防火墻linux主機,但是允許從防火墻上ping其他主機(允許接受ICMP回應數據)配臵linux防火墻主機ip地址,如下圖所示:

7.配臵windows 主機ip 地址,如下圖所示:

8.配臵linux 主機防火墻規則,如下圖所示:

9.在此在windows 主機和linux 主機上進行相互ping 測試,測試結果如下圖所示:

五.實驗感想

通過本次實驗,掌握了防火墻保護PC機避免被攻擊的方法;在實驗中,要先設臵規則,這樣PC1和PC2之間就可以相互通信,方便做模擬實驗;防火墻在抗攻擊過程中起到了很好的作用,保護主機免受外來攻擊。

鍛煉了解決問題的能力。比如兩個主機之間不能連通,問題可能有:雙絞線本身有問題導致不能連通,電腦網卡未打開導致不連通等等。連通與否可以通過用Ping命令檢查網絡連接狀況,其中在登錄和設臵防火墻的時候也遇到很多問題,但是總的來說是完成了相關的實驗,并利用基本的網絡知識,鍛煉了實踐動手能力。通過具體的操作,基本掌握了防火墻抗攻擊的配臵方式與方法,更加深入的了解防火墻的重要作用。

了解了防火墻的基本操作及原理,為以后打下基礎,雖然各個廠商,各種產品的具體操作不一樣,但是基本原理是相通的,通曉原理便可舉一反三。同時培養了冷靜分析解決問題的能力。

第五篇:中南大學離散數學實驗報告

離散數學實驗報告(實驗ABC)

專業班級 學生姓名 學生學號 指導老師 完成時間

離散數學實驗三實驗報告

目錄

實驗概述..........................................................................................................2

1.1 實驗目的.........................................................................................................2 1.2 實驗內容.........................................................................................................2 1.3 實驗環境.........................................................................................................2 第二章 實驗原理和實現過程......................................................................................3

2.1 實驗原理.........................................................................................................3

2.1.1建立圖的鄰接矩陣,判斷圖是否連通................................................3 2.1.2 計算任意兩個結點間的距離...............................................................3 2.1.3對不連通的圖輸出其各個連通支........................................................4 2.2 實驗過程(算法描述).................................................................................4

2.2.1 程序整體思路.......................................................................................4 2.2.2具體算法流程........................................................................................4

第三章 實驗數據及結果分析......................................................................................6

3.1建立圖的鄰接矩陣并判斷圖是否連通的功能測試及結果分析.................6

3.1.1輸入無向圖的邊....................................................................................6 3.1.2建立圖的連接矩陣................................................................................7 3.2 其他功能的功能測試和結果分析.................................................................8

3.2.1計算節點間的距離................................................................................8 3.2.2判斷圖的連通性....................................................................................8 3.2.3輸出圖的連通支....................................................................................9 3.2.4退出系統................................................................................................9

第四章 實驗收獲和心得體會....................................................................................10

4.1 實驗收獲.......................................................................................................10 4.2 心得體會.......................................................................................................11 第五章 實驗源程序清單............................................................................................12

5.1 程序代碼.......................................................................................................12

I 離散數學實驗三實驗報告

第一章 實驗概述

1.1 實驗目的

理解圖論的基本概念,圖的矩陣表示,圖的連通性,圖的遍歷,以及求圖的連通支方法。

通過實驗,幫助學生更好地掌握計算機科學技術常用的離散數學中的概念、性質和運算,培養邏輯思維;通過實驗提高學生編寫實驗報告、總結實驗結果的能力,提高理論聯系實際的能力;使學生具備程序設計的思想,能夠獨立完成簡單的算法設計和分析。

1.2 實驗內容

以偶對的形式輸入一個無向簡單圖的邊,建立該圖的鄰接矩陣,判斷圖是否連通(A),并計算任意兩個結點間的距離(B),對不連通的圖輸出其各個連通支(C)。

注意:題目類型分為A,B,C三類,其中A為基本題,完成A類題目可達到設計的基本要求,其他均為加分題,并按字母順序分數增加越高。

基本要求如下:程序需具有基本的容錯控制,在輸入錯誤時有處理手段;程序界面友好,需要輸入的地方有輸入說明,說明輸入的內容和格式要求等;實驗原理和實現過程應該詳細分析問題,給出解決思路,描述算法思想,不能用源程序代替算法;測試數據應全面,包括非法輸入的處理結果等都應包含在內。

1.3 實驗環境

C或C++語言編程環境實現。離散數學實驗三實驗報告

第二章 實驗原理和實現過程

2.1 實驗原理

2.1.1建立圖的鄰接矩陣,判斷圖是否連通

根據圖的矩陣表示法建立鄰接矩陣A,并利用矩陣的乘法和加法求出可達矩陣,從而判斷圖的連通性。

連通圖的定義:在一個無向圖 G 中,若從頂點vi到頂點vj有路徑相連(當然從vj到vi也一定有路徑),則稱vi和vj是連通的。如果 G 是有向圖,那么連接vi和vj的路徑中所有的邊都必須同向。如果圖中任意兩點都是連通的,那么圖被稱作連通圖。

判斷連通圖的實現:在圖中,從任意點出發在剩余的點中,找到所有相鄰點循環,直到沒有點可以加入為止,如果有剩余的點就是不連通的,否則就是連通的?;蛘咭部捎肳allShell算法,由圖的鄰接矩陣判斷圖是否連通。

2.1.2 計算任意兩個結點間的距離

圖中兩點i,j間的距離通過檢驗Al中使得aij為1的最小的l值求出。路徑P中所含邊的條數稱為路徑P的長度。在圖G中,從結點Vi到Vj最短路徑的長度叫從Vi到Vj的距離,記為d

設圖的鄰接矩陣是A,則 所對應的aij的值表示,點Vi到點Vj距離為n的路徑有aij條。

若aij(1),aij(2),…,aij(n-1),中至少有一個不為0,則可斷定Vi與Vj可達,使aij(l)≠0的最小的l即為d(Vi,Vj)。

問題求解原理為:

(1)先構造初始鄰接矩陣A=Vij,Vij為頂點Vi到頂點Vj的權。如果Vi和Vj之間不存在弧段或者是負向回路或者是i=j,則令Vij其值為∞。

(2)再構造初始中間頂點矩陣。

(3)然后開始迭代計算(迭代的次數等于頂點的個數1)(4)最后查找Vi到Vj的最短路徑。離散數學實驗三實驗報告

計算節點Vi與Vj之間的距離的方法為:

利用鄰接矩陣相互間相乘后得到的矩陣來判斷節點間的距離。如果c2[s][i][j]==0,則這兩個節點的距離為無窮大。如果c2[s-2][i][j]==0,c2[s-1][i][j]==1時,則這兩點間的距離為s。

2.1.3對不連通的圖輸出其各個連通支

圖的連通支的求法則可采用圖的遍歷算法,圖的遍歷有深度優先和廣度優先兩種方法,其中深度優先算法又分為遞歸和非遞歸兩種。

在無向圖中,如果任何兩點可達,則稱圖G是連通的,如果G的子圖G’是連通的,沒有包含G’的更大的子圖G’’是連通的,則稱G’是G的連通支。

當有判斷出關系不是連通的之后,將需要求出分支模塊

實現方法如下:先定義一個二維數組用來存放相應的分塊,先選定一個點,并將它放在數組中,然后判斷,如果后面的和他是聯通的便將它也放在同一個數組中,否則將其存入其他的數組中,后面以此類推,在輸出相應的數組,便可判斷出連通分支。

2.2 實驗過程(算法描述)

2.2.1 程序整體思路 本程序完成了實驗所要求的全部功能,其基本思路是——“運用模塊化的思想,將實現“求連通支”、“輸入結點關系”、“輸出鄰接矩陣”、“顯示兩結點間的距離”、“求可達矩陣”和“圖的遍歷”的子函數分開編寫,然后將它們以子函數的形式添加到主函數main的代碼后面,在要使用相應的子函數時,進行子函數調用就可以實現相應的功能了?!?/p>

本程序的一大特色就是開發者靈活使用了C語言中的數組概念來進行開發,用數組來模擬矩陣的運算,通過相應的算法實現了全部的功能。2.2.2具體算法流程

在main(){系統界面顯示;用do…while循環語句和switch語句實現功能liantongzhi(){求連通支,此子函數通過一個for循環控制遍歷每個結點,并調1,2,3……的選擇,并調用相關的子程序;用start、goto start實現控制流的轉移;} 用函數DFS()求每個結點的連通支;} 離散數學實驗三實驗報告

DFS(int a){通過實參與形參,將結點數據代入函數;定義順序棧變量;通過for循環初始化;為a置已訪問標志,已經訪問了的元素為1;定義順序棧的第一個元素;通過while循環實現結點遍歷,棧不為空時執行循環;棧頂元素賦值;通過for循環尋找v的下個未訪問的鄰接點;通過if條件句,若x,i是邊和節點i未被訪問過,處理結點的訪問,并進行訪問標志,進棧等操作;通過if條件句,若v已訪問到的出點,則將其退棧;}

shuru(){輸入結點關系;通過for循環先將矩陣所有元素賦值0;再通過另一linjiejuzhen(){輸出鄰接矩陣;通過for循環,依次按格式輸出鄰接矩陣的元素;} julijuzhen(){根據A的n次方矩陣及其中元素,判斷并顯示兩結點間的距離;for循環,根據輸入結點的關系,將矩陣中相應的元素賦值,有關系則為1;} 調用子函數linjiejuzhen(),以確定并顯示距離為1的兩結點;通過for循環顯示距離為1的結點對;再通過一系列的for循環,計算A的n次方矩陣并顯示結果,根據其中的元素,判斷并顯示結點間的距離;詳細算法請見附錄相關部分的注釋;} kedajuzhen(){求可達矩陣;通過一系列for循環,根據公式,計算可達矩陣;通過for循環,將矩陣中不為0的一切值賦為1以生成可達矩陣并顯示;通過for循環和if條件句的組合,根據可達矩陣的元素特點,判斷圖的連通性,若可達矩陣矩陣中有0,則跳出循環,顯示不可連接;根據判斷結果顯示內容,不可連通或可連通;} 離散數學實驗三實驗報告

第三章 實驗數據及結果分析

3.1建立圖的鄰接矩陣并判斷圖是否連通的功能測試及結果分析

簡單無向圖的輸入界面友好,有清楚的操作說明,方便用戶進行使用。

這就是集合的輸入界面。3.1.1輸入無向圖的邊 當“6,5”時,表示輸入的是六個節點五條邊的樹。

程序會在屏幕上顯示輸入節點間關系的界面,輸入的關系為“1,2;2,3;3,4;4,5;5,6” 離散數學實驗三實驗報告

3.1.2建立圖的連接矩陣

程序返回主界面后,選擇“2”,程序會顯示建立的連接矩陣。離散數學實驗三實驗報告

3.2 其他功能的功能測試和結果分析

3.2.1計算節點間的距離 當選擇“3”時,程序便會輸出各節點間的距離。

3.2.2判斷圖的連通性

當選擇“4”時,程序會根據可達矩陣判斷圖的連通性。離散數學實驗三實驗報告

3.2.3輸出圖的連通支

當選擇“5”時,程序會輸出個連通支。

3.2.4退出系統

當選擇“6”時,程序會退出系統。離散數學實驗三實驗報告

第四章 實驗收獲和心得體會

4.1 實驗收獲

這次離散數學實驗是基于圖論方面知識,以圖的各種矩陣為基礎,來研究圖的一些性質、特點。

我獨立完成了本次實驗設計,實現了A、B、C三個功能,滿足了實驗的基本要求,心得如下。

通過這次實驗,我學會了用C語言根據圖的矩陣表示法建立鄰接矩陣A,并利用矩陣的乘法和加法求出可達矩陣,從而判斷圖的連通性。鞏固了課堂所學的圖論方面的有關知識,并在實踐中學到:圖中兩點i,j間的距離可以通過檢驗Al中使得aij為1的最小的l值求出;圖的連通支的求法可采用圖的遍歷算法,圖的遍歷有深度優先和廣度優先兩種方法,其中深度優先算法又分為遞歸和非遞歸兩種。我選擇的算法是較為簡單、易于實現的深度優先算法最簡單,查閱了相關資料,掌握了此算法的核心,最后獨立完成了本次實驗設計。

這次離散數學實驗,從拿到題目到完成整個編程,從理論到實踐的日子里,我學到很多東西,不僅可以鞏固了以前所學過的知識,而且通過查閱相關資料,學到了很多在書本上所沒有學到過的知識。在這段時間里,我對于離散數學中的“邏輯”有了進一步的理解,對C語言的理解也更進了一步,并提高了編寫實驗報告、總結實驗結果的能力,提高了理論聯系實際的能力,初步具備程序設計的思想,能夠獨立完成簡單的算法設計和分析。

感受最深的是,大量的上機實踐是成為“編程高手”的必由之路,“質變”需要有“量”的積累。

完成程序的編寫,決不意味著萬事大吉。曾經自己認為萬無一失的程序,實際上機運行時可能不斷出現麻煩,如編譯程序檢測出一大堆錯誤。有時程序本身不存在語法錯誤,也能夠順利運行,但是運行結果顯然是錯誤的。開發環境所提供的編譯系統無法發現這種程序邏輯錯誤,只能靠自己的上機經驗分析判斷錯誤所在。有時候一個小小錯誤會消耗我好的時間去找,而高手一眼就看出錯誤所在,這就是熟練程度的不同,量變到質變的不同。離散數學實驗三實驗報告

4.2 心得體會

這次真的使我意識到了很多原來沒有意識到的問題,有時候一些很小的問題,也會令人很是頭痛。

在剛開始編寫程序的時候,為了實現最基本的輸入和輸出功能,我卻花了大量的時間在那上面。原因在后來查閱的很多資料后才知道的,像scanf函數之類的小函數,其實是還有很多需要注意的地方的。

之后,在編寫數組和指針的過程中,花了很大的一部分時間去研發算法,開發程序,在理論上反復證明沒有問題之后,再在計算機上進行操作,編寫代碼,進行調試,反復了很久,才慢慢的實現了全部的功能,真的是來之不易。在實驗的過程中我們要培養自己的獨立分析問題,和解決問題的能力。培養這種能力的前題是你對每次實驗的態度。如果你在實驗這方面很隨便,抱著等老師教你怎么做,拿同學的報告去抄,盡管你的成績會很高,但對將來工作是不利的。在寫實驗報告,對于思考題,有很多不懂,于是去問老師,老師的啟發了我,其實答案早就擺在報告中的公式,電路圖中,自己要學會思考。

最后,通過這次的實驗我不但對理論知識有了更加深的理解,對于實際的操作和也有了質的飛躍。經過這次的實驗,我們整體對各個方面都得到了不少的提高,希望以后學校和系里能夠開設更多類似的實驗,能夠讓我們得到更好的鍛煉。離散數學實驗三實驗報告

第五章 實驗源程序清單

5.1 程序代碼

#include /*頭文件*/ #include #include

#define MAX 100/*宏定義*/ typedef struct { int elem[MAX];

int top;}SqStack;/*定義棧的結構體,順序棧的類型標識符*/

void shuru();/*各子函數聲明*/ void linjiejuzhen();void julijuzhen();void kedajuzhen();void liantongzhi();void DFS(int a);

int A[9][9],B[9][9],C[9][9],D[9][9];int i,j,k,t,v,e;int main(){ int a1;離散數學實驗三實驗報告

printf(“*********************************************************************start:

{ printf(”n“);do **********n”);

printf(“n”);printf(“tttt系

單n”);printf(“ntt1.輸入無向圖的邊ntt2.建立圖的鄰接矩陣ntt3.計算節點間的距離n”);printf(“tt4.由可達矩陣判斷圖的連通性ntt5.輸出各個連通支(深度優先DFS法)ntt6.退出系統n”);

printf(“********************************************************************* printf(”n“);***********n”);

printf(“n”);printf(“ntttt請輸入功能選項:”);fflush(stdin);/*清空輸入緩沖區,通常是為了確保不影響后面的數據讀取*/ scanf(“%d”,&a1);switch(a1)/*switch語句實現選擇功能*/ { case 1:system(“cls”);shuru();break;/*輸入節點關系,計算鄰接矩陣*/ case 2:system(“cls”);fflush(stdin);linjiejuzhen();break;/*輸出鄰接矩陣*/ case 3:system(“cls”);fflush(stdin);julijuzhen();break;/*求距離矩陣*/ case 4:system(“cls”);fflush(stdin);kedajuzhen();break;/*求可達矩陣*/ 離散數學實驗三實驗報告

}

void liantongzhi()/*求連通支,此子函數控制遍歷每個結點*/ {

} void DFS(int a)/*由深度優先DFS法求出并顯示各個連通支*/ {

int i,x;int top=0;int visited[MAX];SqStack s;/*定義s為順序棧變量*/ for(i=0;i<100;i++)visited[i]=0;/*初始化為0*/

case 5:system(“cls”);fflush(stdin);liantongzhi();break;/*求連通支*/ case 6:system(“exit”);exit(0);/*結束整個程序的運行*/ default:system(“cls”);goto start;/*控制流轉移到start處*/ } }while(1);

for(i=1;i<=v;i++){

} printf(“%d”,i);DFS(i);/*調用子函數求連通支*/ printf(“n”);離散數學實驗三實驗報告

}

void shuru()/*輸入結點關系*/ {

printf(“*********************************************************************visited[a-1]=1;/*為a置已訪問標志,已經訪問了的元素為1*/ top=top+1;

s.elem[top]=a-1;/*順序棧的第一個元素*/ while(top!=0)/*棧不為空時執行循環*/ {

} x=s.elem[top];/*將棧頂元素付給x*/ for(i=0;i

if(D[x][i]!=0 &&(!visited[i]))/*若x,i是邊和節點i未被訪問過*/ {

} printf(”->%d“,i+1);visited[i]=1;/*為i置已訪問標準*/ top=top+1;

s.elem[top]=i;/*i進棧*/ break;if(i==v)/*若v已訪問到的出點,則將其退棧*/ top--;

**********n”);printf(“n”);離散數學實驗三實驗報告

printf(“tt請輸入結點數和邊數(形式如6,5):n”);scanf(“%d,%d”,&v,&e);/*輸入結點和邊數*/ for(i=0;i

}

for(j=0;j

}

A[i][j]=0;C[i][j]=0;B[i][j]=0;D[i][j]=0;

printf(“n”);printf(“*******************************************************************************n”);

printf(“tt請輸入結點間的關系(形式如:1,2):n”);printf(“n”);

for(k=0;k

scanf(“%d,%d”,&i,&j);

A[i-1][j-1]=1;/*根據輸入結點的關系,將矩陣中相應的元素賦值*/ A[j-1][i-1]=1;

B[i-1][j-1]=1;B[j-1][i-1]=1;

D[i-1][j-1]=1;離散數學實驗三實驗報告

}

void linjiejuzhen()/*輸出鄰接矩陣*/ {

}

void julijuzhen()/*根據A的n次方矩陣及其中元素,判斷并顯示兩結點間的距離*/ {

linjiejuzhen();/*調用子函數,以確定并顯示距離為1的兩結點*/ for(i=1;i<=v;i++){ } D[j-1][i-1]=1;

system(“cls”);

printf(“鄰接矩陣A為:n”);for(i=0;i

} printf(“n”);

for(j=0;j

printf(“t%5d”,A[i][j]);/*顯示鄰接矩陣*/

for(j=1;j<=v;j++)離散數學實驗三實驗報告

} for(k=2;k<=v-1;k++)/*計算并顯示距離大于1的兩節點*/ {

} }

printf(“nn”);printf(“距離為%d的矩陣(即A%d)為:n”,k,k);{

for(i=0;i

{

} if(A[i-1][j-1]==1)printf(“結點%d與結點%d的距離為:%dn”,i,j,1);for(j=0;j

for(t=0;t

C[i][j]=C[i][j]+B[i][t]*A[t][j];/*計算矩陣中的元素*/ for(i=0;i

for(j=0;j

}

B[i][j]=C[i][j];/*將計算出的結果賦予B矩陣*/ C[i][j]=0;

for(i=0;i

{

}

for(j=0;j

printf(“n”);for(i=1;i<=v;i++)

for(j=1;j<=v;j++){ if(A[i-1][j-1]==0 && B[i-1][j-1]!= 0 && i!=j)/*判斷條件,以確定輸出對象(相關的點)*/

}

void kedajuzhen()/*求可達矩陣*/ {

int l=1;printf(“可達矩陣為:n”);for(i=0;i

for(j=0;j

} printf(“n”);} printf(“結點%d與結點%d的距離為:%dn”,i,j,k);B[i][j]=A[i][j];離散數學實驗三實驗報告

}

}

C[i][j]=0;

}

} C[i][j]=0;

for(k=0;k

for(i=0;i

for(j=0;j

for(t=0;t

C[i][j]=C[i][j]+B[i][t]*A[t][j];/*根據公式計算可達矩陣*/ for(i=0;i

for(j=0;j

D[i][j]=C[i][j]+D[i][j];/*根據公式計算可達矩陣*/

for(i=0;i

for(j=0;j

B[i][j]=C[i][j];/*根據公式計算可達矩陣*/

for(i=0;i

{

}

for(j=0;j

D[i][j]=1;

if(D[i][j]>=1)/*將矩陣中不為0的一切值賦為1以生成可達矩陣*/ for(i=0;i

}

for(j=0;j

printf(“t%5d”,D[i][j]);/*顯示可達矩陣*/ printf(“n”);

for(i=0;i

} if(l==0)/*根據上一步判斷結果顯示內容*/ else printf(“ntttt該圖可連通!”);printf(“ntttt該圖不連通!”);

for(j=0;j #include 離散數學實驗三實驗報告

#include using namespace std;typedef int datatype;typedef struct node { datatype key;struct node *lchild,*rchild;}bsnode;typedef bsnode *bstree;void insertbstree(bstree *t,datatype x){ bstree f,p;p = *t;//cout<

{

//if(x ==(p->key))//

// return;

f = p;

if(x < p->key)

p = p->lchild;

else

p = p->rchild;離散數學實驗三實驗報告

//f = p;} //f = p;p =(bstree)malloc(sizeof(bsnode));

p->key = x;p->lchild=p->rchild=NULL;if(*t == NULL)

*t = p;else {

if(x <(f->key))

f->lchild = p;

else

f->rchild = p;}

} bstree creatbstree(bstree t){

datatype key;離散數學實驗三實驗報告

//scanf(“%d”,&key);cin>>key;while(key!=-1){

insertbstree(&t,key);

//scanf(“%d”,&key);

cin>>key;}

return t;}

void inorder(bstree t)

{

if(t)

{

inorder(t->lchild);

printf(“%d ”,t->key);inorder(t->rchild);

}

}

int main(void){

bstree t = NULL,p;

離散數學實驗三實驗報告

//printf(“請輸入一個-1為結束標記的結點序列:n”);cout<<“創建一個輸入-1為作為結束標記:排序二叉樹:”<

//inorder(creatbstree(t));inorder(p);return 0;}

下載中南大學多媒體實驗報告[5篇模版]word格式文檔
下載中南大學多媒體實驗報告[5篇模版].doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    中南大學數字圖像處理實驗報告5篇

    實 驗 報 告 實驗名稱 課程名稱 圖像變換及頻域濾波數字圖像處理 姓名 成 績 班級 學號 日期 地點 實驗一 圖像變換及頻域濾波 一.實驗目的 (1)編寫快速傅里葉變換算法程......

    中南大學化工原理仿真實驗報告

    化工原理計算機仿真實驗 班級:化學工程與工藝1102班 姓名:王翔 學號:1505110321 日期:2014年1月1日本套軟件系統包括8個單元仿真實驗: 實驗一 離心泵性能的測試 實驗二 管道阻力......

    中南大學單片機實驗報告..(含五篇)

    中南大學信息科學與工程學院微控制器技術實驗報告 微控制器技術實驗報告 中南大學信息科學與工程學院微控制器技術實驗報告 目錄 一、實驗目的及要求 .........................

    多媒體實驗報告

    多媒體技術 班級:網絡 姓名:李耿卓 學號:1202 3120610050 多媒體中的多媒體通信技術 1、交互性。交互性是多媒體通信系統區別于其他通信系統的重要標志,它是指在通信系統......

    中南民族大學 數據庫實驗報告

    實 驗 二數據完整性技術 一、實驗目的和要求 1.熟悉SQL Server2005的開發環境; 2.熟悉 SQL Server Management Studio 的基本操作,進一步理解數據庫、表、 表間關系的概念。 3.掌......

    中南大學

    中南大學 一、申請條件 1.擁護中國共產黨的領導,具有良好的思想品德和政治素質,遵紀守法,在校期間未受過任何法紀處分,身心健康。 2.經教育部批準具有推薦免試攻讀碩士學位研究生......

    中南大學通信原理實驗報告實驗二 數字調制

    中南大學 《通信原理》 實 驗 報 告 學生姓名 學生學號 學 院 信息科學與工程學院專業班級 完成時間 實驗二 數字調制 一、實驗目的 1、掌握絕對碼、相對碼概念及它們之間......

    中南大學自薦信

    中南大學自薦信模板 中南大學自薦信模板1 尊敬的老師:您好!感謝您在百忙之中審閱我的申請材料。希望這是我成功的開始!我叫張XX,就讀于山西省長治中學高三理科班。作為一名成長......

主站蜘蛛池模板: 一色屋精品视频在线观看免费| 少妇激情a∨一区二区三区| 一二三四视频社区在线| 久久无码高潮喷水抽搐| 成人中文乱幕日产无线码| 无码乱码av天堂一区二区| 国产高潮流白浆视频| 高潮抽搐潮喷毛片在线播放| 国产精品久久综合免费| 国产欧美69视频一区二区| 18禁黄久久久aaa片| 国产精品久久成人网站| 亚洲精品无码成人片久久不卡| 国产成人午夜精华液| 一区二区三区波多野结衣在线观看| 亚洲动漫精品无码av天堂| 在线播放无码字幕亚洲| 一本久道综合在线无码88| 天堂√最新版中文在线天堂| 潮喷失禁大喷水aⅴ无码| 亚洲人亚洲精品成人网站入口| 中文字幕熟妇人妻在线视频| 精品视频无码一区二区三区| 欧美熟妇的性裸交| aa区一区二区三无码精片| 天干天干天啪啪夜爽爽99| 久久精品中文无码资源站| 亚洲色最新高清av网站| 无码h肉动漫在线观看| 变态 另类 欧美 大码 日韩| 精品亚洲成a人片在线观看少妇| 国产三级精品三级在线专区1| 激情综合婷婷色五月蜜桃| 欧美亚洲自偷自拍 在线| a级毛片在线观看| 日射精情感性色视频| 日本高清va在线播放| 日本一区二区三区精品福利视频| 老司机导航亚洲精品导航| 人妻中文无码就熟专区| 午夜婷婷精品午夜无码a片影院|