A. q綁查詢原理
原理:資料庫原理,數據功能,關鍵在於社工庫的數據來源。
在QQ資料查詢中,輸入了相應的QQ號,發現可以查到此號碼幾年前使用過的昵稱,以及加入過的QQ群組的情況。
B. 用cnn時必須用mnist.uint8資料庫嗎
首先上搜索引擎,無論是網路還是google,搜「MNIST」第一個出來的肯定是
http://yann.lecun.com/exdb/mnist/ 沒錯,就是它!這個網頁上面有四個壓縮包的鏈接,下載下來吧少年!然後別忙著關掉這個網頁,因為後面的讀取數據還得依靠這個網頁的說明。
下面用其中一個包t10k-images_idx3為例子,寫代碼說明如何使用這個資料庫。
這是從verysource.com上面下載的源碼,贊一個!and再贊一個!
% Matlab_Read_t10k-images_idx3.m
% 用於讀取MNIST數據集中t10k-images.idx3-ubyte文件並將其轉換成bmp格式圖片輸出。
% 用法:運行程序,會彈出選擇測試圖片數據文件t10k-labels.idx1-ubyte路徑的對話框和
% 選擇保存測試圖片路徑的對話框,選擇路徑後程序自動運行完畢,期間進度條會顯示處理進度。
% 圖片以TestImage_00001.bmp~TestImage_10000.bmp的格式保存在指定路徑,10000個文件佔用空間39M。。
% 整個程序運行過程需幾分鍾時間。
% Written By DXY@HUST IPRAI
% 2009-2-22
clear all;
clc;
%讀取訓練圖片數據文件
[FileName,PathName] = uigetfile('*.*','選擇測試圖片數據文件t10k-images.idx3-ubyte');
TrainFile = fullfile(PathName,FileName);
fid = fopen(TrainFile,'r'); %fopen()是最核心的函數,導入文件,『r』代表讀入
a = fread(fid,16,'uint8'); %這里需要說明的是,包的前十六位是說明信息,從上面提到的那個網頁可以看到具體那一位代表什麼意義。所以a變數提取出這些信息,並記錄下來,方便後面的建立矩陣等動作。
MagicNum = ((a(1)*256+a(2))*256+a(3))*256+a(4);
ImageNum = ((a(5)*256+a(6))*256+a(7))*256+a(8);
ImageRow = ((a(9)*256+a(10))*256+a(11))*256+a(12);
ImageCol = ((a(13)*256+a(14))*256+a(15))*256+a(16);
%從上面提到的網頁可以理解這四句
if ((MagicNum~=2051)||(ImageNum~=10000))
error('不是 MNIST t10k-images.idx3-ubyte 文件!');
fclose(fid);
return;
end %排除選擇錯誤的文件。
savedirectory = uigetdir('','選擇測試圖片路徑:');
h_w = waitbar(0,'請稍候,處理中>>');
for i=1:ImageNum
b = fread(fid,ImageRow*ImageCol,'uint8'); %fread()也是核心的函數之一,b記錄下了一副圖的數據串。注意這里還是個串,是看不出任何端倪的。
c = reshape(b,[ImageRow ImageCol]); %亮點來了,reshape重新構成矩陣,終於把串轉化過來了。眾所周知圖片就是矩陣,這里reshape出來的灰度矩陣就是該手寫數字的矩陣了。
d = c'; %轉置一下,因為c的數字是橫著的。。。
e = 255-d; %根據灰度理論,0是黑色,255是白色,為了弄成白底黑字就加入了e
e = uint8(e);
savepath = fullfile(savedirectory,['TestImage_' num2str(i,'d') '.bmp']);
imwrite(e,savepath,'bmp'); %最後用imwrite寫出圖片
waitbar(i/ImageNum);
end
fclose(fid);
close(h_w);
在選擇好的路徑中,就有了一大堆MNIST的手寫數字的圖片。想弄哪個,就用imread()弄它!
C. 求VB注冊發送到資料庫的和登陸 源碼 註明是伺服器資料庫
讓他兒童團厄爾額熱哦 額熱土額
D. 求網站源碼,仿糗事百科網站源碼+資料庫(php+mysql)
上面的幾條回答都很有道理,只能說給你盡量實現。互聯網的宗旨是分享沒錯,但是付出了腦力,免費是相對的!
E. 網上下載了一個C#的資料庫工資管理系統,文件夾里寫明要修改下面的代碼才能連接資料庫,請問該怎麼改呢
把這個<add key="ConString" value="Server=.;database=hr;uid=sa;pwd=sa" />改成你的資料庫連接賬號、密碼
F. 求java 注冊登錄 連接到資料庫的源代碼。
package cc.icoc.javaxu.;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class MySQLOprea { /** * 增加記錄 INSERT INTO 表名(欄位名,欄位名) VALUES (值,值); * 刪除記錄 DELETE FROM 表名 WHERE 條件() * 修改記錄 UPDATE 表名 SET 欄位=值,欄位=值 WHERE 條件 * 查詢記錄 SELECT 欄位,欄位 FROM 表名 WHERE 條件 */ ResultSet rs = null; Connection conn = null; Statement statement = null; //鏈接 public Connection connSQL() { String DRIVER = "com.mysql.jdbc.Driver";// 資料庫驅動 String URL = "jdbc:mysql://localhost:3306/mydata?useUnicode=true&characterEncoding=gb2312";// String DBNAME = "root";// 用戶名 String DBPASS = "341341";// 密碼 try { Class.forName(DRIVER).newInstance();// 注冊驅動 conn = DriverManager.getConnection(URL, DBNAME, DBPASS); statement = conn.createStatement(); } catch (Exception e) {} return conn; } //增 /** * 插入新記錄的操作 * @param table 表名 * @param userName 插入的用戶名 * @param passWord 插入的用戶密碼 * @return true代表插入成功,false代表插入失敗 */ public String insert(String table, String userName, String passWord) { connSQL(); String s = "注冊成功"; try { String insert = "insert into "+table+"(userName,passWord) values ("+"'"+userName+"'"+","+"'"+passWord+"'"+")"; statement.executeUpdate(insert); closeDB(); } catch (Exception e) { // TODO: handle exception s = "注冊失敗"+e.toString(); } return s; } //刪 public void delete(String table, String whereValue) throws SQLException { String delete = "Delete from "+table+" where userName = "+whereValue; statement.executeUpdate(delete); } //改 public void update(String table, String whereValue , String newValue) throws SQLException { String update = "Update "+table+" set passWord ="+newValue+" where userName ="+whereValue; statement.executeUpdate(update); } //查 public String query(String table , String whereValue1 ,String whereValue2, String whatCol1, String whatCol2) throws SQLException { connSQL(); String query = null;// ResultSet set= null; try { query = "select "+whatCol1+","+whatCol2+" from "+table +" where "+whatCol1+"="+'"'+whereValue1+'"'+" and "+whatCol2+"="+'"'+whereValue2+'"'; rs = statement.executeQuery(query); closeDB(); } catch (Exception e) { // TODO: handle exception return "false exception:"+e.toString(); } if(rs.next()) { return "true:"; } return "false:"; } private void closeDB() { // TODO Auto-generated method stub try { if(rs != null) { rs.close(); } if(statement != null) { statement.close(); } if(conn != null) { conn.close(); } } catch (Exception e) { // TODO: handle exception System.out.println("資料庫關閉時出現異常"); } }}
G. 辭言Q綁在線查詢+-+QQ資料庫
摘要 您好很高興為您服務。QQ快查APP
H. type 8E是什麼文件系統
Snort分析報告
1.--snort的簡介
snort 是一個基於libpcap的數據包嗅探器並可以作為一個輕量級的網路入侵檢測系統(
NIDS)。所謂的輕量級是指在檢測時盡可能低地影響網路的正常操作,一個優秀的輕量
級的NIDS應該具備跨系統平台操作,對系統影響最小等特徵並且管理員能夠在短時間內
通過修改配置進行實時的安全響應,更為重要的是能夠成為整體安全結構的重要成員。
Snort作為其典型範例,首先可以運行在多種操作系統平台,例如UNIX系列和Windows 9
X.(需要libpcap for Win32的支持),與很多商業產品相比,它對操作系統的依賴性比
較低。其次用戶可以根據自己的需要及時在短時間內調整檢測策略。就檢測攻擊的種類
來說,據最新數據表明(2000/12/4)snort共有21類(???)1271條檢測規則,其中包括
對緩沖區溢出,埠掃描和CGI攻擊等等。SNORT集成了多種告警機制來提供實時告警功
能,包括:syslog、用戶指定文件、UNIXSocket、通過SMBClient使用WinPopup對Windo
ws客戶端告警。 Snort的現實意義維作為開源軟體填補了只有商業入侵檢測系統的空白
,可以幫助中小網路的系統管理員有效地監視網路流量和檢測入侵行為。
2.snort與其他工具的比較。
Snort的主要用途就是網路監視、數據包的記錄和檢測入侵行為,下面是與分別具有上述
兩種功能的典型工具的比較。
1)--snort與tcpmp的比較
Tcpmp是最為經典的嗅探工具,主要是用於記錄網路數據,網路故障的探測診斷工具。
Snort與它的最大的共同之處在於都是基於libpcap的並且支持BPF過濾機制,所以本質上
都是調用的捕獲數據包的庫函數,但是snort的目的不僅僅是在於記錄這個數據包而是從
安全的角度考慮出發區解析它,並且tcpmp主要是分析第二層或者第三層的報文來進行
網路故障診斷,而snort則主要針對於應用層的數據進行分析從而實現檢測入侵行為。除
此之外,由於tcpmp旨在快速完整地記錄流量,所以它制定了特殊的輸出格式,速度快
但是不易看懂,而snort就提供了更為友好的輸出格式,有利於系統管理員的直接分析。
--Figure 1 - Typical Snort telnet packet display:
--------------------------------------------------------------------------
20:59:49.153313 0:10:4B:A9:66 -> 0:60:97:7:C2:8E type:0x800 len:0x7D
192.168.1.3:23 -> 192.168.1.4:1031 TCP TTL:64 TOS:0x10 DF
***PA* Seq: 0xDF4A6536 Ack: 0xB3A6FD01 Win: 0x446A
FF FA 22 03 03 E2 03 04 82 0F 07 E2 1C 08 82 04 ..".............
09 C2 1A 0A 82 7F 0B 82 15 0F 82 11 10 82 13 FF ................
F0 0D 0A 46 72 65 65 42 53 44 20 28 65 6C 72 69 ...FreeBSD (elri
63 2E 68 6F 6D 65 2E 6E 65 74 29 20 28 74 74 79 c.home.net) (tty
70 30 29 0D 0A 0D 0A p0)....
---------------------------------------------------------------------------
--Figure 2 - The same telnet packet as displayed by tcpmp:
---------------------------------------------------------------------------
20:59:49.153313 0:10:4b:d:a9:66 0:60:97:7:c2:8e 0800 125: 192.168.1.3.23 >
192.168.1.4.1031: P 76:147(71) ack 194 win 17514 (DF) [tos 0x10] (ttl 64,
id 660)
4510 006f 0294 4000 4006 b48d c0a8 0103
c0a8 0104 0017 0407 df4a 6536 b3a6 fd01
5018 446a d2ad 0000 fffa 2203 03e2 0304
820f 07e2 1c08 8204 09c2 1a0a 827f 0b82
150f 8211 1082 13ff f00d 0a46 7265 6542
5344 2028 656c 7269 632e 686f 6d65 2e6e
6574 2920 2874 7479 7030 290d 0a0d 0a
---------------------------------------------------------------------------
2)--snort與NFR的比較
根據Denmac System公司1999年11月的現有商用網路入侵檢測工具的調查結果表明,NFR
的綜合性能指數高於ISS公司的RealSecure和CA公司的SessionWall,所以其代表了目前
國際上的IDS的最高水準,是一個比較成熟的商業產品。Snort的許多設計思想類似於NF
R,但是在很多方面都顯出不足之處,例如無法實現IP Defragmentation等功能,在探測
規則語言的格式上來說,NFR採用的是一種深層次的腳本語言,SNORT與其相比就略顯單
薄。但是snort的優勢就在於它是開源軟體,全世界的愛好者都可以加入它的開發升級工
作中來,其前景是無法限量的。
2.--原理
snort作為一個NIDS[註:基於網路的入侵檢測系統(NIDS),其工作原理為在基於共享
網路上檢測原始的網路傳輸數據,通過分析捕獲的數據包,主要工作為匹配入侵行為的
特徵或者從網路活動的角度檢測異常行為,進而採取入侵的預警或記錄。從檢測模式而
言,snort屬於是誤用檢測(misuse detection)。[註:該方法對已知攻擊的特徵模式
進行匹配,包括利用工作在網卡混雜模式下的嗅探器被動地進行協議分析,以及對一系
列數據包解釋分析特徵。]從本質上上來說,snort是基於規則檢測的入侵檢測工具,即
針對每一種入侵行為,都提煉出它的特徵值並按照規范寫成檢驗規則,從而形成一個規
則資料庫。其次將捕獲得數據包按照規則庫逐一匹配,若匹配成功,則認為該入侵行為
成立。目前,snort的檢測規則庫主要包括了以下幾類的入侵行為:
snort的結構主要分為三個部分如圖n-1:
l--數據包捕獲和解析子系統(Capture Packet Mechanism from link layer and the
packet decoder ):
該子系統的功能為捕獲網路得傳輸數據並按照TCP/IP協議的不同層次將數據包進行解析
。Snort利用libpcap庫函數進行採集數據, 該庫函數可以為應用程序提供直接從鏈路層
捕獲數據包的介面函數並可以設置數據包的過濾器以來捕獲指定的數據。(的詳細介紹
請參閱附錄N)。網路數據採集和解析機制是整個NIDS實現的基礎,其中最關鍵的是要保
證高速和低的丟包率,這不僅僅取決於軟體的效率還同硬體的處理能力相關。對於解析
機制來說,能夠處理數據包的類型的多樣性也同樣非常重要,目前,snort可以處理以太
網,令牌環以及SLIP等多種鏈路類型的包。
l--檢測引擎(the detect engine)
檢測引擎是一個NIDS實現的核心,准確性和快速性是衡量其性能的重要指標,前者主要
取決於對入侵行為特徵碼的提煉的精確性和規則撰寫的簡潔實用性,由於網路入侵檢測
系統自身角色的被動性——只能被動的檢測流經本網路的數據,而不能主動發送數據包
去探測,所以只有將入侵行為的特徵碼歸結為協議的不同欄位的特徵值,通過檢測該特
征值來決定入侵行為是否發生。後者主要取決於引擎的組織結構,是否能夠快速地進行
規則匹配。
Snort採用了靈活的插件形式來組織規則庫,即按照入侵行為的種類劃分為相應的插件,
用戶可以根據需要選取對應的插件進行檢測。目前包括的插件分別如下:
每一類插件中包括了數十條的檢測規則,分別代表同一類型的不同入侵行為。對於規則
的定義,snort使用了一種簡單的,輕量級的規則描述語言,上述已經提及到檢測的最終
行為就是檢測數據包中協議的不同欄位,例如埠號就是重要的入侵線索。為了更為清
楚地闡述這個問題,我們舉一例說明:
攻擊名稱--NT IIS Showcode ASP
攻擊種類--獲取非法訪問許可權。
攻擊描述--通過構造特定的URL請求可以非法閱讀伺服器上的其他文件http://attack
host/msadc/Samples/SELECTOR/showcode.asp?source=/msadc/Samples/../../../../.
./boot.ini
入侵特徵碼 --IP地址:保護網段以外的IP地址。
--協議類型:TCP
--埠:80
--TCP標志位:PUS, ACK
--數據段內容:/selector/showcode.asp
CVE ID--CAN-1999-0736
Bugtraq ID --167
分析以上的這個入侵實例,我們可以看出其實檢測該入侵行為的關鍵是判斷埠號和數
據段內容,IP地址、協議類型和TCP標志位只是輔助的特徵碼。但是當開始分析原始數據
包時,是否應該就直接匹配埠和數據段的內容?無疑針對該入侵行為上述做法的匹配
效率是最高的。但是實際上這樣做會降低整體檢測的效率,因為入侵系統要對龐大的網
絡數據逐一進行檢測,應該遵循先檢測所有入侵行為的共同特徵其次才是個體特徵的原
則,例如如果首先檢測IP地址,一旦發現並不屬於檢測范圍之內,就立即檢測下一個數
據包而並非繼續檢測該包的其他欄位。這樣既保證了檢測的快速性,又提高了報警的實
時性。
Snort正是按照上述原則定義規則的,將檢測規則劃分成兩個部分:規則頭和規則選項。
前者是所有規則共有的包括IP地址、協議類型、埠號,後者根據不同規則包括相應的
欄位關鍵字,例如TCP的標志位或者窗口大小等。檢測規則除了包括上述的關於「要檢測
什麼」還應該定義「檢測到了該做什麼」,snort定義了三種處理方式——alert(發送報
警信息),log(記錄該數據包)和pass(忽略該數據包)並定義為規則的第一個匹配關鍵
字,這樣設計的目的非常簡單,旨在在程序中組織整個的規則庫,即將所有的規則按照
處理方式組織成三個鏈表以用於更快速准確地進行匹配,體現了設計者的巧妙之處。
下面我們來舉一實例來具體說明規則的定義:
alert tcp !$HOME_NET any -> $HOME_NET 80 (msg:"CAN-1999-0736 - IIS-showcode"
;flagsA; content:"/selector/showcode.asp"; nocase
該實例正式針對表(N)中所示的入侵行為所定義的檢測規則,通過該例可以看出snort
的規則語言簡明實用,基本格式為:
規則動作 協議類型 IP地址 埠號 -> 協議類型 IP地址 埠號 (規則選項)
源發送方 目的接受方
關於規則的具體書寫規范不再贅述,下面就其關鍵和特別之處加以說明:
1.-- 變數和操作符
snort作為一個NIDS,主要的目的就是能夠保護本網段即及時發現外部網對內部網的攻擊
,所以規則中的IP地址的定義主要是針對外部網和內部網地址兩種。由此snort引入了變
量的機制,即可以在規則中用變數表示IP地址欄位,用戶在運行前可根據實際的子網地
址來定義該變數,這樣在解析檢測規則時snort會自動替換變數值,增加了規則的靈活性
,不過只適應於像IP地址這種基本所有規則都具有同一值。
為了更為准確地表達規則和精確地表示檢測范圍,snort還定義了三類操作符:
l--否定操作符——「 ! 」
用於表示snort還增加了否定符「!」來區分內部網和外部網。例如例n的!$HOME_NET。
l--方向操作符——「->」和」<>」
用於表示傳輸的方向,分別表示單向和雙向傳輸。
l--埠描述符——「 : 」
用於表示埠的范圍。例如: 「600:「表示大於600的埠號。
2. 規則選項
規則選項作為檢測時的重要標准組成了snort入侵檢測引擎的核心,既易用又非常靈活強
大。首先其靈活性是指可以根據不同的不同行為制定相應的檢測選項內容,其次其強大
性是指不僅檢測具有一定的廣度和深度並且定義了檢測到時該做什麼 。snort中有15個
規則選項關鍵字,其中有三個關鍵字是做為檢測到後的回應:
msg - 在報警和包日誌中列印一個消息
logto - 把包記錄到用戶指定的文件中而不是記錄到標准輸出
resp - 主動反應(切斷連接等)
Resp關鍵字可以對匹配一條Snort規則的流量進行靈活的反應(flexible reponse
-FlexResp)。FlexResp代碼允許Snort主動地關閉惡意的連接。該模塊合法的參數如下
:
rst_snd - 向發送方發送TCP-RST數據包
rst_rcv - 向接受方發送TCP-RST數據包
rst_all - 向收發雙方發送TCP_RST數據包
icmp_net - 向發送方發送ICMP_NET_UNREACH
icmp_host - 向發送方發送ICMP_HOST_UNREACH
icmp_port - 向發送方發送ICMP_PORT_UNREACH
icmp_all - 向發送方發送上述所有的ICMP數據包。
作為入侵檢測系統,理論上只需要檢測入侵,並不需要去回應入侵行為的。所以該功能
應該是作為SNORT的附加功能,但是值得一提的是,發送RST和ICMP UNREACH數據包向攻
擊方可以暫緩其對目標主機的攻擊,我們所研究的一個工具叫做dsniff中的tcpkill就是
利用這個原理進行切斷非法連接,但是對於一般的拒絕服務攻擊,該方法的作用就不甚
明顯了。對於SNORT來說,實現該功能必然會降低檢測的的效率尤其是在網路流量特別大
的時候。
另外12中關鍵字都是針對協議中的不同欄位設置的:
關鍵字--檢測內容--主要針對的攻擊行為
ttl--檢測ip頭的ttl的值 --用於對traceroute探測的檢測
id--檢測ip頭的分片id值--黑客的固定攻擊,例如設置為31337
dsize--檢測包的凈荷尺寸的值--緩沖區溢出攻擊。
content--在包的凈荷中搜索指定的樣式--最為重要的一個選項,用於在數據包的數據段
中搜索指定的內容並根據數據觸發響應,可以搜索包含混合的文本和二進制數據。並設
置了三個輔助關鍵字:offset,dsize,nocase
Flags--檢測tcp flags的值--非法埠掃描或者其他非法探測主機操作系統類型等。
Seq--檢測tcp順序號的值--檢測主機發送的序列號集是否是固定的集合。入侵者可以利
用該值冒充合法用戶向被入侵者發送數據,偽裝正常的通信以竊取信息或者其他非法活
動。
Ack--檢測tcp應答(acknowledgement)的值--Nmap的TCP PING會設置該項的值為0,從而
判斷可能正在用Nmap進行非法掃描。
Itype--檢測icmp type的值--拒絕服務攻擊。註:只作為其中的一種特徵。
Icode--檢測icmp code的值--可疑的流量。
Session--記錄指定會話的應用層信息的內容--記錄在TCP會話中的會話數據。
Icmp_id--檢測ICMP ECHO ID的值--
Icmp_seq--檢測ICMP ECHO 順序號的值--
Ipoption--監視IP option的特定代碼--
Rpc--監視特定應用/進程調用的RPC服務--檢測非法的RPC請求,查看RPC請求,並自動將
應用(Application),過程(procere)和程序版本(program version)解碼,如果
所有三個值都匹配的話,該規則就顯示成功。
3.預處理程序
預處理程序從Snort版本1.5開始引入,其代碼在檢測引擎被調用之前先被運行,為檢測
做鋪墊,從而提高檢測的准確性和速度。而且預處理機制採用插件形式,用戶和程序員
能夠將模塊化的插件方便地融入Snort之中。目前snort現有的預處理程序模塊有以下三
種:
l--Minfrag
Minfrag預處理程序檢查給定尺寸限制的分片數據包。數據包被分片通常是由源和目的主
機之間的路由器引起的。一般說來,商業網路設備不會產生小於512位元組的分片包。可以
利用這個事實,來監控含有小分片的流量。
l--HTTP Decode
HTTP Decode用於處理HTTP URI字元串,將串中的數據轉化為可讀的ASCII字串,用於檢
測HTTP的數據信息對付隱蔽的WebURL掃描器和惡意的入侵者。
l--Portscan Detector
Snort Portscan預處理程序的用處:
向標准記錄設備中記錄從一個源IP地址來的埠掃描的開始和結束。
如果指定了一個記錄文件,在記錄掃描類型的同時也記錄目的IP地址和埠。埠掃描
定義為在時間T(秒)之內向超過P個埠進行TCP連接嘗試,或者在時間T(秒)之內向
超過P個埠發送UDP數據包。埠掃描可以是對任一IP地址的多個埠,也可以是對多
個IP地址的同一埠進行。現在這個版本可以處理一對一和一對多方式的埠掃描,下
一個完全版本將可以處理分布式的埠掃描(多對一或多對多)。埠掃描也包括單一
的秘密掃描(stealthscan)數據包,比如NULL,FIN,SYNFIN,XMAS等。如果包括秘密
掃描的話,埠掃描模塊會對每一個掃描數據包告警。
network to monitor - 監視埠掃描的目標網路以network/CIDR表示
number of ports - 在探測期間訪問的埠數目
detection period - 以秒計數的埠訪問時間限制
logdir/filename - 告警信息存放的目錄/文件名,告警也可以寫入標準的告警文件中。
l--日誌及報警子系統(logging/alerting subsystem)
入侵檢測系統的輸出結果系統的必要特徵是實時性和多樣性,前者指能夠在檢測到入侵
行為的同時及時記錄和報警,後者是指能夠根據需求選擇多種方式進行記錄和報警。一
個好的NIDS,更應該提供友好的輸出界面或發聲報警等等。
Snort是一個輕量級的NIDS,它的另外一個重要功能就是數據包記錄器,所以該子系統主
要提供了方式:
1.--fast model :採取TCPDUMP的格式記錄信息
2. readable model :按照協議格式記錄,易於用戶查看。
3.alert to syslog: 向syslog發送報警信息。
4.alert to text file :以明文形式記錄報警信息。
值得提出的是,snort考慮到用戶需要高性能的時候,即網路數據流量非常大,可以將數
據包信息進行壓縮從而實習快速的報警。
3.-- 程序結構
1)--snort的整體結構
snort作為優秀的公開源代碼的入侵檢測系統範例,其整個程序結構清晰,構思巧妙,我
們對於其版本1.6.3的源碼進行了深入的分析。Snort共有64個c文件和h文件,首先介紹
程序的整體結構,其流程圖如下:
其中最為關鍵的函數就是ProcessPacket(),--其流程圖如下:
2)--數據結構--
snort的主要數據結構就是幾個鏈表,上述已經提及,snort組織規則庫的巧妙之處就是
按照規則的處理動作來劃分成三個鏈表,其中每個鏈表又按照協議類型:TCP,IP和ICMP
分成三個鏈表,所以所有的規則都會被分配到這個三個鏈表中。鏈表中的成員就是描述
每條規則的結構——RuleTreeNode,該結構中的一個重要成員就是記錄該規則的處理函
數鏈表——RuleFpList,一條規則有時候需要調用多個處理函數來進行分析。該結構中
的另外一個重要成員就是規則選項的結構,該結構同樣包括該規則的選項信息以及其處
理函數鏈表。
值得提出的是,並不是每一條規則都分配一個RuleTreeNode結構,因為很多規則的選項
前的頭部分是相同的,只需要根據不同的規則選項鏈取不同的選項函數處理鏈表。基本
整體的結構如圖n所示,所有鏈表的初始化都是在捕獲數據包前進行的。
除以上鏈表外,snort還定義了預處理、輸出的關鍵字和處理函數鏈表,設計鏈表的主要
意圖是為了實現插件的思想,即用戶何以根據需求添加刪除預處理的功能模塊。其只要
的數據結構如下:
typedef struct _PreprocessKeywordNode
{
char *keyword;
void (*func)(char *);
} PreprocessKeywordNode;
// 預處理關鍵字信息結構。
typedef struct _PreprocessKeywordList
{
PreprocessKeywordNode entry;
struct _PreprocessKeywordList *next;
} PreprocessKeywordList;
//預處理關鍵字鏈表。
typedef struct _PreprocessFuncNode
{
void (*func)(Packet *);
struct _PreprocessFuncNode *next;
} PreprocessFuncNode;
//預處理函數鏈表。
所有鏈表的初始化都是在捕獲數據包前進行初始化的,一旦鏈表都已建立完畢,開始捕
獲數據包,每收到一個數據包都會現首先調用預處理程序鏈表中的函數進行處理後,其
次按照默認地順序遍歷AlertList,PassList和LogList三個鏈表。遍歷時首先根據數據包
的協議類型定位規則鏈表,其次調用遞歸函數進行規則的逐一匹配,即首先匹配規則頭
,若匹配則繼續遞歸匹配規則選項,若不匹配,直接匹配下一條規則。為了加快遍歷的
速度,snort在規則選項中的」content」內容匹配時調用了Boyer-Moore演算法。
4.--改進
1.--背景
我們認為snort已經具備了NIDS的基本功能,由於它本身定位在一個輕量級的入侵檢測工
具,盡管與商業的入侵檢測工具比起來,它的規則語言略顯簡陋,在報警方式和圖形化
使用界面上也顯露出不足之處,但是程序的整體結構清晰,規則語言簡單實用並提供插
件的功能支持,用戶可以添加自己的檢測規則和處理函數,這對於規則庫的及時更新有
著極為現實的意義。
通過分析,與商業的NIDS相比,SNORT 1.6.3沒有設置對IP 分片包的處理功能,即對於
例如「Teardrop」和「Ping of Death」兩類利用非法IP分片包進行的攻擊無法檢測:
?--teadrop——該攻擊是針對很多操作系統的TCP/IP協議棧沒有正確處理已分段的IP包
的重組。其特徵是發送2個或更多特別的分段IP數據報。第一個包是偏移量為0的段,數
據段(分段長度)位元組是N,並設置了MF位,第二個包是最後一個分段(MF==0),但它的偏移
量小於N,所有造成兩個分段重疊了。為了重組這些包,有弱點的系統就會在TCP/IP棧中
分配非常大的空間,因此導致目標系統因為內存耗盡而停止響應或者重啟。
?--Ping of Death——該攻擊的特正是向攻擊目標發送大量的ICMP分片數據包,當這些
數據包重組時其數據段已經大於65535個位元組,系統會因為無法處理這種數據包而造成拒
絕服務或者重啟。
?--
2.--方案
3.--實現