數據包傳輸的全過程

第一個

什麼是FTP?

FTP
是英文File Transfer Protocol的縮寫,意思是文件傳輸協議。它和HTTP一樣都是Internet上廣泛使用的協議,用來在兩臺計算機之間互相傳送文件。相比於HTTPFTP協議要複雜得多。複雜的原因,是因爲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、網絡新聞傳輸協議NNTPHTTP協議等。
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$……)和系統目錄winntwindows(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 ScriptJscript腳本程序代碼的網頁。當瀏覽器瀏覽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等,就是採用這一設計思想用硬件來實現快速轉發,大大提高了路由器的性能與效率。


新一代路由器使用轉發緩存來簡化分組的轉發操作。在快速轉發過程中,只需對一組具有相同目的地址和源地址的分組的前幾個分組進行傳統的路由轉發處理,並把成功轉發的分組的目的地址、源地址和下一網關地址(下一路由器地址)放人轉發緩存中。當其後的分組要進行轉發時,茵先查看轉發緩存,如果該分組的目的地址和源地址與轉發緩存中的匹配,則直接根據轉發緩存中的下一網關地址進行轉發,而無須經過傳統的複雜操作,大大減輕了路由器的負擔,達到了提高路由器吞吐量的目標。
第七個:什麼是肉雞



肉雞就是具有最高管理權限的遠程電腦。簡單的說就是受你控制的遠程電腦。肉雞可以是winUnix/Linux……等各種系統;肉雞可以是一家公司的服務器,一家網站的服務器,甚至是美國白宮或軍方的電腦,只要你有這本事入侵併控制他,呵呵。萊鳥所說用的肉雞一般是開了3389端口的Win2K系統的服務器。
要登陸肉雞,必須知道3個參數:遠程電腦的IP、用戶名、密碼。
第八個:什麼是shell


  操作系統與外部最主要的接口就叫做shellshell是操作系統最外面的一層。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. Bourne20世紀70年代中期在新澤西的AT&T貝爾實驗室編寫的,這就是Bourne shellBourne 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&Tbell實驗室David Korn開發了Korn shellksh結合了所有的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本身的實用程序,如lsrm,也可以是購買的商業程序,如xv,或者是自由軟件,如emacs)。然後shell在搜索路徑裏尋找這些應用程序(搜索路徑就是一個能找到可執行程序的目錄列表)。如果鍵入的命令不是一個內部命令並且在路徑裏沒有找到這個可執行文件,將會顯示一條錯誤信息。如果能夠成功找到命令,該內部命令或應用程序將被分解爲系統調用並傳給Linux內核。

  shell的另一個重要特性是它自身就是一個解釋型的程序設計語言,shell程序設計語言支持絕大多數在高級語言中能見到的程序元素,如函數、變量、數組和程序控制結構。shell編程語言簡單易學,任何在提示符中能鍵入的命令都能放到一個可執行的shell程序中。

  當普通用戶成功登錄,系統將執行一個稱爲shell的程序。正是shell進程提供了命令行提示符。作爲默認值(TurboLinux系統默認的shellBASH),對普通用戶用“$”作提示符,對超級用戶(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層,17層分別是:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。OSI模型在邏輯上可分爲兩個部分:低層的14層關注的是原始數據的傳輸;高層的57層關注的是網絡下的應用程序。


  我們可以用一個形象一些的例子對數據包的概念加以說明:我們在郵局郵寄產品時,雖然產品本身帶有自己的包裝盒,但是在郵寄的時候只用產品原包裝盒來包裝顯然是不行的。必須把內裝產品的包裝盒放到一個郵局指定的專用紙箱裏,這樣才能夠郵寄。這裏,產品包裝盒相當於數據包,裏面放着的產品相當於可用的數據,而專用紙箱就相當於幀,且一個幀中只有一個數據包。


  “包”聽起來非常抽象,那麼是不是不可見的呢?通過一定技術手段,是可以感知到數據包的存在的。比如在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 

第十七個:什麼是IRCInternet轉播交談)?


IRC
Internet Relay Chat)是一種基於Internet的通信協議,中文一般莆チ屑塘奶臁K怯煞依?Jarkko Oikarinen1988年首創的一種網絡聊天協議。經過十年的發展,目前世界上有超過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命令發送4ICMP(網間控制報文協議)回頹肭螅扛?2字節數據,如果一切正常,你應能得到4個回送應答。

Ping能夠以毫秒爲單位顯示發送回送請求到返回回送應答之間的時間量。如果應答時間短,表示數據報不必通過太多的路由器或網絡連接速度比較快。Ping還能顯示TTLTime To Live存在時間)值,你可以通過TTL值推算一下數據包已經通過了多少個路由器:源地點TTL起始值(就是比返回TTL略大的一個2的乘方數)-返回時TTL值。例如,返回TTL值爲119,那麼可以推算數據報離開源地址的TTL起始值爲128,而源地點到目標地點要通過9個路由器網段(128-119);如果返回TTL值爲246TTL起始值就是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(但不排除ISPDNS會有問題)。

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,因爲每個進程都擁有其獨一無二的編碼。該進程IDWindows NTWindows 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
這個進程是不可以從任務管理器中關掉的。
這是一個會話管理子系統,負責啓動用戶會話。這個進程是通過系統進程初始化的並且對許多活動的,
包括已經正在運行的WinlogonWin32Csrss.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協議組之所以流行,部分原因是因爲它可以用在各種各樣的信道和底層協議(例如T1X.25、以太網以及RS-232串行接口)之上。確切地說,TCP/IP協議是一組包括TCP協議和IP協議,UDPUser Datagram Protocol)協議、ICMPInternet Control Message Protocol)協議和其他一些協議的協議組。

TCP/IP
整體構架概述

TCP/IP
協議並不完全符合OSI的七層參考模型。傳統的開放式系統互連參考模型,是一種通信協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各種硬件在相同的層次上相互通信。這7層是:物理層、數據鏈路層、網路層、傳輸層、話路層、表示層和應用層。而TCP/IP通訊協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成自己的需求。這4層分別爲:

應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等。

傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCPUDP給數據包加入傳輸數據並把它傳輸到下一層中,這一層負責傳送數據,並且確定數據已被送達並接收。

互連網絡層:負責提供基本的數據封包傳送功能,讓每一塊數據包都能夠到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。

網絡接口層:對實際的網絡媒體的管理,定義如何使用實際網絡(如EthernetSerial Line等)來傳送數據。

TCP/IP
中的協議

以下簡單介紹TCP/IP中的協議都具備什麼樣的功能,都是如何工作的:

1
IP

網際協議IPTCP/IP的心臟,也是網絡層中最重要的協議。

IP
層接收由更低層(網絡接口層例如以太網設備驅動程序)發來的數據包,並把該數據包發送到更高層---TCPUDP層;相反,IP層也把從TCPUDP層接收來的數據包傳送到更低層。IP數據包是不可靠的,因爲IP並沒有做任何事情來確認數據包是按順序發送的或者沒有被破壞。IP數據包中含有發送它的主機的地址(源地址)和接收它的主機的地址(目的地址)。

高層的TCPUDP服務在接收數據包時,通常假設包中的源地址是有效的。也可以這樣說,IP地址形成了許多服務的認證基礎,這些服務相信數據包是從一個有效的主機發送來的。IP確認包含一個選項,叫作IP source routing,可以用來指定一條源地址和目的地址之間的直接路徑。對於一些TCPUDP的服務來說,使用了該選項的IP包好象是從路徑上的最後一個系統傳遞過來的,而不是來自於它的真實地點。這個選項是爲了測試而存在的,說明了它可以被用來欺騙系統來進行平常是被禁止的連接。那麼,許多依靠IP源地址做確認的服務將產生問題並且會被非法入侵。

2. TCP

如果IP數據包中有已經封好的TCP數據包,那麼IP將把它們向‘上’傳送到TCP層。TCP將包排序並進行錯誤檢查,同時實現虛電路間的連接。TCP數據包中包括序號和確認,所以未按照順序收到的包可以被排序,而損壞的包可以被重傳。

TCP
將它的信息送到更高層的應用程序,例如Telnet的服務程序和客戶程序。應用程序輪流將信息送回TCP層,TCP層便將它們向下傳送到IP層,設備驅動程序和物理介質,最後到接收方。

面向連接的服務(例如TelnetFTPrloginX WindowsSMTP)需要高度的可靠性,所以它們使用了TCPDNS在某些情況下使用TCP(發送和接收域名數據庫),但使用UDP傳送有關單個主機的信息。

3.UDP

UDP
TCP位於同一層,但對於數據包的順序錯誤或重發。因此,UDP不被應用於那些使用虛電路的面向連接的服務,UDP主要用於那些面向查詢---應答的服務,例如NFS。相對於FTPTelnet,這些服務需要交換的信息量較小。使用UDP的服務包括NTP(網落時間協議)和DNSDNS也使用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連接是如何相互確認並協調一致呢?TCPUDP連接唯一地使用每個信息中的如下四項進行確認:

IP地址---發送包的IP地址。

目的IP地址---接收包的IP地址。

源端口---源系統上的連接的端口。

目的端口---目的系統上的連接的端口。

端口是一個軟件結構,被客戶程序或服務進程用來發送和接收信息。一個端口對應一個16比特的數。服務進程通常使用一個固定的端口,例如,SMTP使用25Xwindows使用6000。這些端口號是‘廣爲人知’的,因爲在建立與特定的主機或服務的連接時,需要這些地址和目的地址進行通訊。

第二十二個:什麼是Sniffer


現在人們談到黑客攻擊,一般所指的都是以主動方式進行的,例如利用漏洞或者猜測系統密碼的方式對系統進行攻擊。但是其實還有一類危害非常大的被動攻擊方式往往爲大家所忽視,那就是利用Sniffer進行嗅探攻擊。
Sniffer
,中文可以翻譯爲嗅探器,是一種威脅性極大的被動攻擊工具。使用這種工具,可以監視網絡的狀態、數據流動情況以及網絡上傳輸的信息。當信息以明文的形式在網絡上傳輸時,便可以使用網絡監聽的方式來進行攻擊。將網絡接口設置在監聽模式,便可以將網上傳輸的源源不斷的信息截獲。黑客們常常用它來截獲用戶的口令。據說某個骨幹網絡的路由器曾經被黑客攻人,並嗅探到大量的用戶口令。本文將詳細介紹Sniffer的原理和應用。

一、Sniffer 原理

1
.網絡技術與設備簡介
在講述Snier的概念之前,首先需要講述局域網設備的一些基本概念。
數據在網絡上是以很小的稱爲幀(Frame)的單位傳輸的,幀由幾部分組成,不同的部分執行不同的功能。幀通過特定的稱爲網絡驅動程序的軟件進行成型,然後通過網卡發送到網線上,通過網線到達它們的目的機器,在目的機器的一端執行相反的過程。接收端機器的以太網卡捕獲到這些幀,並告訴操作系統幀已到達,然後對其進行存儲。就是在這個傳輸和接收的過程中,嗅探器會帶來安全方面的問題。
每一個在局域網(LAN)上的工作站都有其硬件地址,這些地址惟一地表示了網絡上的機器(這一點與Internet地址系統比較相似)。當用戶發送一個數據包時,這些數據包就會發送到LAN上所有可用的機器。
在一般情況下,網絡上所有的機器都可以“聽”到通過的流量,但對不屬於自己的數據包則不予響應(換句話說,工作站A不會捕獲屬於工作站B的數據,而是簡單地忽略這些數據)。如果某個工作站的網絡接口處於混雜模式(關於混雜模式的概念會在後面解釋),那麼它就可以捕獲網絡上所有的數據包和幀。

2
.網絡監聽原理
Sniffer
程序是一種利用以太網的特性把網絡適配卡(NIC,一般爲以太網卡)置爲雜亂(promiscuous)模式狀態的工具,一旦網卡設置爲這種模式,它就能接收傳輸在網絡上的每一個信息包。
普通的情況下,網卡只接收和自己的地址有關的信息包,即傳輸到本地主機的信息包。要使Sniffer能接收並處理這種方式的信息,系統需要支持BPFLinux下需要支持SOCKETPACKET。但一般情況下,網絡硬件和TCPIP堆棧不支持接收或者發送與本地計算機無關的數據包,所以,爲了繞過標準的TCPIP堆棧,網卡就必須設置爲我們剛開始講的混雜模式。一般情況下,要激活這種方式,內核必須支持這種僞設備Bpfilter,而且需要root權限來運行這種程序,所以sniffer需要root身份安裝,如果只是以本地用戶的身份進人了系統,那麼不可能喚探到root的密碼,因爲不能運行Sniffer
基於Sniffer這樣的模式,可以分析各種信息包並描述出網絡的結構和使用的機器,由於它接收任何一個在同一網段上傳輸的數據包,所以也就存在着捕獲密碼、各種信息、祕密文檔等一些沒有加密的信息的可能性。這成爲黑客們常用的擴大戰果的方法,用來奪取其他主機的控制權

3 Snifffer
的分類
Sniffer
分爲軟件和硬件兩種,軟件的Sniffer NetXrayPacketboyNet 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
/*
下面是IPTCP包頭結構*/
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;
/*
定義IPTCP*/
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);
/*
顯示協議類型,6TCP17UDP*/
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-1fork函數失敗 */
/*
一些可能的原因是 */
/*
進程數或虛擬內存用盡 */
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在線,那麼你的硬盤也是可以作爲空間使用的,當然,還是需要進行一系列的服務器配置,別人才能訪問的到的~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章