第一個
什麼是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」嗎?
1、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的第六版。
2、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
病毒後記
其實如今的病毒,隨着網絡的發展。已經變的更加的複雜。它與黑客技術、木馬等技術相結合,讓你沒法輕易查殺!其威害之大,由近期的衝擊波病毒,僅見一斑! 因此你們學習瞭解電腦知識與安全知識,是必不可少的。咱們這裏學習黑客等技術,也不是教你如何去攻擊別人,這樣是不道德的,主要是瞭解技術後,用於防範。 再一個,如何作好防範,讓病毒沒法入手。纔是最重要的。對於初學的朋友,一個好的殺毒工具是必須的。我的認爲正版的瑞星仍是不錯的,其網上升級速度很快,防與殺的效果也很好!
=====+++++++=============== 我在普及最基本的知識時,遇到一個難題,我有時不知道該講些什麼?以什麼爲主題呢?因此但願你們在回貼時,若是但願瞭解什麼相關的問題,請提出來。我好跟據提問,來安排主題! 對於所發佈的主題,若有不明白的,也請及時提出,我會盡力做出完美的解答!
|
#7
第六個 : 什麼是路由器
路由器是一種鏈接多個網絡或網段的網絡設備,它能將不一樣網絡或網段之間的數據信息進行「翻譯」,以使它們可以相互「讀」懂對方的數據,從而構成一個更大的網絡。 路由器有兩大典型功能,即數據通道功能和控制功能。數據通道功能包括轉發決定、背板轉發以及輸出鏈路調度等,通常由特定的硬件來完成;控制功能通常用軟件來實現,包括與相鄰路由器之間的信息交換、系統配置、系統管理等。
多少年來,路由器的發展有起有伏。90年代中期,傳統路由器成爲制約因特網發展的瓶頸。ATM交換機取而代之,成爲IP骨幹網的核心,路由器變成了配角。進入90年代末期,Internet規模進一步擴大,流量每半年翻一番,ATM網又成爲瓶頸,路由器東山再起,Gbps路由交換機在1997年面世後,人們又開始以Gbps路由交換機取代ATM交換機,架構以路由器爲核心的骨幹網。
附:路由器原理及路由協議 近十年來,隨着計算機網絡規模的不斷擴大,大型互聯網絡(如Internet)的迅猛發展,路由技術在網絡技術中已逐漸成爲關鍵部分,路由器也隨之成爲最重要的網絡設備。用戶的需求推進着路由技術的發展和路由器的普及,人們已經不知足於僅在本地網絡上共享信息,而但願最大限度地利用全球各個地區、各類類型的網絡資源。而在目前的狀況下,任何一個有必定規模的計算機網絡(如企業網、校園網、智能大廈等),不管採用的是快速以大網技術、FDDI技術,仍是ATM技術,都離不開路由器,不然就沒法正常運做和管理。
1 網絡互連 把本身的網絡同其它的網絡互連起來,從網絡中獲取更多的信息和向網絡發佈本身的消息,是網絡互連的最主要的動力。網絡的互連有多種方式,其中使用最多的是網橋互連和路由器互連。
1.1 網橋互連的網絡
網橋工做在OSI模型中的第二層,即鏈路層。完成數據幀(frame)的轉發,主要目的是在鏈接的網絡間提供透明的通訊。網橋的轉發是依據數據幀中的源地址和目的地址來判斷一個幀是否應轉發和轉發到哪一個端口。幀中的地址稱爲「MAC」地址或「硬件」地址,通常就是網卡所帶的地址。
網橋的做用是把兩個或多個網絡互連起來,提供透明的通訊。網絡上的設備看不到網橋的存在,設備之間的通訊就如同在一個網上同樣方便。因爲網橋是在數據幀上進行轉發的,所以只能鏈接相同或類似的網絡(相同或類似結構的數據幀),如以太網之間、以太網與令牌環(token ring)之間的互連,對於不一樣類型的網絡(數據幀結構不一樣),如以太網與X.25之間,網橋就無能爲力了。
網橋擴大了網絡的規模,提升了網絡的性能,給網絡應用帶來了方便,在之前的網絡中,網橋的應用較爲普遍。但網橋互連也帶來了很多問題:一個是廣播風暴,網橋不阻擋網絡中廣播消息,當網絡的規模較大時(幾個網橋,多個以太網段),有可能引發廣播風暴(broadcasting storm),致使整個網絡全被廣播信息充滿,直至徹底癱瘓。第二個問題是,當與外部網絡互連時,網橋會把內部和外部網絡合二爲一,成爲一個網,雙方都自動向對方徹底開放本身的網絡資源。這種互連方式在與外部網絡互連時顯然是難以接受的。問題的主要根源是網橋只是最大限度地把網絡溝通,而無論傳送的信息是什麼。
1.2 路由器互連網絡
路由器互連與網絡的協議有關,咱們討論限於TCP/IP網絡的狀況。
路由器工做在OSI模型中的第三層,即網絡層。路由器利用網絡層定義的「邏輯」上的網絡地址(即IP地址)來區別不一樣的網絡,實現網絡的互連和隔離,保持各個網絡的獨立性。路由器不轉發廣播消息,而把廣播消息限制在各自的網絡內部。發送到其餘網絡的數據茵先被送到路由器,再由路由器轉發出去。
IP路由器只轉發IP分組,把其他的部分擋在網內(包括廣播),從而保持各個網絡具備相對的獨立性,這樣能夠組成具備許多網絡(子網)互連的大型的網絡。因爲是在網絡層的互連,路由器可方便地鏈接不一樣類型的網絡,只要網絡層運行的是IP協議,經過路由器就可互連起來。
網絡中的設備用它們的網絡地址(TCP/IP網絡中爲IP地址)互相通訊。IP地址是與硬件地址無關的「邏輯」地址。路由器只根據IP地址來轉發數據。IP地址的結構有兩部分,一部分定義網絡號,另外一部分定義網絡內的主機號。目前,在Internet網絡中採用子網掩碼來肯定IP地址中網絡地址和主機地址。子網掩碼與IP地址同樣也是32bit,而且二者是一一對應的,並規定,子網掩碼中數字爲「1」所對應的IP地址中的部分爲網絡號,爲「0」所對應的則爲主機號。網絡號和主機號合起來,才構成一個完整的IP地址。同一個網絡中的主機IP地址,其網絡號必須是相同的,這個網絡稱爲IP子網。
通訊只能在具備相同網絡號的IP地址之間進行,要與其它IP子網的主機進行通訊,則必須通過同一網絡上的某個路由器或網關(gateway)出去。不一樣網絡號的IP地址不能直接通訊,即便它們接在一塊兒,也不能通訊。
路由器有多個端口,用於鏈接多個IP子網。每一個端口的IP地址的網絡號要求與所鏈接的IP子網的網絡號相同。不一樣的端口爲不一樣的網絡號,對應不一樣的IP子網,這樣才能使各子網中的主機經過本身子網的IP地址把要求出去的IP分組送到路由器上
2 路由原理
當IP子網中的一臺主機發送IP分組給同一IP子網的另外一臺主機時,它將直接把IP分組送到網絡上,對方就能收到。而要送給不一樣IP於網上的主機時,它要選擇一個能到達目的子網上的路由器,把IP分組送給該路由器,由路由器負責把IP分組送到目的地。若是沒有找到這樣的路由器,主機就把IP分組送給一個稱爲「缺省網關(default gateway)」的路由器上。「缺省網關」是每臺主機上的一個配置參數,它是接在同一個網絡上的某個路由器端口的IP地址。
路由器轉發IP分組時,只根據IP分組目的IP地址的網絡號部分,選擇合適的端口,把IP分組送出去。同主機同樣,路由器也要斷定端口所接的是不是目的子網,若是是,就直接把分組經過端口送到網絡上,不然,也要選擇下一個路由器來傳送分組。路由器也有它的缺省網關,用來傳送不知道往哪兒送的IP分組。這樣,經過路由器把知道如何傳送的IP分組正確轉發出去,不知道的IP分組送給「缺省網關」路由器,這樣一級級地傳送,IP分組最終將送到目的地,送不到目的地的IP分組則被網絡丟棄了。
目前TCP/IP網絡,所有是經過路由器互連起來的,Internet就是成千上萬個IP子網經過路由器互連起來的國際性網絡。這種網絡稱爲以路由器爲基礎的網絡(router based network),造成了以路由器爲節點的「網間網」。在「網間網」中,路由器不只負責對IP分組的轉發,還要負責與別的路由器進行聯絡,共同肯定「網間網」的路由選擇和維護路由表。
路由動做包括兩項基本內容:尋徑和轉發。尋徑即斷定到達目的地的最佳路徑,由路由選擇算法來實現。因爲涉及到不一樣的路由選擇協議和路由選擇算法,要相對複雜一些。爲了斷定最佳路徑,路由選擇算法必須啓動並維護包含路由信息的路由表,其中路由信息依賴於所用的路由選擇算法而不盡相同。路由選擇算法將收集到的不一樣信息填入路由表中,根據路由表可將目的網絡與下一站(nexthop)的關係告訴路由器。路由器間互通訊息進行路由更新,更新維護路由表使之正確反映網絡的拓撲變化,並由路由器根據量度來決定最佳路徑。這就是路由選擇協議(routing protocol),例如路由信息協議(RIP)、開放式最短路徑優先協議(OSPF)和邊界網關協議(BGP)等。
轉發即沿尋徑好的最佳路徑傳送信息分組。路由器首先在路由表中查找,判明是否知道如何將分組發送到下一個站點(路由器或主機),若是路由器不知道如何發送分組,一般將該分組丟棄;不然就根據路由表的相應表項將分組發送到下一個站點,若是目的網絡直接與路由器相連,路由器就把分組直接送到相應的端口上。這就是路由轉發協議(routed protocol)。
路由轉發協議和路由選擇協議是相互配合又相互獨立的概念,前者使用後者維護的路由表,同時後者要利用前者提供的功能來發布路由協議數據分組。下文中提到的路由協議,除非特別說明,都是指路由選擇協議,這也是廣泛的習慣。
3 路由協議
典型的路由選擇方式有兩種:靜態路由和動態路由。
靜態路由是在路由器中設置的固定的路由表。除非網絡管理員干預,不然靜態路由不會發生變化。因爲靜態路由不能對網絡的改變做出反映,通常用於網絡規模不大、拓撲結構固定的網絡中。靜態路由的優勢是簡單、高效、可靠。在全部的路由中,靜態路由優先級最高。當動態路由與靜態路由發生衝突時,以靜態路由爲準。
動態路由是網絡中的路由器之間相互通訊,傳遞路由信息,利用收到的路由信息更新路由器表的過程。它能實時地適應網絡結構的變化。若是路由更新信息代表發生了網絡變化,路由選擇軟件就會從新計算路由,併發出新的路由更新信息。這些信息經過各個網絡,引發各路由器從新啓動其路由算法,並更新各自的路由表以動態地反映網絡拓撲變化。動態路由適用於網絡規模大、網絡拓撲復雜的網絡。固然,各類動態路由協議會不一樣程度地佔用網絡帶寬和CPU資源。
靜態路由和動態路由有各自的特色和適用範圍,所以在網絡中動態路由一般做爲靜態路由的補充。當一個分組在路由器中進行尋徑時,路由器首先查找靜態路由,若是查到則根據相應的靜態路由轉發分組;不然再查找動態路由。
根據是否在一個自治域內部使用,動態路由協議分爲內部網關協議(IGP)和外部網關協議(EGP)。這裏的自治域指一個具備統一管理機構、統一路由策略的網絡。自治域內部採用的路由選擇協議稱爲內部網關協議,經常使用的有RIP、OSPF;外部網關協議主要用於多個自治域之間的路由選擇,經常使用的是BGP和BGP-4。下面分別進行簡要介紹。
3.1 RIP路由協議
RIP協議最初是爲Xerox網絡系統的Xerox parc通用協議而設計的,是Internet中經常使用的路由協議。RIP採用距離向量算法,即路由器根據距離選擇路由,因此也稱爲距離向量協議。路由器收集全部可到達目的地的不一樣路徑,而且保存有關到達每一個目的地的最少站點數的路徑信息,除到達目的地的最佳路徑外,任何其它信息均予以丟棄。同時路由器也把所收集的路由信息用RIP協議通知相鄰的其它路由器。這樣,正確的路由信息逐漸擴散到了全網。
RIP使用很是普遍,它簡單、可靠,便於配置。可是RIP只適用於小型的同構網絡,由於它容許的最大站點數爲15,任何超過15個站點的目的地均被標記爲不可達。並且RIP每隔30s一次的路由信息廣播也是形成網絡的廣播風暴的重要緣由之一。
3.2 OSPF路由協議
80年代中期,RIP已不能適應大規模異構網絡的互連,0SPF隨之產生。它是網間工程任務組織(1ETF)的內部網關協議工做組爲IP網絡而開發的一種路由協議。
0SPF是一種基於鏈路狀態的路由協議,須要每一個路由器向其同一管理域的全部其它路由器發送鏈路狀態廣播信息。在OSPF的鏈路狀態廣播中包括全部接口信息、全部的量度和其它一些變量。利用0SPF的路由器首先必須收集有關的鏈路狀態信息,並根據必定的算法計算出到每一個節點的最短路徑。而基於距離向量的路由協議僅向其鄰接路由器發送有關路由更新信息。
與RIP不一樣,OSPF將一個自治域再劃分爲區,相應地即有兩種類型的路由選擇方式:當源和目的地在同一區時,採用區內路由選擇;當源和目的地在不一樣區時,則採用區間路由選擇。這就大大減小了網絡開銷,並增長了網絡的穩定性。當一個區內的路由器出了故障時並不影響自治域內其它區路由器的正常工做,這也給網絡的管理、維護帶來方便。
3.3 BGP和BGP-4路由協議
BGP是爲TCP/IP互聯網設計的外部網關協議,用於多個自治域之間。它既不是基於純粹的鏈路狀態算法,也不是基於純粹的距離向量算法。它的主要功能是與其它自治域的BGP交換網絡可達信息。各個自治域能夠運行不一樣的內部網關協議。BGP更新信息包括網絡號/自治域路徑的成對信息。自治域路徑包括到達某個特定網絡須通過的自治域串,這些更新信息經過TCP傳送出去,以保證傳輸的可靠性。
爲了知足Internet日益擴大的須要,BGP還在不斷地發展。在最新的BGp4中,還能夠將類似路由合併爲一條路由。
3.4 路由表項的優先問題
在一個路由器中,可同時配置靜態路由和一種或多種動態路由。它們各自維護的路由表都提供給轉發程序,但這些路由表的表項間可能會發生衝突。這種衝突可經過配置各路由表的優先級來解決。一般靜態路由具備默認的最高優先級,當其它路由表表項與它矛盾時,均按靜態路由轉發。
4 路由算法
路由算法在路由協議中起着相當重要的做用,採用何種算法每每決定了最終的尋徑結果,所以選擇路由算法必定要仔細。一般須要綜合考慮如下幾個設計目標:
——(1)最優化:指路由算法選擇最佳路徑的能力。
——(2)簡潔性:算法設計簡潔,利用最少的軟件和開銷,提供最有效的功能。
——(3)堅固性:路由算法處於非正常或不可預料的環境時,如硬件故障、負載太高或操做失誤時,都能正確運行。因爲路由器分佈在網絡聯接點上,因此在它們出故障時會產生嚴重後果。最好的路由器算法一般能經受時間的考驗,並在各類網絡環境下被證明是可靠的。
——(4)快速收斂:收斂是在最佳路徑的判斷上全部路由器達到一致的過程。當某個網絡事件引發路由可用或不可用時,路由器就發出更新信息。路由更新信息遍佈整個網絡,引起從新計算最佳路徑,最終達到全部路由器一致公認的最佳路徑。收斂慢的路由算法會形成路徑循環或網絡中斷。
——(5)靈活性:路由算法能夠快速、準確地適應各類網絡環境。例如,某個網段發生故障,路由算法要能很快發現故障,併爲使用該網段的全部路由選擇另外一條最佳路徑。
路由算法按照種類可分爲如下幾種:靜態和動態、單路和多路、平等和分級、源路由和透明路由、域內和域間、鏈路狀態和距離向量。前面幾種的特色與字面意思基本一致,下面着重介紹鏈路狀態和距離向量算法。
鏈路狀態算法(也稱最短路徑算法)發送路由信息到互聯網上全部的結點,然而對於每一個路由器,僅發送它的路由表中描述了其自身鏈路狀態的那一部分。距離向量算法(也稱爲Bellman-Ford算法)則要求每一個路由器發送其路由表所有或部分信息,但僅發送到鄰近結點上。從本質上來講,鏈路狀態算法將少許更新信息發送至網絡各處,而距離向量算法發送大量更新信息至鄰接路由器。
因爲鏈路狀態算法收斂更快,所以它在必定程度上比距離向量算法更不易產生路由循環。但另外一方面,鏈路狀態算法要求比距離向量算法有更強的CPU能力和更多的內存空間,所以鏈路狀態算法將會在實現時顯得更昂貴一些。除了這些區別,兩種算法在大多數環境下都能很好地運行。
最後須要指出的是,路由算法使用了許多種不一樣的度量標準去決定最佳路徑。複雜的路由算法可能採用多種度量來選擇路由,經過必定的加權運算,將它們合併爲單個的複合度量、再填入路由表中,做爲尋徑的標準。一般所使用的度量有:路徑長度、可靠性、時延、帶寬、負載、通訊成本等
5 新一代路由器
因爲多媒體等應用在網絡中的發展,以及ATM、快速以太網等新技術的不斷採用,網絡的帶寬與速率飛速提升,傳統的路由器已不能知足人們對路由器的性能要求。由於傳統路由器的分組轉發的設計與實現均基於軟件,在轉發過程當中對分組的處理要通過許多環節,轉發過程複雜,使得分組轉發的速率較慢。另外,因爲路由器是網絡互連的關鍵設備,是網絡與其它網絡進行通訊的一個「關口」,對其安全性有很高的要求,所以路由器中各類附加的安全措施增長了CPU的負擔,這樣就使得路由器成爲整個互聯網上的「瓶頸」。
傳統的路由器在轉發每個分組時,都要進行一系列的複雜操做,包括路由查找、訪問控制表匹配、地址解析、優先級管理以及其它的附加操做。這一系列的操做大大影響了路由器的性能與效率,下降了分組轉發速率和轉發的吞吐量,增長了CPU的負擔。而通過路由器的先後分組間的相關性很大,具備相同目的地址和源地址的分組每每連續到達,這爲分組的快速轉發提供了實現的可能與依據。新一代路由器,如IP Switch、Tag Switch等,就是採用這一設計思想用硬件來實現快速轉發,大大提升了路由器的性能與效率。
新一代路由器使用轉發緩存來簡化分組的轉發操做。在快速轉發過程當中,只需對一組具備相同目的地址和源地址的分組的前幾個分組進行傳統的路由轉發處理,並把成功轉發的分組的目的地址、源地址和下一網關地址(下一路由器地址)放人轉發緩存中。當其後的分組要進行轉發時,茵先查看轉發緩存,若是該分組的目的地址和源地址與轉發緩存中的匹配,則直接根據轉發緩存中的下一網關地址進行轉發,而無須通過傳統的複雜操做,大大減輕了路由器的負擔,達到了提升路由器吞吐量的目標。
|
|
第七個:什麼是肉雞
肉雞就是具備最高管理權限的遠程電腦。簡單的說就是受你控制的遠程電腦。肉雞能夠是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代理服務器地址和端口-> 肯定 -> 肯定。
#15
第十四個:什麼是協議
協議就是對計算機之間鏈接的信息格式、能被收/發雙方接受的傳送信息內容的一組定義。協議有「多層」結構,高層協議如IPX或TCP/IP負責點到點傳送信息包,較低層協議提供專門的信息和命令容許系統操做。
#16
第十五個:什麼是數據包
「包」(Packet)是TCP/IP協議通訊傳輸中的數據單位,通常也稱「數據包」。有人說,局域網中傳輸的不是「幀」(Frame)嗎?沒錯,可是TCP/IP協議是工做在OSI模型第三層(網絡層)、第四層(傳輸層)上的,而幀是工做在第二層(數據鏈路層)。上一層的內容由下一層的內容來傳輸,因此在局域網中,「包」是包含在「幀」裏的。 名詞解釋:OSI(Open System Interconnection,開放系統互聯)模型是由國際標準化組織(ISO)定義的標準,它定義了一種分層體系結構,在其中的每一層定義了針對不一樣通訊級別的協議。OSI模型有7層,17層分別是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。OSI模型在邏輯上可分爲兩個部分:低層的14層關注的是原始數據的傳輸;高層的57層關注的是網絡下的應用程序。
咱們能夠用一個形象一些的例子對數據包的概念加以說明:咱們在郵局郵寄產品時,雖然產品自己帶有本身的包裝盒,可是在郵寄的時候只用產品原包裝盒來包裝顯然是不行的。必須把內裝產品的包裝盒放到一個郵局指定的專用紙箱裏,這樣纔可以郵寄。這裏,產品包裝盒至關於數據包,裏面放着的產品至關於可用的數據,而專用紙箱就至關於幀,且一個幀中只有一個數據包。
「包」聽起來很是抽象,那麼是否是不可見的呢?經過必定技術手段,是能夠感知到數據包的存在的。好比在Windows 2000 Server中,把鼠標移動到任務欄右下角的網卡圖標上(網卡須要接好雙絞線、連入網絡),就能夠看到「發送:××包,收到:××包」的提示。經過數據包捕獲軟件,也能夠將數據包捕獲並加以分析。
(見:附件圖)就是用數據包捕獲軟件Iris捕獲到的數據包的界面圖,在此,你們能夠很清楚地看到捕獲到的數據包的MAC地址、IP地址、協議類型端口號等細節。經過分析這些數據,網管員就能夠知道網絡中到底有什麼樣的數據包在活動了。
附: 數據包的結構 數據包的結構很是複雜,不是三言兩語可以說清的,在這裏咱們主要了解一下它的關鍵構成就能夠了,這對於理解TCP/IP協議的通訊原理是很是重要的。數據包主要由「目的IP地址」、「源IP地址」、「淨載數據」等部分構成。 數據包的結構與咱們日常寫信很是相似,目的IP地址是說明這個數據包是要發給誰的,至關於收信人地址;源IP地址是說明這個數據包是發自哪裏的,至關於發信人地址;而淨載數據至關於信件的內容。 正是由於數據包具備這樣的結構,安裝了TCP/IP協議的計算機之間才能相互通訊。咱們在使用基於TCP/IP協議的網絡時,網絡中其實傳遞的就是數據包。理解數據包,對於網絡管理的網絡安全具備相當重要的意義。 第十六個:什麼是IPX
IPX(Internetwork Packet eXchange‘網絡報文分組交換’)是Novell公司用於Netware網絡操做系統的通訊協議。基於此協議可實現客戶機/服務器模式的局域網,所以在局域網領域被普遍採用。隨着Internet和Intranet的迅速發展,這種協議將被Internet的基本通訊協議TCP/IP協議取代,由於採用TCP/IP協議可創建更加簡單而統一的信息交換平臺。
#18
第十七個:什麼是Internet/Intranet
Internet(國際互聯網)是一個由各類不一樣類型和規模的獨立運行與管理的計算機網絡組成的全球範圍的計算機網絡。組成Internet的計算機網絡包括局域網(LAN)、城域網(MAN)以及大規模的廣域網(WAN)等。這些網絡經過普通電話線、高速率專用線路、衛星、微波和光纜等通訊線路把不一樣國家的大學、公司、科研機構以及軍事和政府等組織的網絡鏈接起來。Internet網絡互連採用的基本協議是TCP/IP。 任何一個地方的任意一個Internet用戶均可以從Internet中得到任何方面的信息,如天然、社會、政治、歷史、科技、教育、衛生、娛樂、政治決策、金融、商業和天氣預報等等。
Intranet(內部網)指採用Internet技術創建的企業內部專用網絡。它以TCP/IP協議做爲基礎,以Web爲核心應用,構成統一各便利的信息交換平臺。Intranet可實現的功能極爲普遍和強大。
|
|
|
19
第十七個:什麼是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.2五、以太網以及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使用2五、Xwindows使用6000。這些端口號是‘廣爲人知’的,由於在創建與特定的主機或服務的鏈接時,須要這些地址和目的地址進行通信。
第二十二個:什麼是Sniffer
如今人們談到黑客攻擊,通常所指的都是以主動方式進行的,例如利用漏洞或者猜想系統密碼的方式對系統進行攻擊。可是其實還有一類危害很是大的被動攻擊方式每每爲你們所忽視,那就是利用Sniffer進行嗅探攻擊。
Sniffer,中文能夠翻譯爲嗅探器,是一種威脅性極大的被動攻擊工具。使用這種工具,能夠監視網絡的狀態、數據流動狀況以及網絡上傳輸的信息。當信息以明文的形式在網絡上傳輸時,即可以使用網絡監聽的方式來進行攻擊。將網絡接口設置在監聽模式,即可以將網上傳輸的源源不斷的信息截獲。黑客們經常用它來截獲用戶的口令。聽說某個骨幹網絡的路由器曾經被黑客攻人,並嗅探到大量的用戶口令。本文將詳細介紹Sniffer的原理和應用。
1、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
第二十三個:什麼是PID值 針對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在線,那麼你的硬盤也是能夠做爲空間使用的,固然,仍是須要進行一系列的服務器配置,別人才能訪問的到的~~