什麼是FTP?
FTP是英文File Transfer Protocol的縮寫,意思是文件傳輸協議。它和HTTP一樣都是Internet上廣泛使用的協議,用來在兩臺計算機之間互相傳送文件。相比於HTTP,FTP協議要複雜得多。複雜的原因,是因爲FTP協議要用到兩個TCP連接,一個是命令鏈路,用來在FTP客戶端與服務器之間傳遞命令;另一個是數據鏈路,用來上傳或下載數據。
FTP協議有兩種工作方式:PORT方式和PASV方式,中文意思爲主動式和被動式。
PORT(主動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,客戶端在命令鏈路上用PORT命令告訴服務器:“我打開了XXXX端口,你過來連接我”。於是服務器從20端口向客戶端的XXXX端口發送連接請求,建立一條數據鏈路來傳送數據。
PASV(被動)方式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,服務器在命令鏈路上用PASV命令告訴客戶端:“我打開了XXXX端口,你過來連接我”。於是客戶端向服務器的XXXX端口發送連接請求,建立一條數據鏈路來傳送數據。
從上面可以看出,兩種方式的命令鏈路連接方法是一樣的,而數據鏈路的建立方法就完全不同。而FTP的複雜性就在於此。
第二個 : HTTP是什麼?
當我們想瀏覽一個網站的時候,只要在瀏覽器的地址欄裏輸入網站的地址就可以了,例如:www.microsoft.com,但是在瀏覽器的地址欄裏面出現的卻是:http://www.microsoft.com ,你知道爲什麼會多出一個“http”嗎?
一、HTTP協議是什麼
我們在瀏覽器的地址欄裏輸入的網站地址叫做URL (Uniform Resource Locator,統一資源定位符)。就像每家每戶都有一個門牌地址一樣,每個網頁也都有一個Internet地址。當你在瀏覽器的地址框中輸入一個URL或是單擊一個超級鏈接時,URL就確定了要瀏覽的地址。瀏覽器通過超文本傳輸協議(HTTP),將Web服務器上站點的網頁代碼提取出來,並翻譯成漂亮的網頁。因此,在我們認識HTTP之前,有必要先弄清楚URL的組成,例如:http://www.microsoft.com/china/index.htm。它的含義如下:
1. http://:代表超文本傳輸協議,通知microsoft.com服務器顯示Web頁,通常不用輸入;
2. www:代表一個Web(萬維網)服務器;
3. Microsoft.com/:這是裝有網頁的服務器的域名,或站點服務器的名稱;
4. China/:爲該服務器上的子目錄,就好像我們的文件夾;
5. Index.htm:index.htm是文件夾中的一個HTML文件(網頁)。
我們知道,Internet的基本協議是TCP/IP協議,然而在TCP/IP模型最上層的是應用層(Application layer),它包含所有高層的協議。高層協議有:文件傳輸協議FTP、電子郵件傳輸協議SMTP、域名系統服務DNS、網絡新聞傳輸協議NNTP和HTTP協議等。
HTTP協議(Hypertext Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先於圖形)等。這就是你爲什麼在瀏覽器中看到的網頁地址都是以http://開頭的原因。
自WWW誕生以來,一個多姿多彩的資訊和虛擬的世界便出現在我們眼前,可是我們怎麼能夠更加容易地找到我們需要的資訊呢?當決定使用超文本作爲WWW文檔的標準格式後,於是在1990年,科學家們立即制定了能夠快速查找這些超文本文檔的協議,即HTTP協議。經過幾年的使用與發展,得到不斷的完善和擴展,目前在WWW中使用的是HTTP/1.0的第六版。
二、HTTP是怎樣工作的
既然我們明白了URL的構成,那麼HTTP是怎麼工作呢?我們接下來就要討論這個問題。
由於HTTP協議是基於請求/響應範式的(相當於客戶機/服務器)。一個客戶機與服務器建立連接後,發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和可能的內容。服務器接到請求後,給予相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。
許多HTTP通訊是由一個用戶代理初始化的並且包括一個申請在源服務器上資源的請求。最簡單的情況可能是在用戶代理和服務器之間通過一個單獨的連接來完成。在Internet上,HTTP通訊通常發生在TCP/IP連接之上。缺省端口是TCP 80,但其它的端口也是可用的。但這並不預示着HTTP協議在Internet或其它網絡的其它協議之上才能完成。HTTP只預示着一個可靠的傳輸。
這個過程就好像我們打電話訂貨一樣,我們可以打電話給商家,告訴他我們需要什麼規格的商品,然後商家再告訴我們什麼商品有貨,什麼商品缺貨。這些,我們是通過電話線用電話聯繫(HTTP是通過TCP/IP),當然我們也可以通過傳真,只要商家那邊也有傳真。
以上簡要介紹了HTTP協議的宏觀運作方式,下面介紹一下HTTP協議的內部操作過程。
在WWW中,“客戶”與“服務器”是一個相對的概念,只存在於一個特定的連接期間,即在某個連接中的客戶在另一個連接中可能作爲服務器。基於HTTP協議的客戶/服務器模式的信息交換過程,它分四個過程:建立連接、發送請求信息、發送響應信息、關閉連接。這就好像上面的例子,我們電話訂貨的全過程。
其實簡單說就是任何服務器除了包括HTML文件以外,還有一個HTTP駐留程序,用於響應用戶請求。你的瀏覽器是HTTP客戶,向服務器發送請求,當瀏覽器中輸入了一個開始文件或點擊了一個超級鏈接時,瀏覽器就向服務器發送了HTTP請求,此請求被送往由IP地址指定的URL。駐留程序接收到請求,在進行必要的操作後回送所要求的文件。在這一過程中,在網絡上發送和接收的數據已經被分成一個或多個數據包(packet),每個數據包包括:要傳送的數據;控制信息,即告訴網絡怎樣處理數據包。TCP/IP決定了每個數據包的格式。如果事先不告訴你,你可能不會知道信息被分成用於傳輸和再重新組合起來的許多小塊。
也就是說商家除了擁有商品之外,它也有一個職員在接聽你的電話,當你打電話的時候,你的聲音轉換成各種複雜的數據,通過電話線傳輸到對方的電話機,對方的電話機又把各種複雜的數據轉換成聲音,使得對方商家的職員能夠明白你的請求。這個過程你不需要明白聲音是怎麼轉換成複雜的數據的。
第三個 : ipc$ 是什麼?
IPC$(Internet Process Connection)是共享/"命名管道/"的資源(大家都是這麼說的),它是爲了讓進程間通信而開放的命名管道,可以通過驗證用戶名和密碼獲得相應的權限,在遠程管理計算機和查看計算機的共享資源時使用。
利用IPC$,連接者甚至可以與目標主機建立一個空的連接而無需用戶名與密碼(當然,對方機器必須開了ipc$共享,否則你是連接不上的),而利用這個空的連接,連接者還可以得到目標主機上的用戶列表(不過負責的管理員會禁止導出用戶列表的)。
我們總在說ipc$漏洞ipc$漏洞,其實,ipc$並不是真正意義上的漏洞,它是爲了方便管理員的遠程管理而開放的遠程網絡登陸功能,而且還打開了默認共享,即所有的邏輯盤(c$,d$,e$……)和系統目錄winnt或windows(admin$)。
所有的這些,初衷都是爲了方便管理員的管理,但好的初衷並不一定有好的收效,一些別有用心者(到底是什麼用心?我也不知道,代詞一個)會利用IPC$,訪問共享資源,導出用戶列表,並使用一些字典工具,進行密碼探測,寄希望於獲得更高的權限,從而達到不可告人的目的.
解惑:
1)IPC連接是Windows NT及以上系統中特有的遠程網絡登陸功能,其功能相當於Unix中的Telnet,由於IPC$功能需要用到Windows NT中的很多DLL函數,所以不能在Windows 9.x中運行。
也就是說只有nt/2000/xp纔可以建立ipc$連接,98/me是不能建立ipc$連接的(但有些朋友說在98下能建立空的連接,不知道是真是假,不過現在都2003年了,建議98的同志換一下系統吧,98不爽的)
2)即使是空連接也不是100%都能建立成功,如果對方關閉了ipc$共享,你仍然無法建立連接
3)並不是說建立了ipc$連接就可以查看對方的用戶列表,因爲管理員可以禁止導出用戶列表第四個 : ASP 是什麼?
ASP即Active Server Page的縮寫。它是一種包含了使用VB Script或Jscript腳本程序代碼的網頁。當瀏覽器瀏覽ASP網頁時, Web服務器就會根據請求生成相應的HTML代碼然後再返回給瀏覽器,這樣瀏覽器端看到的就是動態生成的網頁。ASP是微軟公司開發的代替CGI腳本程序的一種應用,它可以與數據庫和其它程序進行交互。是一種簡單、方便的編程工具。在瞭解了VBSCRIPT的基本語法後,只需要清楚各個組件的用途、屬性、方法,就可以輕鬆編寫出自己的ASP系統。ASP的網頁文件的格式是.ASP。
第五個 : 什麼是病毒
下面我們談一談病毒。您以前是否聽說過電腦病毒?不要一聽到病毒就渾身發抖,只要瞭解了病毒,對付起來還是很容易的。
電腦病毒與我們平時所說的醫學上的生物病毒是不一樣的,它實際上是一種電腦程序,只不過這種程序比較特殊,它是專門給人們搗亂和搞破壞的,它寄生在其它文件中,而且會不斷地自我複製並傳染給別的文件,沒有一點好作用。
電腦病毒發作了都會有哪些症狀呢?
電腦染上病毒後,如果沒有發作,是很難覺察到的。但病毒發作時就很容易感覺出來:
有時電腦的工作會很不正常,有時會莫名其妙的死機,有時會突然重新啓動,有時程序會乾脆運行不了。
◎電腦染毒後表現爲:工作很不正常,莫名其妙死機,突然重新啓動,程序運行不了。
有的病毒發作時滿屏幕會下雨,有的屏幕上會出現毛毛蟲等,甚至在屏幕上出現對話框,這些病毒發作時通常會破壞文件,是非常危險的,反正只要電腦工作不正常,就有可能是染上了病毒。病毒所帶來的危害更是不言而喻了。
而且,以前人們一直以爲,病毒只能破壞軟件,對硬件毫無辦法,可是CIH病毒打破了這個神話,因爲它竟然在某種情況下可以破壞硬件!
電腦病毒和別的程序一樣,它也是人編寫出來的。既然病毒也是人編的程序,那就會有辦法來對付它。最重要的是採取各種安全措施預防病毒,不給病毒以可乘之機。另外,就是使用各種殺毒程序了。它們可以把病毒殺死,從電腦中清除出去。
#6
病毒後記 其實現在的病毒,隨着網絡的發展。已經變的更加的複雜。它與黑客技術、木馬等技術相結合,讓你無法輕易查殺!其威害之大,由近期的衝擊波病毒,僅見一斑! 所以大家學習瞭解電腦知識與安全知識,是必不可少的。我們這裏學習黑客等技術,也不是教你如何去攻擊別人,這樣是不道德的,主要是瞭解技術後,用於防範。 再一個,如何做好防範,讓病毒無法入手。纔是最重要的。對於初學的朋友,一個好的殺毒工具是必須的。個人認爲正版的瑞星還是不錯的,其網上升級速度很快,防與殺的效果也很好! =====+++++++=============== 我在普及最基本的知識時,遇到一個難題,我有時不知道該講些什麼?以什麼爲主題呢?所以希望大家在回貼時,如果希望瞭解什麼相關的問題,請提出來。我好跟據提問,來安排主題! 對於所發佈的主題,如有不明白的,也請及時提出,我會盡力作出完美的解答! |
|
|
肉雞就是具有最高管理權限的遠程電腦。簡單的說就是受你控制的遠程電腦。肉雞可以是win、Unix/Linux……等各種系統;肉雞可以是一家公司的服務器,一家網站的服務器,甚至是美國白宮或軍方的電腦,只要你有這本事入侵併控制他,呵呵。萊鳥所說用的肉雞一般是開了3389端口的Win2K系統的服務器。
要登陸肉雞,必須知道3個參數:遠程電腦的IP、用戶名、密碼。
第八個:什麼是shell
操作系統與外部最主要的接口就叫做shell。shell是操作系統最外面的一層。shell管理你與操作系統之間的交互:等待你輸入,向操作系統解釋你的輸入,並且處理各種各樣的操作系統的輸出結果。
shell提供了你與操作系統之間通訊的方式。這種通訊可以以交互方式(從鍵盤輸入,並且可以立即得到響應),或者以shell script(非交互)方式執行。shell script是放在文件中的一串shell和操作系統命令,它們可以被重複使用。本質上,shell script是命令行命令簡單的組合到一個文件裏面。
Shell基本上是一個命令解釋器,類似於DOS下的command.com。它接收用戶命令(如ls等),然後調用相應的應用程序。較爲通用的shell有標準的Bourne shell (sh)和C shell (csh)。
交互式shell和非交互式shell
交互式模式就是shell等待你的輸入,並且執行你提交的命令。這種模式被稱作交互式是因爲shell與用戶進行交互。這種模式也是大多數用戶非常熟悉的:登錄、執行一些命令、簽退。當你簽退後,shell也終止了。
shell也可以運行在另外一種模式:非交互式模式。在這種模式下,shell不與你進行交互,而是讀取存放在文件中的命令,並且執行它們。當它讀到文件的結尾,shell也就終止了。
shell的類型
在UNIX中主要有兩大類shell
Bourne shell (包括 sh, ksh, and bash)
Bourne shell ( sh)
Korn shell ( ksh)
Bourne Again shell ( bash)
POSIX shell ( sh)
C shell (包括 csh and tcsh)
C shell ( csh)
TENEX/TOPS C shell ( tcsh)
Bourne Shell
最初的UNIX shell是由Stephen R. Bourne於20世紀70年代中期在新澤西的AT&T貝爾實驗室編寫的,這就是Bourne shell。Bourne shell 是一個交換式的命令解釋器和命令編程語言。Bourne shell 可以運行爲login shell或者login shell的子shell(subshell)。只有login命令可以調用Bourne shell作爲一個login shell。此時,shell先讀取/etc/profile文件和$HOME/.profile文件。/etc/profile文件爲所有的用戶定製環境,$HOME/.profile文件爲本用戶定製環境。最後,shell會等待讀取你的輸入。
C Shell
Bill Joy於20世紀80年代早期,在Berkeley的加利福尼亞大學開發了C shell。它主要是爲了讓用戶更容易的使用交互式功能,並把ALGOL風格的語法結構變成了C語言風格。它新增了命令歷史、別名、文件名替換、作業控制等功能。
Korn Shell
有很長一段時間,只有兩類shell供人們選擇,Bourne shell用來編程,C shell用來交互。爲了改變這種狀況,AT&T的bell實驗室David Korn開發了Korn shell。ksh結合了所有的C shell的交互式特性,並融入了Bourne shell的語法。因此,Korn shell廣受用戶的歡迎。它還新增了數學計算,進程協作(coprocess)、行內編輯(inline editing)等功能。Korn Shell 是一個交互式的命令解釋器和命令編程語言.它符合POSIX——一個操作系統的國際標準.POSIX不是一個操作系統,而是一個目標在於應用程序的移植性的標準——在源程序一級跨越多種平臺。
Bourne Again Shell (bash)
bash是GNU計劃的一部分,用來替代Bourne shell。它用於基於GNU的系統如Linux.大多數的Linux(Red Hat, Slackware, Caldera)都以bash作爲缺省的shell,並且運行sh時,其實調用的是bash。
POSIX Shell
POSIX shell 是Korn shell的一個變種. 當前提供POSIX shell的最大賣主是Hewlett-Packard。在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.
各主要操作系統下缺省的shell:
AIX 下是Korn Shell.
Solaris和FreeBSD缺省的是Bourne shell.
HP-UX缺省的是POSIX shell.
Linux是Bourne Again shell.
【TIP】
#!/usr/bin/sh的用途
shell script的第一行一般都是#!/usr/bin/sh或#!/usr/bin/ksh等,它的用途就是指出本腳本是用的哪種shell寫的,執行時系統應該用哪種shell來解釋執行它。
附:LINUX系統的shell原理
Linux系統的shell作爲操作系統的外殼,爲用戶提供使用操作系統的接口。它是命令語言、命令解釋程序及程序設計語言的統稱。
shell是用戶和Linux內核之間的接口程序,如果把Linux內核想象成一個球體的中心,shell就是圍繞內核的外層。當從shell或其他程序向Linux傳遞命令時,內核會做出相應的反應。 shell是一個命令語言解釋器,它擁有自己內建的shell命令集,shell也能被系統中其他應用程序所調用。用戶在提示符下輸入的命令都由shell先解釋然後傳給Linux核心。
有一些命令,比如改變工作目錄命令cd,是包含在shell內部的。還有一些命令,例如拷貝命令cp和移動命令rm,是存在於文件系統中某個目錄下的單獨的程序。對用戶而言,不必關心一個命令是建立在shell內部還是一個單獨的程序。
shell首先檢查命令是否是內部命令,若不是再檢查是否是一個應用程序(這裏的應用程序可以是Linux本身的實用程序,如ls和rm,也可以是購買的商業程序,如xv,或者是自由軟件,如emacs)。然後shell在搜索路徑裏尋找這些應用程序(搜索路徑就是一個能找到可執行程序的目錄列表)。如果鍵入的命令不是一個內部命令並且在路徑裏沒有找到這個可執行文件,將會顯示一條錯誤信息。如果能夠成功找到命令,該內部命令或應用程序將被分解爲系統調用並傳給Linux內核。
shell的另一個重要特性是它自身就是一個解釋型的程序設計語言,shell程序設計語言支持絕大多數在高級語言中能見到的程序元素,如函數、變量、數組和程序控制結構。shell編程語言簡單易學,任何在提示符中能鍵入的命令都能放到一個可執行的shell程序中。
當普通用戶成功登錄,系統將執行一個稱爲shell的程序。正是shell進程提供了命令行提示符。作爲默認值(TurboLinux系統默認的shell是BASH),對普通用戶用“$”作提示符,對超級用戶(root)用“#”作提示符。
一旦出現了shell提示符,就可以鍵入命令名稱及命令所需要的參數。shell將執行這些命令。如果一條命令花費了很長的時間來運行,或者在屏幕上產生了大量的輸出,可以從鍵盤上按ctrl+c發出中斷信號來中斷它(在正常結束之前,中止它的執行)。
當用戶準備結束登錄對話進程時,可以鍵入logout命令、exit命令或文件結束符(EOF)(按ctrl+d實現),結束登錄。
我們來實習一下shell是如何工作的。
$ make work
make:***No rule to make target ‘work’. Stop.
$
註釋:make是系統中一個命令的名字,後面跟着命令參數。在接收到這個命令後,shell便執行它。本例中,由於輸入的命令參數不正確,系統返回信息後停止該命令的執行。
在例子中,shell會尋找名爲make的程序,並以work爲參數執行它。make是一個經常被用來編譯大程序的程序,它以參數作爲目標來進行編譯。在“make work”中,make編譯的目標是work。因爲make找不到以work爲名字的目標,它便給出錯誤信息表示運行失敗,用戶又回到系統提示符下。
另外,用戶鍵入有關命令行後,如果shell找不到以其中的命令名爲名字的程序,就會給出錯誤信息。例如,如果用戶鍵入:
$ myprog
bash:myprog:command not found
$
可以看到,用戶得到了一個沒有找到該命令的錯誤信息。用戶敲錯命令後,系統一般會給出這樣的錯誤信息。
#10
這個重點看!!!
第九個:什麼是端口? 在開始講什麼是端口之前,我們先來聊一聊什麼是 port 呢?常常在網絡上聽說『我的主機開了多少的 port ,會不會被入侵呀!?』或者是說『開那個 port 會比較安全?又,我的服務應該對應什麼 port 呀!?』呵呵!很神奇吧!怎麼一部主機上面有這麼多的奇怪的 port 呢?這個 port 有什麼作用呢?! 由於每種網絡的服務功能都不相同,因此有必要將不同的封包送給不同的服務來處理,所以囉,當你的主機同時開啓了 FTP 與 WWW 服務的時候,那麼別人送來的資料封包,就會依照 TCP 上面的 port 號碼來給 FTP 這個服務或者是 WWW 這個服務來處理,當然就不會搞亂囉!(注:嘿嘿!有些很少接觸到網絡的朋友,常常會問說:『咦!爲什麼你的計算機同時有 FTP、WWW、E-Mail 這麼多服務,但是人家傳資料過來,你的計算機怎麼知道如何判斷?計算機真的都不會誤判嗎?!』現在知道爲什麼了嗎?!對啦!就是因爲 port 不同嘛!你可以這樣想啦,有一天,你要去銀行存錢,那個銀行就可以想成是『主機』,然後,銀行當然不可能只有一種業務,裏頭就有相當多的窗口,那麼你一進大門的時候,在門口的服務人員就會問你說:『嗨!你好呀!你要做些什麼事?』你跟他說:『我要存錢呀!』,服務員接着就會告訴你:『喝!那麼請前往三號窗口!那邊的人員會幫您服務!』這個時候你總該不會往其它的窗口跑吧?! ^_^/"/"這些窗口就可以想成是『 port 』囉!所以啦!每一種服務都有特定的 port 在監聽!您無須擔心計算機會誤判的問題呦!) · 每一個 TCP 聯機都必須由一端(通常爲 client )發起請求這個 port 通常是隨機選擇大於 1024 以上的 port 號來進行!其 TCP 封包會將(且只將) SYN 旗標設定起來!這是整個聯機的第一個封包; · 如果另一端(通常爲 Server ) 接受這個請求的話(當然囉,特殊的服務需要以特殊的 port 來進行,例如 FTP 的 port 21 ),則會向請求端送回整個聯機的第二個封包!其上除了 SYN 旗標之外同時還將 ACK 旗標也設定起來,並同時時在本機端建立資源以待聯機之需; · 然後,請求端獲得服務端第一個響應封包之後,必須再響應對方一個確認封包,此時封包只帶 ACK 旗標(事實上﹐後繼聯機中的所有封包都必須帶有 ACK 旗標)﹔ · 只有當服務端收到請求端的確認( ACK )封包(也就是整個聯機的第三個封包)之後﹐兩端的聯機才能正式建立。這就是所謂的 TCP 聯機的/'三段式交握( Three-Way Handshake )/'的原理。 經過三向交握之後,呵呵!你的 client 端的 port 通常是高於 1024 的隨機取得的 port 至於主機端則視當時的服務是開啓哪一個 port 而定,例如 WWW 選擇 80 而 FTP 則以 21 爲正常的聯機信道! 總而言之,我們這裏所說的端口,不是計算機硬件的I/O端口,而是軟件形式上的概念.工具提供服務類型的不同,端口分爲兩種,一種是TCP端口,一種是UDP端口。計算機之間相互通信的時候,分爲兩種方式:一種是發送信息以後,可以確認信息是否到達,也就是有應答的方式,這種方式大多采用TCP協議;一種是發送以後就不管了,不去確認信息是否到達,這種方式大多采用UDP協議。對應這兩種協議姆裉峁┑畝絲冢簿頭治猅CP端口和UDP端口。 那麼,如果攻擊者使用軟件掃描目標計算機,得到目標計算機打開的端口,也就瞭解了目標計算機提供了那些服務。我們都知道,提供服務就一定有服務軟件的漏洞,根據這些,攻擊者可以達到對目標計算機的初步瞭解。如果計算機的端口打開太多,而管理者不知道,那麼,有兩種情況:一種是提供了服務而管理者沒有注意,比如安裝IIS的時候,軟件就會自動增加很多服務,而管理員可能沒有注意到;一種是服務器被攻擊者安裝木馬,通過特殊的端口進行通信。這兩種情況都是很危險的,說到底,就是管理員不瞭解服務器提供的服務,減小了系統安全係數。 |
||
#11
第十個:什麼是掃描 (希望大家主動提出想了解什麼?) 如果你的機子連入互聯網,那麼你就有被掃描的危險。這裏要給大家介紹的就是:什麼是掃描,爲什麼有人要掃描,以及有趣的祕密握手機制和不同的掃描技術。 掃描一個系統或者一個網絡,通常是爲了發現這個被掃描的對象在提供哪些服務。掃描者可以分成兩種類型,一種是“好人”:比如系統管理員和網絡安全顧問,他們掃描的目的純粹是外了找出系統的缺陷或漏洞,進而想辦法彌補。當然另一類的就只能是“壞人”了,比如有“腳本小孩”或者更“壞”的,他們的目的是爲了找出漏洞,進而實施攻擊。 掃描就象是去一棟公寓然後挨家敲門看誰在家。你是否在運行一個WEB服務器,或者郵件服務器、BIND、Telnet、FTP、RPC等等。這些問題的答案掃描都可以給出。遺憾的是,這些答案通常很明顯的暴露在外,使得那些技術不是很高明的人可以輕而易舉的進去“參觀”。 當然,我這裏指的並非是那些極爲高明,技術頂尖的黑客,我指的是那些只知道如何從網絡上下載文件或收發EMAIL的大學生,當然中學生也不例外,他們通常被稱爲“腳本孩子”,因爲他們並沒有高深的技術知識作後盾,僅僅是通過運行別人寫出的腳本程序來掃描或攻擊別人的系統。 除了這些可以隨意下載的腳本外,攻擊者通常還會下載一個叫做端口掃描器的軟件工具。這種工具較舊的比如有ISS,較新的則如NMAP2.54的BETA22.1等。如果攻擊者可以在你的系統中找到一個明顯的漏洞,那麼完了,你的系統很快將會屬於他了,而且,掃描並不犯法,它並不是搶劫,你還無處申訴。 如今,“壞人”的掃描通常會遇到這樣的問題,就是他們掃描過的系統往往會記錄掃描行爲所利用的每一個連接信息,或許掃描的人的確很淺薄,沒有意識到在他們掃描過程中會在系統中留下“犯罪”的記錄,但稍微留意的人都會想法抹除他們的犯罪記錄。有很多方法可以達到這個目的。比如,許多黑客通過他預先攻擊過的主機來掃描遠程主機,這樣,即使被掃描的主機記錄了這一信息,逆向搜索的人能知道的也僅限於黑客預先攻擊過的主機,真正的黑客信息並不能找到。這裏介紹的祕密掃描就屬於這樣一種掃描方式,它使得逆向搜索變的更爲困難,因爲它的工作機制甚至不需要建立連接。 爲了理解什麼是祕密掃描以及它的工作原理,你首先應該對TCP/IP數據包的內容以及TCP的祕密握手機制有所瞭解。除了攜帶發送和接收方的IP地址和端口號外,TCP的報頭還包含一個序列號和一些起着特殊作用的標記位。這裏僅提到其中的三個標記位:SYN,ACK和FIN。因爲它們三個的作用與這裏討論的主題密切相關。 當系統間彼此說“HELLO”或道“GOODBYE”時,就會用到所謂的握手機制。讓我們先看看如何利用TCP/IP的握手機制來建立一個連接。本文中所提到的連接均指的是發生在兩個IP地址間,有一定的端口號的連接。當你想網上衝浪,或者想TELNET到遠程主機時,三次握手機制就會爲你生成一個這樣的連接。 它的工作原理大致如下:握手的第一步,一臺計算機首先請求和另外一臺計算機建立連接,它通過發送一個SYN請求來完成,也即將前面提到的SYN標記位置位。消息的內容就象是說:“HI,聽着,我想和你的機子端口X上的服務說話,咱們先同步一下,我用序列號Y來開始連接。” 端口X表示了連接的服務類型。至於哪些端口支持哪些類型的服務,可以參考UNIX下面的/etc/services文件。兩臺計算機間的每條信息都有一個由發送方產生的序列號,序列號的使用使得雙方知道他們之間是同步的,而且還可以起到丟失信息時或接收順序錯誤時發送警告信息的作用。 握手的第二步,接收到SYN請求的計算機響應發送來的序列號,它會將ACK標記位置位,同時它也提供自己的序列號,這個做法類似於說:OH,親愛的,我已經收到了你的號碼,這是我的號碼。 到現在爲止,發起連接建立請求的計算機認爲連接已經建立起來,然而對方卻並不這樣認爲,對方還要等到它自己的序列號有了應答後才能確認連接建立起來。因此現在的狀態可以稱爲“半連接”。如果發起連接請求的計算機不對收到的序列號作出應答,那麼這個連接就永遠也建立不起來,而正因爲沒有建立連接,所以系統也不會對這次連接做任何記錄。 握手的第三步,發起連接請求的計算機對收到的序列號作出應答,這樣,兩臺計算機之間的連接纔算建立起來。 兩臺計算機說”GOODBYE“時的握手情況與此類似:當一臺計算機說沒有更多的數據需要發送了,它發送一個FIN信號(將FIN標記位置位)通知另一端,接收到FIN的另一端計算機可能發送完了數據,也可能沒發送完,但它會對此作出應答,而當它真正完成所有需要發送的數據後,它會再發送一個自己的FIN信號,等對方對此作出應答後,連接才徹底解除。 FIN祕密掃描的工作原理就是向它的目的地一個根本不存在的連接發送FIN信息,如果這項服務沒有開,那麼目的地會響應一條錯誤信息,但如果是有這項服務,那麼它將忽略這條消息。這樣,掃描者的問題“你運行X嗎”就有了答案,而且還不會在系統中有所記錄。 還有兩種其他的掃描手段值得注意。一種叫做聖誕樹掃描,因爲,它將所有的標記位都置位(不僅僅是SYN,ACK,FIN);另一種叫做空掃描,因爲所有的標記位都被複位。這些祕密的掃描行爲將會根據接收端所運行的平臺不同而產生不同的錯誤響應信息。 現代的端口掃描工具,象NMAP就是利用這樣的原理來檢測在一個系統上有那些服務是開着的。NMAP不光是最著名的,同時也是最出色的端口掃描工具。它被系統管理人員和“壞人”們廣泛的應用,有關NMAP的介紹,大家可以通過搜索引擎去查找相關的資料。 ++++++++不過對於掃描工具來說,菜鳥們用Scan和流光比較簡單,功能也不錯!+++++++++ |
||
#12
第十一個:什麼是鉤子函數 WINDOWS的鉤子函數可以認爲是WINDOWS的主要特性之一。利用它們,您可以捕捉您自己進程或其它進程發生的事件。通過“鉤掛”,您可以給WINDOWS一個處理或過濾事件幕氐骱煤步兇觥骯匙雍保泵看畏⑸行巳さ氖錄保琖INDOWS都將調用該函數。一共有兩種類型的鉤子:局部的和遠程的。 局部鉤子僅鉤掛您自己進程的事件。 遠程的鉤子還可以將鉤掛其它進程發生的事件。遠程的鉤子又有兩種: 基於線程的 它將捕獲其它進程中某一特定線程的事件。簡言之,就是可以用來觀察其它進程中的某一特定線程將發生的事件。 系統範圍的 將捕捉系統中所有進程將發生的事件消息。 當您創建一個鉤子時,WINDOWS會先在內存中創建一個數據結構,該數據結構包含了鉤子的相關信息,然後把該結構體加到已經存在的鉤子鏈表中去。新的鉤子將加到老的前面。當一個事件發生時,如果您安裝的是一個局部鉤子,您進程中的鉤子函數將被調用。如果是一個遠程鉤子,系統就必須把鉤子函數插入到其它進程的地址空間,要做到這一點要求鉤子函數必須在一個動態鏈接庫中,所以如果您想要使用遠程鉤子,就必須把該鉤子函數放到動態鏈接庫中去。當然有兩個例外:工作日誌鉤子和工作日誌回放鉤子。這兩個鉤子的鉤子函數必須在安裝鉤子的線程中。原因是:這兩個鉤子是用來監控比較底層的硬件事件的,既然是記錄和回放,所有的事件就當然都是有先後次序的。所以如果把回調函數放在DLL中,輸入的事件被放在幾個線程中記錄,所以我們無法保證得到正確的次序。故解決的辦法是:把鉤子函數放到單個的線程中,譬如安裝鉤子的線程。 鉤子一共有14種,以下是它們被調用的時機: WH_CALLWNDPROC 當調用SendMessage時 WH_CALLWNDPROCRET 當SendMessage的調用返回時 WH_GETMESSAGE 當調用GetMessage 或 PeekMessage時 WH_KEYBOARD 當調用GetMessage 或 PeekMessage 來從消息隊列中查詢WM_KEYUP 或 WM_KEYDOWN 消息時 WH_MOUSE 當調用GetMessage 或 PeekMessage 來從消息隊列中查詢鼠標事件消息時 WH_HARDWARE 當調用GetMessage 或 PeekMessage 來從消息隊列種查詢非鼠標、鍵盤消息時 WH_MSGFILTER 當對話框、菜單或滾動條要處理一個消息時。該鉤子是局部的。它時爲那些有自己的消息處理過程的控件對象設計的。 WH_SYSMSGFILTER 和WH_MSGFILTER一樣,只不過是系統範圍的 WH_JOURNALRECORD 當WINDOWS從硬件隊列中獲得消息時 WH_JOURNALPLAYBACK 當一個事件從系統的硬件輸入隊列中被請求時 WH_SHELL 當關於WINDOWS外殼事件發生時,譬如任務條需要重畫它的按鈕. WH_CBT 當基於計算機的訓練(CBT)事件發生時 WH_FOREGROUNDIDLE 由WINDOWS自己使用,一般的應用程序很少使用 WH_DEBUG 用來給鉤子函數除錯 附:如何使用鉤子函數(接收到字母A按下時,窗體由最小化彈出的完整的代碼) Public Declare Function CallNextHookEx Lib /"user32/" _ (ByVal hHook As Long, _ ByVal nCode As Long, _ ByVal wParam As Long, _ ByVal lParam As Long) As Long Public Declare Function UnhookWindowsHookEx Lib /"user32/" _ (ByVal hHook As Long) As Long Public Declare Function SetWindowsHookEx Lib /"user32/" _ Alias /"SetWindowsHookExA/" _ (ByVal idHook As Long, _ ByVal lpfn As Long, _ ByVal hmod As Long, _ ByVal dwThreadId As Long) As Long Public Const WH_KEYBOARD = 2 Public Const KEY_WINSTART = 91 Public Const KEY_WINMENU = 93 Global hHook As Long Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If nCode >= 0 Then If wParam = KEY_WINMENU Or wParam = KEY_WINSTART Then If (lParam And &HC0000000) = 0 Then MsgBox /"/", , /"/" KeyboardProc = 1 Exit Function End If End If End If KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam) End Function Option Explicit Private Sub Command1_Click() Form2.Show 1 End Sub Private Sub Form_Load() hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0&, App.ThreadID) Me.Show End Sub Private Sub Form_Unload(Cancel As Integer) Call UnhookWindowsHookEx(hHook) End Sub 第十二個:什麼是加殼和脫殼! 加殼:其實是利用特殊的算法,對EXE、DLL文件裏的資源進行壓縮。類似WINZIP 的效果,只不過這個壓縮之後的文件,可以獨立運行,解壓過程完全隱蔽,都在內存中完成。解壓原理,是加殼工具在文件頭裏加了一段指令,告訴CPU,怎麼才能解壓自己。現在的CPU都很快,所以這個解壓過程你看不出什麼東東。軟件一下子就打開了,只有你機器配置非常差,纔會感覺到不加殼和加殼後的軟件運行速度的差別。當你加殼時,其實就是給可執行的文件加上個外衣。用戶執行的只是這個外殼程序。當你執行這個程序的時候這個殼就會把原來的程序在內存中解開,解開後,以後的就交給真正的程序。所以,這些的工作只是在內存中運行的,是不可以瞭解具體是怎麼樣在內存中運行的。通常說的對外殼加密,都是指很多網上免費或者非免費的軟件,被一些專門的加殼程序加殼,基本上是對程序的壓縮或者不壓縮。因爲有的時候程序會過大,需要壓縮。但是大部分的程序是因爲防止反跟蹤,防止程序被人跟蹤調試,防止算法程序不想被別人靜態分析。加密代碼和數據,保護你的程序數據的完整性。不被修改或者窺視你程序的內幕。 脫殼,是完全破除壓縮後軟件無法編輯的限制,去掉頭部的解壓縮指令,然後解壓出加殼前的完整軟件。這樣,你就可以對其“動刀”了。呵呵~~當然是和加殼相反喲。從字面上也該明白了吧,我就不多說了~~ |
||
#14
第十三個:什麼是代理服務器 代理有很多種解釋,而我們常常提到的代理,從計算機專業角度來說就是指代理服務器相關,針對syx-kn 的提問,我先把代理服務器向大家簡單的介紹一下吧!! 代理服務器英文全稱是Proxy Server,其功能就是代理網絡用戶去取得網絡信息。形象的說:它是網絡信息的中轉站。在一般情況下,我們使用網絡瀏覽器直接去連接其他Internet站點取得網絡信息時,須送出Request信號來得到回答,然後對方再把信息以bit方式傳送回來。代理服務器是介於瀏覽器和Web服務器之間的一臺服務器,有了它之後,瀏覽器不是直接到Web服務器去取回網頁而是向代理服務器發出請求,Request信號會先送到代理服務器,由代理服務器來取回瀏覽器所需要的信息並傳送給你的瀏覽器。而且,大部分代理服務器都具有緩衝的功能,就好象一個大的Cache,它有很大的存儲空間,它不斷將新取得數據儲存到它本機的存儲器上,如果瀏覽器所請求的數據在它本機的存儲器上已經存在而且是最新的,那麼它就不重新從Web服務器取數據,而直接將存儲器上的數據傳送給用戶的瀏覽器,這樣就能顯著提高瀏覽速度和效率。更重要的是:Proxy Server (代理服務器)是 Internet鏈路級網關所提供的一種重要的安全功能,它的工作主要在開放系統互聯 (OSI) 模型的對話層。 代理服務器(Proxy Server)就是個人網絡和因特網服務商之間的中間代理機構,它負責轉發合法的網絡信息,並對轉發進行控制和登記。在使用網絡瀏覽器瀏覽網絡信息的時候,如果使用代理服務器,瀏覽器就不是直接到Web服務器去取回網頁,而是向代理服務器發出請求,由代理服務器取回瀏覽器所需要的信息。目前使用的因特網是一個典型的客戶機/服務器結構,當用戶的本地機與因特網連接時,通過本地機的客戶程序比如瀏覽器或者軟件下載工具發出請求,遠端的服務器在接到請求之後響應請求並提供相應的服務。 代理服務器處在客戶機和服務器之間,對於遠程服務器而言,代理服務器是客戶機,它向服務器提出各種服務申請;對於客戶機而言,代理服務器則是服務器,它接受客戶機提出的申請並提供相應的服務。也就是說,客戶機訪問因特網時所發出的請求不再直接發送到遠程服務器,而是被送到了代理服務器上,代理服務器再向遠程的服務器提出相應的申請,接收遠程服務器提供的數據並保存在自己的硬盤上,然後用這些數據對客戶機提供相應的服務。 講了這麼多,其實對於菜鳥們所提的代理,主要是應用,這裏我再附加上設置代理服務器的方法: IE4.01:菜單欄“查看”-> 下拉菜單“Internet選項”-> 選項卡“連接”-> 在“代理服務器”一欄選中“通過代理服務器訪問Internet”,輸入地址和端口號。-> 確定。 IE 5.0:菜單欄“工具”-> 下拉菜單“Internet選項”-> 選項卡“連接”-> 在“撥號設置”中選中您目前使用的連接,然後點擊右側的“設置”-> 在中間的“代理服務器”欄選中“使用代理服務器”-> 在“地址”和“端口”欄輸入HTTP代理服務器地址和端口-> 確定 -> 確定。
|
第十七個:什麼是IRC(Internet轉播交談)?
IRC(Internet Relay Chat)是一種基於Internet的通信協議,中文一般莆チ屑塘奶臁K怯煞依?人Jarkko Oikarinen於1988年首創的一種網絡聊天協議。經過十年的發展,目前世界上有超過60個國家提供了IRC的服務。在人氣最旺的EFnet上,您可以看到上萬的使用者在同一時間使用IRC。
IRC採用客戶機/服務器模式,它能使Internet用戶實時地與其他用戶交談,每個用戶通過客戶端程序與遠程主機建立連接,遠程主機接受多個來自客戶端程序的連接,並實現多個用戶之間的實時通話。在海灣戰爭期間,IRC受到了全世界的關注。當時以色列特拉維夫的居民們在空襲期間通過IRC方式,向世界各地的聽衆現場描述所發生的事件。
IRC的工作原理非常簡單,您只要在自己的PC上運行客戶端軟件,然後通過因特網以 IRC協議連接到一臺IRC服務器上即可。它的特點是速度非常之快,聊天時幾乎沒有延遲的現象,並且只佔用很小的帶寬資源。所有用戶可以在一個被稱爲///"Channel///"(頻道)的地方就某一話題進行交談或密談。每個IRC的使用者都有一個Nickname(暱稱),所有的溝通就在他們所在的Channel內以不同的Nickname進行交談。
IRC工具中國際上比較好用的是英文的mirc,在國內,比較好用的是中文的Chatkey。你可以到有關的網站下載。mirc的網址爲:http://www.mirc.com (英文),Chatkey的網址是: http://www.chatkey.com (中文)。這裏以中文的Chatkey爲例,帶你玩轉IRC。
第十八個:什麼是Ping
Ping是個使用頻率極高的實用程序,用於確定本地主機是否能與另一臺主機交換(發送與接收)數據報。根據返回的信息,你就可以推斷TCP/IP參數是否設置得正確以及運行是否正常。需要注意的是:成功地與另一臺主機進行一次或兩次數據報交換並不表示TCP/IP配置就是正確的,你必須執行大量的本地主機與遠程主機的數據報交換,才能確信TCP/IP的正確性。
簡單的說,Ping就是一個測試程序,如果Ping運行正確,你大體上就可以排除網絡訪問層、網卡、MODEM的輸入輸出線路、電纜和路由器等存在的故障,從而減小了問題的範圍。但由於可以自定義所發數據報的大小及無休止的高速發送,Ping也被某些別有用心的人作爲DDOS(拒絕服務攻擊)的工具,曾經Yahoo就是被黑客利用數百臺可以高速接入互聯網的電腦連續發送大量Ping數據包而癱瘓的。
按照缺省設置,Windows上運行的Ping命令發送4個ICMP(網間控制報文協議)回頹肭螅扛?2字節數據,如果一切正常,你應能得到4個回送應答。
Ping能夠以毫秒爲單位顯示發送回送請求到返回回送應答之間的時間量。如果應答時間短,表示數據報不必通過太多的路由器或網絡連接速度比較快。Ping還能顯示TTL(Time To Live存在時間)值,你可以通過TTL值推算一下數據包已經通過了多少個路由器:源地點TTL起始值(就是比返回TTL略大的一個2的乘方數)-返回時TTL值。例如,返回TTL值爲119,那麼可以推算數據報離開源地址的TTL起始值爲128,而源地點到目標地點要通過9個路由器網段(128-119);如果返回TTL值爲246,TTL起始值就是256,源地點到目標地點要通過9個路由器網段。
通過Ping檢測網絡故障的典型次序
正常情況下,當你使用Ping命令來查找問題所在或檢驗網絡運行情況時,你需要使用許多Ping命令,如果所有都運行正確,你就可以相信基本的連通性和配置參數沒有問題;如果某些Ping命令出現運行故障,它也可以指明到何處去查找問題。下面就給出一個典型的檢測次序及對應的可能故障:
ping 127.0.0.1--這個Ping命令被送到本地計算機的IP軟件,該命令永不退出該計算機。如果沒有做到這一點,就表示TCP/IP的安裝或運行存在某些最基本的問題。
ping 本機IP--這個命令被送到你計算機所配置的IP地址,你的計算機始終都應該對該Ping命令作出應答,如果沒有,則表示本地配置或安裝存在問題。出現此問題時,局域網用戶請斷開網絡電纜,然後重新發送該命令。如果網線斷開後本命令正確,則表示另一臺計算機可能配置了相同的IP地址。
ping 局域網內其他IP--這個命令應該離開你的計算機,經過網卡及網絡電纜到達其他計算機,再返回。收到回送應答表明本地網絡中的網卡和載體運行正確。但如果收到0個回送應答,那麼表示子網掩碼(進行子網分割時,將IP地址的網絡部分與主機部分分開的代碼)不正確或網卡配置錯誤或電纜系統有問題。
ping 網關IP--這個命令如果應答正確,表示局域網中的網關路由器正在運行並能夠作出應答。
ping 遠程IP--如果收到4個應答,表示成功的使用了缺省網關。對於撥號上網用戶則表示能夠成功的訪問Internet(但不排除ISP的DNS會有問題)。
ping localhost--localhost是個作系統的網絡保留名,它是127.0.0.1的別名,每太計算機都應該能夠將該名字轉換成該地址。如果沒有做到這一帶內,則表示主機文件(/Windows/host)中存在問題。
ping www.yahoo.com--對這個域名執行Ping命...是通過DNS服務器如果這裏出現故障,則表示DNS服務器的IP地址配置不正確或DNS服務器有故障(對於撥號上網用戶,某些ISP已經不需要設置DNS服務器了)。順便說一句:你也可以利用該命令實現域名對IP地址的轉換功能。
如果上面所列出的所有Ping命令都能正常運行,那麼你對你的計算機進行本地和遠程通信的功能基本上就可以放心了。但是,這些命令的成功並不表示你所有的網絡配置都沒有問題,例如,某些子網掩碼錯誤就可能無法用這些方法檢測到。
Ping命令的常用參數選項
ping IP -t--連續對IP地址執行Ping命令,直到被用戶以Ctrl+C中斷。
ping IP -l 2000--指定Ping命令中的數據長度爲2000字節,而不是缺省的32字節。
ping IP -n--執行特定次數的Ping命令。
代碼是一組有序的數字或字母的排列,是代表客觀實體及其屬性的符號。
代碼設計的原則包括惟一確定性、標準化和通用性、可擴充性與穩定性、便於識別與記憶、力求短小與格式統一以及容易修改等。
第二十個:什麼是系統的進程
我先讓朋友們瞭解一下在任務管理器裏的進程。其實在談到進程時,還要涉及到線程的概念。進程是指在系統中正在運行的一個應用程序;線程是系統分配處理器時間資源的基本單元,或者說進程之內獨立執行的一個單元。對於操作系統而言,其調度單元是線程。一個進程至少包括一個線程,通常將該線程稱爲主線程。一個進程從主線程的執行開始進而創建一個或多個附加線程,就是所謂基於多線程的多任務。
那進程與線程的區別到底是什麼?進程是執行程序的實例。例如,當你運行記事本程序(Nodepad)時,你就創建了一個用來容納組成Notepad.exe的代碼及其所需調用動態鏈接庫的進程。每個進程均運行在其專用且受保護的地址空間內。因此,如果你同時運行記事本的兩個拷貝,該程序正在使用的數據在各自實例中是彼此獨立的。在記事本的一個拷貝中將無法看到該程序的第二個實例打開的數據。
我這裏以沙箱爲例進行闡述。一個進程就好比一個沙箱。線程就如同沙箱中的孩子們。孩子們在沙箱子中跑來跑去,並且可能將沙子攘到別的孩子眼中,他們會互相踢打或撕咬。但是,這些沙箱略有不同之處就在於每個沙箱完全由牆壁和頂棚封閉起來,無論箱中的孩子如何狠命地攘沙,他們也不會影響到其它沙箱中的其他孩子。因此,每個進程就象一個被保護起來的沙箱。未經許可,無人可以進出。
實際上線程運行而進程不運行。兩個進程彼此獲得專用數據或內存的唯一途徑就是通過協議來共享內存塊。這是一種協作策略。下面讓我們分析一下任務管理器裏的進程選項卡。
這裏的進程是指一系列進程,這些進程是由它們所運行的可執行程序實例來識別的,這就是進程選項卡中的第一列給出了映射名稱的原因。請注意,這裏並沒有進程名稱列。進程並不擁有獨立於其所歸屬實例的映射名稱。換言之,如果你運行5個記事本拷貝,你將會看到5個稱爲Notepad.exe的進程。它們是如何彼此區別的呢?其中一種方式是通過它們的進程ID,因爲每個進程都擁有其獨一無二的編碼。該進程ID由Windows NT或Windows 2000生成,並可以循環使用。因此,進程ID將不會越編越大,它們能夠得到循環利用。
第三列是被進程中的線程所佔用的CPU時間百分比。它不是CPU的編號,而是被進程佔用的CPU時間百分比。此時我的系統基本上是空閒的。儘管系統看上去每一秒左右都只使用一小部分CPU時間,但該系統空閒進程仍舊耗用了大約99%的CPU時間。
第四列,CPU時間,是CPU被進程中的線程累計佔用的小時、分鐘及秒數。請注意,我對進程中的線程使用佔用一詞。這並不一定意味着那就是進程已耗用的CPU時間總和,因爲,如我們一會兒將看到的,NT計時的方式是,當特定的時鐘間隔激發時,無論誰恰巧處於當前的線程中,它都將計算到CPU週期之內。通常情況下,在大多數NT系統中,時鐘以10毫秒的間隔運行。每10毫秒NT的心臟就跳動一下。有一些驅動程序代碼片段運行並顯示誰是當前的線程。讓我們將CPU時間的最後10毫秒記在它的帳上。因此,如果一個線程開始運行,並在持續運行8毫秒後完成,接着,第二個線程開始運行並持續了2毫秒,這時,時鐘激發,請猜一猜這整整10毫秒的時鐘週期到底記在了哪個線程的帳上?答案是第二個線程。因此,NT中存在一些固有的不準確性,而NT恰是以這種方式進行計時,實際情況也如是,大多數32位操作系統中都存在一個基於間隔的計時機制。請記住這一點,因爲,有時當你觀察線程所耗用的CPU總和時,會出現儘管該線程或許看上去已運行過數十萬次,但其CPU時間佔用量卻可能是零或非常短暫的現象,那麼,上述解釋便是原因所在。上述也就是我們在任務管理器的進程選項卡中所能看到的基本信息列。
說到這裏,我想大家對進程有一定的認識了吧,最後我對平時見到的各進程項細述一下,有哪些是能關的,有哪些是不能關的........
最基本的系統進程(也就是說,這些進程是系統運行的基本條件,有了這些進程,系統就能正常運行):
smss.exe Session Manager
csrss.exe 子系統服務器進程
winlogon.exe 管理用戶登錄
services.exe 包含很多系統服務
lsass.exe 管理 IP 安全策略以及啓動 ISAKMP/Oakley (IKE) 和 IP 安全驅動程序。(系統服務)
產生會話密鑰以及授予用於交互式客戶/服務器驗證的服務憑據(ticket)。(系統服務)
svchost.exe 包含很多系統服務
svchost.exe
SPOOLSV.EXE 將文件加載到內存中以便遲後打印。(系統服務)
explorer.exe 資源管理器
internat.exe 托盤區的拼音圖標
附加的系統進程(這些進程不是必要的,你可以根據需要通過服務管理器來增加或減少):
mstask.exe 允許程序在指定時間運行。(系統服務)
regsvc.exe 允許遠程註冊表操作。(系統服務)
winmgmt.exe 提供系統管理信息(系統服務)。
inetinfo.exe 通過 Internet 信息服務的管理單元提供 FTP 連接和管理。(系統服務)
tlntsvr.exe 允許遠程用戶登錄到系統並且使用命令行運行控制檯程序。(系統服務)
允許通過 Internet 信息服務的管理單元管理 Web 和 FTP 服務。(系統服務)
tftpd.exe 實現 TFTP Internet 標準。該標準不要求用戶名和密碼。遠程安裝服務的一部分。(系統服務)
termsrv.exe 提供多會話環境允許客戶端設備訪問虛擬的 Windows 2000 Professional 桌面會話以及運行在服務器上的基
於 Windows 的程序。(系統服務)
dns.exe 應答對域名系統(DNS)名稱的查詢和更新請求。(系統服務)
以下服務很少會用到,上面的服務都對安全有害,如果不是必要的應該關掉
tcpsvcs.exe 提供在 PXE 可遠程啓動客戶計算機上遠程安裝 Windows 2000 Professional 的能力。(系統服務)
支持以下 TCP/IP 服務:Character Generator, Daytime, Discard, Echo, 以及 Quote of the Day。(系統服務)
ismserv.exe 允許在 Windows Advanced Server 站點間發送和接收消息。(系統服務)
ups.exe 管理連接到計算機的不間斷電源(UPS)。(系統服務)
wins.exe 爲註冊和解析 NetBIOS 型名稱的 TCP/IP 客戶提供 NetBIOS 名稱服務。(系統服務)
llssrv.exe License Logging Service(system service)
ntfrs.exe 在多個服務器間維護文件目錄內容的文件同步。(系統服務)
RsSub.exe 控制用來遠程儲存數據的媒體。(系統服務)
locator.exe 管理 RPC 名稱服務數據庫。(系統服務)
lserver.exe 註冊客戶端許可證。(系統服務)
dfssvc.exe 管理分佈於局域網或廣域網的邏輯卷。(系統服務)
clipsrv.exe 支持“剪貼簿查看器”,以便可以從遠程剪貼簿查閱剪貼頁面。(系統服務)
msdtc.exe 並列事務,是分佈於兩個以上的數據庫,消息隊列,文件系統,或其它事務保護資源管理器。(系統服務)
faxsvc.exe 幫助您發送和接收傳真。(系統服務)
cisvc.exe Indexing Service(system service)
dmadmin.exe 磁盤管理請求的系統管理服務。(系統服務)
mnmsrvc.exe 允許有權限的用戶使用 NetMeeting 遠程訪問 Windows 桌面。(系統服務)
netdde.exe 提供動態數據交換 (DDE) 的網絡傳輸和安全特性。(系統服務)
smlogsvc.exe 配置性能日誌和警報。(系統服務)
rsvp.exe 爲依賴質量服務(QoS)的程序和控制應用程序提供網絡信號和本地通信控制安裝功能。(系統服務)
RsEng.exe 協調用來儲存不常用數據的服務和管理工具。(系統服務)
RsFsa.exe 管理遠程儲存的文件的操作。(系統服務)
grovel.exe 掃描零備份存儲(SIS)捲上的重複文件,並且將重複文件指向一個數據存儲點,以節省磁盤空間。(系統服務)
SCardSvr.exe 對插入在計算機智能卡閱讀器中的智能卡進行管理和訪問控制。(系統服務)
snmp.exe 包含代理程序可以監視網絡設備的活動並且向網絡控制檯工作站彙報。(系統服務)
snmptrap.exe 接收由本地或遠程 SNMP 代理程序產生的陷阱消息,然後將消息傳遞到運行在這臺計算機上 SNMP 管理程序
。(系統服務)
UtilMan.exe 從一個窗口中啓動和配置輔助工具。(系統服務)
msiexec.exe 依據 .MSI 文件中包含的命令來安裝、修復以及刪除軟件。(系統服務)
詳細說明:
win2k運行進程
Svchost.exe
Svchost.exe文件對那些從動態連接庫中運行的服務來說是一個普通的主機進程名。Svhost.exe文件定位
在系統的%systemroot%//system32文件夾下。在啓動的時候,Svchost.exe檢查註冊表中的位置來構建需要
加載的服務列表。這就會使多個Svchost.exe在同一時間運行。每個Svchost.exe的回話期間都包含一組服務,
以至於單獨的服務必須依靠Svchost.exe怎樣和在那裏啓動。這樣就更加容易控制和查找錯誤。
Svchost.exe 組是用下面的註冊表值來識別。
HKEY_LOCAL_MACHINE//Software//Microsoft//Windows NT//CurrentVersion//Svchost
每個在這個鍵下的值代表一個獨立的Svchost組,並且當你正在看活動的進程時,它顯示作爲一個單獨的
例子。每個鍵值都是REG_MULTI_SZ類型的值而且包括運行在Svchost組內的服務。每個Svchost組都包含一個
或多個從註冊表值中選取的服務名,這個服務的參數值包含了一個ServiceDLL值。
HKEY_LOCAL_MACHINE//System//CurrentControlSet//Services//Service
更多的信息
爲了能看到正在運行在Svchost列表中的服務。
開始-運行-敲入cmd
然後在敲入 tlist -s (tlist 應該是win2k工具箱裏的鼕鼕)
Tlist 顯示一個活動進程的列表。開關 -s 顯示在每個進程中的活動服務列表。如果想知道更多的關於
進程的信息,可以敲 tlist pid。
Tlist 顯示Svchost.exe運行的兩個例子。
0 System Process
8 System
132 smss.exe
160 csrss.exe Title:
180 winlogon.exe Title: NetDDE Agent
208services.exe
Svcs: AppMgmt,Browser,Dhcp,dmserver,Dnscache,Eventlog,lanmanserver,LanmanWorkstation,LmHosts,Messenger,PlugPlay,
ProtectedStorage,seclogon,TrkWks,W32Time,Wmi
220 lsass.exe Svcs: Netlogon,PolicyAgent,SamSs
404 svchost.exe Svcs: RpcSs
452 spoolsv.exe Svcs: Spooler
544 cisvc.exe Svcs: cisvc
556 svchost.exe Svcs: EventSystem,Netman,NtmsSvc,RasMan,SENS,TapiSrv
580 regsvc.exe Svcs: RemoteRegistry
596 mstask.exe Svcs: Schedule
660 snmp.exe Svcs: SNMP
728 winmgmt.exe Svcs: WinMgmt
852 cidaemon.exe Title: OleMainThreadWndName
812 explorer.exe Title: Program Manager
1032 OSA.EXE Title: Reminder
1300 cmd.exe Title: D://WINNT5//System32//cmd.exe - tlist -s
1080 MAPISP32.EXE Title: WMS Idle
1264 rundll32.exe Title:
1000 mmc.exe Title: Device Manager
1144 tlist.exe
在這個例子中註冊表設置了兩個組。
HKEY_LOCAL_MACHINE//Software//Microsoft//Windows NT//CurrentVersion//Svchost:
netsvcs: Reg_Multi_SZ: EventSystem Ias Iprip Irmon Netman Nwsapagent Rasauto Rasman Remoteaccess SENS Sharedaccess
Tapisrv Ntmssvc
rpcss :Reg_Multi_SZ: RpcSs
smss.exe
csrss.exe
這個是用戶模式Win32子系統的一部分。csrss代表客戶/服務器運行子系統而且是一個基本的子系統
必須一直運行。csrss 負責控制windows,創建或者刪除線程和一些16位的虛擬MS-DOS環境。
explorer.exe
這是一個用戶的shell(我實在是不知道怎麼翻譯shell),在我們看起來就像任務條,桌面等等。這個
進程並不是像你想象的那樣是作爲一個重要的進程運行在windows中,你可以從任務管理器中停掉它,或者重新啓動。
通常不會對系統產生什麼負面影響。
internat.exe
這個進程是可以從任務管理器中關掉的。
internat.exe在啓動的時候開始運行。它加載由用戶指定的不同的輸入點。輸入點是從註冊表的這個位置
HKEY_USERS//.DEFAULT//Keyboard Layout//Preload 加載內容的。
internat.exe 加載“EN”圖標進入系統的圖標區,允許使用者可以很容易的轉換不同的輸入點。
當進程停掉的時候,圖標就會消失,但是輸入點仍然可以通過控制面板來改變。
lsass.exe
這個進程是不可以從任務管理器中關掉的。
這是一個本地的安全授權服務,並且它會爲使用winlogon服務的授權用戶生成一個進程。這個進程是
通過使用授權的包,例如默認的msgina.dll來執行的。如果授權是成功的,lsass就會產生用戶的進入
令牌,令牌別使用啓動初始的shell。其他的由用戶初始化的進程會繼承這個令牌的。
mstask.exe
這個進程是不可以從任務管理器中關掉的。
這是一個任務調度服務,負責用戶事先決定在某一時間運行的任務的運行。
smss.exe
這個進程是不可以從任務管理器中關掉的。
這是一個會話管理子系統,負責啓動用戶會話。這個進程是通過系統進程初始化的並且對許多活動的,
包括已經正在運行的Winlogon,Win32(Csrss.exe)線程和設定的系統變量作出反映。在它啓動這些
進程後,它等待Winlogon或者Csrss結束。如果這些過程時正常的,系統就關掉了。如果發生了什麼
不可預料的事情,smss.exe就會讓系統停止響應(就是掛起)。
spoolsv.exe
這個進程是不可以從任務管理器中關掉的。
緩衝(spooler)服務是管理緩衝池中的打印和傳真作業。
service.exe
這個進程是不可以從任務管理器中關掉的。
大多數的系統核心模式進程是作爲系統進程在運行。
System Idle Process
這個進程是不可以從任務管理器中關掉的。
這個進程是作爲單線程運行在每個處理器上,並在系統不處理其他線程的時候分派處理器的時間。
winlogon.exe
這個進程是管理用戶登錄和推出的。而且winlogon在用戶按下CTRL+ALT+DEL時就激活了,顯示安全對話框。
winmgmt.exe
winmgmt是win2000客戶端管理的核心組件。當客戶端應用程序連接或當管理程序需要他本身的服務時這個進程初始化
taskmagr.exe
這個進程當然就是任務管理器了.不要忘喲.
第二十一:TCP/IP協議介紹
TCP/IP的通訊協議
這部分簡要介紹一下TCP/IP的內部結構,爲討論與互聯網有關的安全問題打下基礎。TCP/IP協議組之所以流行,部分原因是因爲它可以用在各種各樣的信道和底層協議(例如T1和X.25、以太網以及RS-232串行接口)之上。確切地說,TCP/IP協議是一組包括TCP協議和IP協議,UDP(User Datagram Protocol)協議、ICMP(Internet Control Message Protocol)協議和其他一些協議的協議組。
TCP/IP整體構架概述
TCP/IP協議並不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。這4層分別爲:
應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等。
傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCP和UDP給數據包加入傳輸數據並把它傳輸到下一層中,這一層負責傳送數據,並且確定數據已被送達並接收。
互連網絡層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。
網絡接口層:對實際的網絡媒體的管理,定義如何使用實際網絡(如Ethernet、Serial Line等)來傳送數據。
TCP/IP中的協議
以下簡單介紹TCP/IP中的協議都具備什麼樣的功能,都是如何工作的:
1. IP
網際協議IP是TCP/IP的心臟,也是網絡層中最重要的協議。
IP層接收由更低層(網絡接口層例如以太網設備驅動程序)發來的數據包,並把該數據包發送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因爲IP並沒有做任何事情來確認數據包是按順序發送的或者沒有被破壞。IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。
高層的TCP和UDP服務在接收數據包時,通常假設包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機發送來的。IP確認包含一個選項,叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對於一些TCP和UDP的服務來說,使用了該選項的IP包好象是從路徑上的最後一個系統傳遞過來的,而不是來自於它的真實地點。這個選項是爲了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連接。那麼,許多依靠IP源地址做確認的服務將產生問題並且會被非法入侵。
2. TCP
如果IP數據包中有已經封好的TCP數據包,那麼IP將把它們向‘上’傳送到TCP層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。
TCP將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最後到接收方。
面向連接的服務(例如Telnet、FTP、rlogin、X Windows和SMTP)需要高度的可靠性,所以它們使用了TCP。DNS在某些情況下使用TCP(發送和接收域名數據庫),但使用UDP傳送有關單個主機的信息。
3.UDP
UDP與TCP位於同一層,但對於數據包的順序錯誤或重發。因此,UDP不被應用於那些使用虛電路的面向連接的服務,UDP主要用於那些面向查詢---應答的服務,例如NFS。相對於FTP或Telnet,這些服務需要交換的信息量較小。使用UDP的服務包括NTP(網落時間協議)和DNS(DNS也使用TCP)。
欺騙UDP包比欺騙TCP包更容易,因爲UDP沒有建立初始化連接(也可以稱爲握手)(因爲在兩個系統間沒有虛電路),也就是說,與UDP相關的服務面臨着更大的危險。
4.ICMP
ICMP與IP位於同一層,它被用來傳送IP的的控制信息。它主要是用來提供有關通向目的地址的路徑信息。ICMP的‘Redirect’信息通知主機通向其他系統的更準確的路徑,而‘Unreachable’信息則指出路徑有問題。另外,如果路徑不可用了,ICMP可以使TCP連接‘體面地’終止。PING是最常用的基於ICMP的服務。
5. TCP和UDP的端口結構
TCP和UDP服務通常有一個客戶/服務器的關係,例如,一個Telnet服務進程開始在系統上處於空閒狀態,等待着連接。用戶使用Telnet客戶程序與服務進程建立一個連接。客戶程序向服務進程寫入信息,服務進程讀出信息併發出響應,客戶程序讀出響應並向用戶報告。因而,這個連接是雙工的,可以用來進行讀寫。
兩個系統間的多重Telnet連接是如何相互確認並協調一致呢?TCP或UDP連接唯一地使用每個信息中的如下四項進行確認:
源IP地址---發送包的IP地址。
目的IP地址---接收包的IP地址。
源端口---源系統上的連接的端口。
目的端口---目的系統上的連接的端口。
端口是一個軟件結構,被客戶程序或服務進程用來發送和接收信息。一個端口對應一個16比特的數。服務進程通常使用一個固定的端口,例如,SMTP使用25、Xwindows使用6000。這些端口號是‘廣爲人知’的,因爲在建立與特定的主機或服務的連接時,需要這些地址和目的地址進行通訊。
現在人們談到黑客攻擊,一般所指的都是以主動方式進行的,例如利用漏洞或者猜測系統密碼的方式對系統進行攻擊。但是其實還有一類危害非常大的被動攻擊方式往往爲大家所忽視,那就是利用Sniffer進行嗅探攻擊。
Sniffer,中文可以翻譯爲嗅探器,是一種威脅性極大的被動攻擊工具。使用這種工具,可以監視網絡的狀態、數據流動情況以及網絡上傳輸的信息。當信息以明文的形式在網絡上傳輸時,便可以使用網絡監聽的方式來進行攻擊。將網絡接口設置在監聽模式,便可以將網上傳輸的源源不斷的信息截獲。黑客們常常用它來截獲用戶的口令。據說某個骨幹網絡的路由器曾經被黑客攻人,並嗅探到大量的用戶口令。本文將詳細介紹Sniffer的原理和應用。
一、Sniffer 原理
1.網絡技術與設備簡介
在講述Sni計er的概念之前,首先需要講述局域網設備的一些基本概念。
數據在網絡上是以很小的稱爲幀(Frame)的單位傳輸的,幀由幾部分組成,不同的部分執行不同的功能。幀通過特定的稱爲網絡驅動程序的軟件進行成型,然後通過網卡發送到網線上,通過網線到達它們的目的機器,在目的機器的一端執行相反的過程。接收端機器的以太網卡捕獲到這些幀,並告訴操作系統幀已到達,然後對其進行存儲。就是在這個傳輸和接收的過程中,嗅探器會帶來安全方面的問題。
每一個在局域網(LAN)上的工作站都有其硬件地址,這些地址惟一地表示了網絡上的機器(這一點與Internet地址系統比較相似)。當用戶發送一個數據包時,這些數據包就會發送到LAN上所有可用的機器。
在一般情況下,網絡上所有的機器都可以“聽”到通過的流量,但對不屬於自己的數據包則不予響應(換句話說,工作站A不會捕獲屬於工作站B的數據,而是簡單地忽略這些數據)。如果某個工作站的網絡接口處於混雜模式(關於混雜模式的概念會在後面解釋),那麼它就可以捕獲網絡上所有的數據包和幀。
2.網絡監聽原理
Sniffer程序是一種利用以太網的特性把網絡適配卡(NIC,一般爲以太網卡)置爲雜亂(promiscuous)模式狀態的工具,一旦網卡設置爲這種模式,它就能接收傳輸在網絡上的每一個信息包。
普通的情況下,網卡只接收和自己的地址有關的信息包,即傳輸到本地主機的信息包。要使Sniffer能接收並處理這種方式的信息,系統需要支持BPF,Linux下需要支持SOCKET一PACKET。但一般情況下,網絡硬件和TCP/IP堆棧不支持接收或者發送與本地計算機無關的數據包,所以,爲了繞過標準的TCP/IP堆棧,網卡就必須設置爲我們剛開始講的混雜模式。一般情況下,要激活這種方式,內核必須支持這種僞設備Bpfilter,而且需要root權限來運行這種程序,所以sniffer需要root身份安裝,如果只是以本地用戶的身份進人了系統,那麼不可能喚探到root的密碼,因爲不能運行Sniffer。
基於Sniffer這樣的模式,可以分析各種信息包並描述出網絡的結構和使用的機器,由於它接收任何一個在同一網段上傳輸的數據包,所以也就存在着捕獲密碼、各種信息、祕密文檔等一些沒有加密的信息的可能性。這成爲黑客們常用的擴大戰果的方法,用來奪取其他主機的控制權
3 Snifffer的分類
Sniffer分爲軟件和硬件兩種,軟件的Sniffer有 NetXray、Packetboy、Net monitor等,其優點是物美價廉,易於學習使用,同時也易於交流;缺點是無法抓取網絡上所有的傳輸,某些情況下也就無法真正瞭解網絡的故障和運行情況。硬件的Sniffer通常稱爲協議分析儀,一般都是商業性的,價格也比較貴。
實際上本文中所講的Sniffer指的是軟件。它把包抓取下來,然後打開並查看其中的內容,可以得到密碼等。Sniffer只能抓取一個物理網段內的包,就是說,你和監聽的目標中間不能有路由或其他屏蔽廣播包的設備,這一點很重要。所以,對一般撥號上網的用戶來說,是不可能利用Sniffer來竊聽到其他人的通信內容的。
4.網絡監聽的目的
當一個黑客成功地攻陷了一臺主機,並拿到了root權限,而且還想利用這臺主機去攻擊同一網段上的其他主機時,他就會在這臺主機上安裝Sniffer軟件,對以太網設備上傳送的數據包進行偵聽,從而發現感興趣的包。如果發現符合條件的包,就把它存到一個LOg文件中去。通常設置的這些條件是包含字“username”或“password”的包,這樣的包裏面通常有黑客感興趣的密碼之類的東西。一旦黑客截獲得了某臺主機的密碼,他就會立刻進人這臺主機。
如果Sniffer運行在路由器上或有路由功能的主機上,就能對大量的數據進行監控,因爲所有進出網絡的數據包都要經過路由器。
Sniffer屬於第M層次的攻擊。就是說,只有在攻擊者已經進入了目標系統的情況下,才能使用Sniffer這種攻擊手段,以便得到更多的信息。
Sniffer除了能得到口令或用戶名外,還能得到更多的其他信息,比如一個重要的信息、在網上傳送的金融信息等等。Sniffer幾乎能得到任何在以太網上傳送的數據包。
Sniffer是一種比較複雜的攻擊手段,一般只有黑客老手纔有能力使用它,而對於一個網絡新手來說,即使在一臺主機上成功地編譯並運行了Sniffer,一般也不會得到什麼有用的信息,因爲通常網絡上的信息流量是相當大的,如果不加選擇地接收所有的包,然後從中找到所需要的信息非常困難;而且,如果長時間進行監聽,還有可能把放置Sniffer的機器的硬盤撐爆。
5.一個簡單的Sniffer程序
下面是一個非常簡單的C程序,它可以完成一般的監聽功能,/* */中的內容是本文的註解。
/*下面是包含進行調用系統和網絡函數的頭文件*/
#include〈stdio.h〉
#include〈sys/socket.h〉
#include〈netinet/in.h〉
#include〈arpa/inet.h〉
/*下面是IP和TCP包頭結構*/
struct IP{
unsigned int ip_length:4;
/*定義IP頭的長度*/
unsigned int ip_version:4;
/*IP版本,Ipv4 */
unsigned char ip_tos;
/*服務類型*/
unsigned short
ip_total_length; /*IP數據包的總長度*/
unsigned short ip_id;
/*鑑定城*/
unsigned short ip_flags;
/*IP 標誌 */
unsigned char ip_ttl;
/*IP 包的存活期*/
unsigned char ip_protocol;
/*IP 上層的協議*/
unsigned short ip_cksum;
/*IP頭校驗和*/
unsigned int ip_source ;
/*源IP地址*/
unsigned int ip_source;
/*目的IP地址*/
};
struct tcp{
unsigned short tcp_source_port;
/*定義TCP源端口*
unsigned short tcp_dest_port;
/*TCP目的端口*/
unsigned short tcp_seqno;
/*TC P序列號*/
unsigned int tcp_ackno;
/*發送者期望的下一個序列號*/
unsigned int tcp_res1:4;
/*下面幾個是TCP標誌*/
tcp_hlen:4
tcp_fin:1,
tcp_syn:1,
tcp_rst:1,
tcp_psh:1,
tcp_ack:1,
tcp_urg:1,
tcp_res2:2;
unsignd short tcp_winsize; /*能接收的最大字節數*/
unsigned short tcp_cksum;
/* TCP校驗和*/
unsigned short tcp_urgent;
/* 緊急事件標誌*/
};
/*主函數*/
int main()
{
int sock,bytes_recieved,fromlen;
char buffer[65535];
struct sockaddr_in from;
/*定義socket結構*/
struct ip ip;
/*定義IP和TCP*/
struct tcp *tcp;
sock=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
/* 上面是建立socket連接,第一個參數是地址族類型,用INTERNET類型*/
/* 第二個參數是socket類型,這裏用了SOCK_RAW,它可以繞過傳輸層*/
/* 直接訪問IP層的包,爲了調用SOCK_RAW,需要有root權限*/
/* 第三個參數是協議,選IPPROTO_TCP指定了接收TCP層的內容*/
while(1)
/*建立一個死循環,不停的接收網絡信息*/
{
fromlen=sizeof from;
bytes_recieved=recvfrom(sock,buffer,sizeofbuffer,0,(struct sockaddr *)&from,&fromlen);
/*上面這個函數是從建立的socket連接中接收數據*/
/*因爲recvfrom()需要一個sockaddr數據類型,所以我們用了一個強制類型轉換*/
print(/"//nBytes received ::: %5d//n/",bytes_recieved);
/*顯示出接收的數據字節數*/
printf(/"source address ::: %s//n/",inet_ntoa(from.sin_addr));
/*顯示出源地址*/
ip=(struct ip *)buffer;
/*把接收的數據轉化爲我們預先定義的結構,便於查看*/
printf(/"IP header length ::: %d//n/",ip->ip_length);
/*顯示IP頭的長度*/
print(/"Protocol ::: %d//n/",ip->ip_protocol);
/*顯示協議類型,6是TCP,17是UDP*/
tcp=(struct tcp *)(buffer + (4*ip->ip_iplength));
/*上面這名需要詳細解釋一下,因爲接收的包頭數據中,IP頭的大小是固定的4字節*/
/*所以我用IP長度乘以4,指向TCP頭部分*/
printf(/"Source port ::: %d//n/",ntohs(tcp->tcp_source_port); /*顯示出端口*/
printf(/"Dest prot ::: %d//n/",ntohs(tcp->tcp_dest_port));/*顯示出目標端口*/
以上這個C程序是爲了說明Sniffer的接收原理而列舉的一個最簡單的例子,它只是完成了Sniffer的接收功能,在運行它之前,我們還需要手工把同卡設爲混雜模式,在root權限下用如下命令設置:
ifconfig eth0 promisc
假設etho是你的以太網設備接口,然後運行編譯好的程序,就可以看到接收的數據包了。
這個程序雖然簡單,但是它說明了Sniffer的基本原理,就是先把同卡設備設爲混雜模式,然後直接接收IP層的數據。
當然這個程序的功能也太簡單,只能顯示源地址、目標地址和源端口、目標端口等極爲簡單的信息,這對於黑客來說是沒有什麼用處的,黑客要的是密碼之類的信息,這可以使用一些免費的Sniffer程序來完成。
想了解更全面的Sniffer知識,請進入這個頁面:http://www.cn90.net/viewthread.php?tid=2358&pid=10814
針對5minglei 的提問,我真是不好回答,因爲PID有很多解釋,其中之一是: PID是比例(p)+積分(I)+微分(D)控制程序
但是你說的是PID值,我猜你是不是指進程裏的PID項呢?
如果是這樣的話,其實PID一列代表了各進程的進程ID,也就是說,PID就是各進程的身份標識.
呵~~本來我還想多說點,可是下班了,沒時間了,不寫了,這樣吧,我拿出(部分)進程的編程源碼大家參考一下吧
創建新進程:fork函數
#include
#include
pid_t fork(void);
‘fork()’函數用於從已存在進程中創建一個新進程。新進程稱爲子進程,而原進程稱爲
父進程。你可以通過檢查‘fork()’函數的返回值知道哪個是父進程,哪個是子進程。父
進程得到的返回值是子進程的進程號,而子進程則返回0。以下這個範例程序說明它的基本
功能:
pid_t pid;
switch (pid = fork())
{
case -1:
/* 這裏pid爲-1,fork函數失敗 */
/* 一些可能的原因是 */
/* 進程數或虛擬內存用盡 */
perror(/"The fork failed!/");
break;
case 0:
/* pid爲0,子進程 */
/* 這裏,我們是孩子,要做什麼? */
/* ... */
/* 但是做完後, 我們需要做類似下面: */
_exit(0);
default:
/* pid大於0,爲父進程得到的子進程號 */
printf(/"Child/'s pid is %d//n/",pid);
}
當然,有人可以用‘if() ... else ...’語句取代‘switch()’語句,但是上面的形式是
一個有用的慣用方法。
第二十四個:什麼是主機、服務器、空間?他們的區別是什麼?
街街的提問,由於我現在時間有限,我作一下簡單的解答,希望你能理解~~
主機一般是指個人使用的電腦PC機。而在專業術語中,主機僅是電腦的一部分。而我們常說的主機卻往往代表整個電腦,你目前理解爲這個也行。。。
服務器一般是指用於專業用的電腦PC機,在實質上,服務器和主機沒有什麼意義上的區別。主機如果做爲服務器也是可以的,服務器也可以當個人主機用。
然而我們平時要做爲真正的服務器來使用時(一般是企業)。服務器的硬件要求要比普通的個人PC要求要高的多。比如WEB服務器,要24小時不能離線。所以在散熱,耐熱等方面就比普通PC要高很多。
至於空間,就是能通過網絡訪問到的計計算機磁盤空間,我們一般是指WEB服務器空間。如果你的主機有固定的IP地址。也能24在線,那麼你的硬盤也是可以作爲空間使用的,當然,還是需要進行一系列的服務器配置,別人才能訪問的到的~~