什麼是網路安全?
vpn
虛擬專用網(VPN): VPN是另一種網路安全類型,能夠加密從端點到網路(主要是通過Internet)的連接。遠程訪問VPN通常使用IPsec或安全套接字層來認證網路和設備之間的通信。
無線安全性:隨著無線網路和接入點的發展,移動辦公運動正在迅速發展。但是,無線網路不如有線網路安全,這為黑客進入提供了空間。因此,確保無線安全性至關重要。應該注意的是,如果沒有嚴格的安全措施,安裝無線區域網可能就像在各處放置乙太網埠一樣。必須使用專門設計用於保護無線網路的產品,以防止發生利用漏洞。
端點安全性: 端點安全性(也稱為網路保護或網路安全性)是一種通過遠程設備(例如攜帶型計算機或其他一些無線設備和移動設備)進行訪問時用於保護公司網路的方法。例如,Comodo Advanced Endpoint Protection軟體提供了七層防禦,包括病毒處理、文件信譽、自動沙盒、主機入侵防護、Web URL過濾、防火牆和防病毒軟體。所有這些都在一個產品中提供,以保護它們免受未知和已知威脅的侵害。
網路訪問控制(NAC):此網路安全過程可幫助您控制哪些人可以訪問您的網路。必須識別每個設備和用戶,以阻止潛在的攻擊者。這確實可以幫助您實施安全策略。不合規的端點設備只能被授予有限的訪問許可權,也可以被阻止。
技術網路保護:技術網路保護用於保護網路中的數據。技術網路保護可以保護惡意軟體和未經授權的人員存儲和傳輸中的數據。
物理網路保護:物理網路保護或物理網路安全性是一種網路安全措施,旨在防止未經授權的人員物理干擾網路組件。門鎖和ID通行證是物理網路保護的重要組成部分。
管理網路保護:管理網路保護是一種控制用戶網路行為和訪問的安全方法。它還在執行IT基礎結構變更時為IT人員提供了標準的操作程序。
② 等待好心人:libdnet
蘭州牛肉拉麵
③ 網路安全包括哪些方面
網路安全應包括:企業安全制度、數據安全、傳輸安全、伺服器安全、防火牆安全(硬體或軟體實現、背靠背、DMZ等)、防病毒安全。
④ 如何網路抓包
很明白你想干什麼
不過不是三言兩語可以做到的
首先,你想抓包,需要依賴一個庫(windows下叫winpcap, linux下叫libpcap)
這個包提供了很多介面,運行後你可以進行抓包
然後介紹你一本書:《網路安全開發包詳解》,當年做網路安全的入門級書啊
這本書目前市面上已經絕版了(只有印刷版和二手的能買,如果你經常需要用,建議買一本,比電子書方便),不過你可以下載到電子版的,如果需要我也能傳給你一份
然後你想實現的例子,只需要把書看前幾章就可以了,看到介紹winpcap/libpcap怎麼用就可以了。
⑤ 網路安全包括幾方面的內容
網路安全是一個關系國家安全和主權、社會的穩定、民族文化的繼承和發揚的重要問題。其重要性,正隨著全球信息化步伐的加快而變到越來越重要。「家門就是國門」,安全問題刻不容緩。
網路安全是一門涉及計算機科學、網路技術、通信技術、密碼技術、信息安全技術、應用數學、數論、資訊理論等多種學科的綜合性學科。
網路安全是指網路系統的硬體、軟體及其系統中的數據受到保護,不受偶然的或者惡意的原因而遭到破壞、更改、泄露,系統連續可靠正常地運行,網路服務不中斷。
網路安全從其本質上來講就是網路上的信息安全。從廣義來說,凡是涉及到網路上信息的保密性、完整性、可用性、真實性和可控性的相關技術和理論都是網路安全的研究領域。
網路安全的具體含義會隨著「角度」的變化而變化。比如:從用戶(個人、企業等)的角度來說,他們希望涉及個人隱私或商業利益的信息在網路上傳輸時受到機密性、完整性和真實性的保護,避免其他人或對手利用竊聽、冒充、篡改、抵賴等手段侵犯用戶的利益和隱,? 問和破壞。
從網路運行和管理者角度說,他們希望對本地網路信息的訪問、讀寫等操作受到保護和控制,避免出現「陷門」、病毒、非法存取、拒絕服務和網路資源非法佔用和非法控制等威脅,制止和防禦網路黑客的攻擊。
對安全保密部門來說,他們希望對非法的、有害的或涉及國家機密的信息進行過濾和防堵,避免機要信息泄露,避免對社會產生危害,對國家造成巨大損失。
從社會教育和意識形態角度來講,網路上不健康的內容,會對社會的穩定和人類的發展造成阻礙,必須對其進行控制。
2、增強網路安全意識刻不容緩
隨著計算機技術的飛速發展,信息網路已經成為社會發展的重要保證。信息網路涉及到國家的政府、軍事、文教等諸多領域。其中存貯、傳輸和處理的信息有許多是重要的政府宏觀調控決策、商業經濟信息、銀行資金轉帳、股票證券、能源資源數據、科研數據等重要信息。有很多是敏感信息,甚至是國家機密。所以難免會吸引來自世界各地的各種人為攻擊(例如信息泄漏、信息竊取、數據篡改、數據刪添、計算機病毒等)。同時,網路實體還要經受諸如水災、火災、地震、電磁輻射等方面的考驗。
近年來,計算機犯罪案件也急劇上升,計算機犯罪已經成為普遍的國際性問題。據美國聯邦調查局的報告,計算機犯罪是商業犯罪中最大的犯罪類型之一,每筆犯罪的平均金額為45000美元,每年計算機犯罪造成的經濟損失高達50億美元。
計算機犯罪大都具有瞬時性、廣域性、專業性、時空分離性等特點。通常計算機罪犯很難留下犯罪證據,這大大刺激了計算機高技術犯罪案件的發生。
計算機犯罪案率的迅速增加,使各國的計算機系統特別是網路系統面臨著很大的威脅,並成為嚴重的社會問題之一。
3、網路安全案例
96年初,據美國舊金山的計算機安全協會與聯邦調查局的一次聯合調查統計,有53%的企業受到過計算機病毒的侵害,42%的企業的計算機系統在過去的12個月被非法使用過。而五角大樓的一個研究小組稱美國一年中遭受的攻擊就達25萬次之多。
94年末,俄羅斯黑客弗拉基米爾?利文與其夥伴從聖彼得堡的一家小軟體公司的聯網計算機上,向美國CITYBANK銀行發動了一連串攻擊,通過電子轉帳方式,從CITYBANK銀行在紐約的計算機主機里竊取1100萬美元。
96年8月17日,美國司法部的網路伺服器遭到黑客入侵,並將「 美國司法部」 的主頁改為「 美國不公正部」 ,將司法部部長的照片換成了阿道夫?希特勒,將司法部徽章換成了納粹黨徽,並加上一幅色情女郎的圖片作為所謂司法部部長的助手。此外還留下了很多攻擊美國司法政策的文字。
96年9月18日,黑客又光顧美國中央情報局的網路伺服器,將其主頁由「中央情報局」 改為「 中央愚蠢局」 。
96年12月29日,黑客侵入美國空軍的全球網網址並將其主頁肆意改動,其中有關空軍介紹、新聞發布等內容被替換成一段簡短的黃色錄象,且聲稱美國政府所說的一切都是謊言。迫使美國國防部一度關閉了其他80多個軍方網址。
4、我國計算機互連網出現的安全問題案例
96年2月,剛開通不久的Chinanet受到攻擊,且攻擊得逞。
97年初,北京某ISP被黑客成功侵入,並在清華大學「 水木清華」 BBS站的「 黑客與解密」 討論區張貼有關如何免費通過該ISP進入Internet的文章。
97年4月23日,美國德克薩斯州內查德遜地區西南貝爾互聯網路公司的某個PPP用戶侵入中國互聯網路信息中心的伺服器,破譯該系統的shutdown帳戶,把中國互聯網信息中心的主頁換成了一個笑嘻嘻的骷髏頭。
96年初CHINANET受到某高校的一個研究生的攻擊;96年秋,北京某ISP和它的用戶發生了一些矛盾,此用戶便攻擊該ISP的伺服器,致使服務中斷了數小時。
5、不同環境和應用中的網路安全
運行系統安全,即保證信息處理和傳輸系統的安全。它側重於保證系統正常運行,避免因為系統的崩潰和損壞而對系統存貯、處理和傳輸的信息造成破壞和損失,避免由於電磁泄漏,產生信息泄露,干擾他人,受他人干擾。
網路上系統信息的安全。包括用戶口令鑒別,用戶存取許可權控制,數據存取許可權、方式控制,安全審計,安全問題跟蹤,計算機病毒防治,數據加密。
網路上信息傳播安全,即信息傳播後果的安全。包括信息過濾等。它側重於防止和控制非法、有害的信息進行傳播後的後果。避免公用網路上大量自由傳輸的信息失控。
網路上信息內容的安全。它側重於保護信息的保密性、真實性和完整性。避免攻擊者利用系統的安全漏洞進行竊聽、冒充、詐騙等有損於合法用戶的行為。本質上是保護用戶的利益和隱私。
⑥ 網路安全包括哪些內容
第一階段:計算環境安全。
針對操作系統、中間件基礎操作以及安全配置進行教學,配置真實業務系統,需掌握Windows操作系統安全、Linux操作系統安全、中間件安全、資料庫安全、PowerShell編程、LinuxShell編程、密碼學應用等技術,並能夠對操作系統以及業務系統進行安全配置以及安全事件分析。
第二階段:網路通信安全。
針對網路通信安全進行教學,涵蓋網路基礎、交換協議、路由協議、協議流量分析等內容,並配備電信級網路環境為該部門教學提供基礎支撐。
本階段需要掌握網路設計以及規劃,並對參與網路的網路設備進行網路互聯配置,從業務需求出發對網路結構進行安全設計以及網路設備安全配置。
講師會結合當前最新安全趨勢以及龍頭安全企業或行業安全風險對安全市場進行分析及預測,讓學員能夠在學習階段提前與安全市場進行接軌。
第三階段:Web安全。
本階段需掌握Web安全漏洞的測試和驗證,以及網路安全攻擊思路及手段,熟練利用所學知識以對其進行防禦,掌握網路安全服務流程。
第四階段 :滲透測試。
本階段需要掌握滲透測試和內網安全。
滲透測試,這階段主要學習實戰中紅隊人員常用的攻擊方法和套路,包括信息搜集,系統提權,內網轉發等知識,msf,cs的工具使用。課程目標讓學員知己知彼,從攻擊者角度來審視自身防禦漏洞,幫助企業在紅藍對抗,抵禦真實apt攻擊中取得不錯的結果。
第五階段:安全運營。
根據業務需求掌握目前常見網路安全設備以及伺服器的安全配置以及優化,利用所有安全防護手段中得到的線索進行安全事件關聯分析以及源頭分析,並掌握網路威脅情報理論與實踐,掌握威脅模型建立,為主動防禦提供思路及支撐。
本階段主要學習安全加固、等級保護、應急響應、風險評估等技術知識。
第六階段:綜合實戰
本階段自選項目,針對熱點行業(黨政、運營商、醫療、教育、能源、交通等)業務系統、數據中心以及核心節點進行安全運營實戰;按等保2.0基本要求對提供公共服務的信息系統進行安全檢測、風險評估、安全加固以及安全事件應急響應。
⑦ 有socket編程經驗或懂得網卡硬體的朋友請進!!!
Winsock沒用過,不太清楚。
winpcap(libpcap的Windows版)可以處理二層及以上。
關於緩沖區的問題,你看看是不是這個Nagle演算法?
【TCP傳輸小數據包效率問題(譯自MSDN)】
水平有限,錯誤難免——builder++
摘要:當使用TCP傳輸小型數據包時,程序的設計是相當重要的。如果在設計方案中不對TCP數據包的延遲應答,Nagle演算法,Winsock緩沖作用引起重視,將會嚴重影響程序的性能。這篇文章討論了這些問題,列舉了兩個案例,給出了一些傳輸小數據包的優化設計方案。
背景:當Microsoft TCP棧接收到一個數據包時,會啟動一個200毫秒的計時器。當ACK確認數據包發出之後,計時器會復位,接收到下一個數據包時,會再次啟動200毫秒的計時器。為了提升應用程序在內部網和Internet上的傳輸性能,Microsoft TCP棧使用了下面的策略來決定在接收到數據包後什麼時候發送ACK確認數據包:
1、如果在200毫秒的計時器超時之前,接收到下一個數據包,則立即發送ACK確認數據包。
2、如果當前恰好有數據包需要發給ACK確認信息的接收端,則把ACK確認信息附帶在數據包上立即發送。
3、當計時器超時,ACK確認信息立即發送。
為了避免小數據包擁塞網路,Microsoft TCP棧默認啟用了Nagle演算法,這個演算法能夠將應用程序多次調用Send發送的數據拼接起來,當收到前一個數據包的ACK確認信息時,一起發送出去。下面是Nagle演算法的例外情況:
1、如果Microsoft TCP棧拼接起來的數據包超過了MTU值,這個數據會立即發送,而不等待前一個數據
包的ACK確認信息。在乙太網中,TCP的MTU(Maximum Transmission Unit)值是1460位元組。
2、如果設置了TCP_NODELAY選項,就會禁用Nagle演算法,應用程序調用Send發送的數據包會立即被投遞到網路,而沒有延遲。
為了在應用層優化性能,Winsock把應用程序調用Send發送的數據從應用程序的緩沖區復制到Winsock內核緩沖區。Microsoft TCP棧利用類似Nagle演算法的方法,決定什麼時候才實際地把數據投遞到網路。
內核緩沖區的默認大小是8K,使用SO_SNDBUF選項,可以改變Winsock內核緩沖區的大小。如果有必要的話,Winsock能緩沖大於SO_SNDBUF緩沖區大小的數據。在絕大多數情況下,應用程序完成Send調用僅僅表明數據被復制到了Winsock內核緩沖區,並不能說明數據就實際地被投遞到了網路上。唯一一種例外的情況是:
通過設置SO_SNDBUT為0禁用了Winsock內核緩沖區。
Winsock使用下面的規則來向應用程序表明一個Send調用的完成:
1、如果socket仍然在SO_SNDBUF限額內,Winsock復制應用程序要發送的數據到內核緩沖區,完成Send調用。
2、如果Socket超過了SO_SNDBUF限額並且先前只有一個被緩沖的發送數據在內核緩沖區,Winsock復制要發送的數據到內核緩沖區,完成Send調用。
3、如果Socket超過了SO_SNDBUF限額並且內核緩沖區有不只一個被緩沖的發送數據,Winsock復制要發送的數據到內核緩沖區,然後投遞數據到網路,直到Socket降到SO_SNDBUF限額內或者只剩餘一個要發送的數據,才完成Send調用。
案例1
一個Winsock TCP客戶端需要發送10000個記錄到Winsock TCP服務端,保存到資料庫。記錄大小從20位元組到100位元組不等。對於簡單的應用程序邏輯,可能的設計方案如下:
1、客戶端以阻塞方式發送,服務端以阻塞方式接收。
2、客戶端設置SO_SNDBUF為0,禁用Nagle演算法,讓每個數據包單獨的發送。
3、服務端在一個循環中調用Recv接收數據包。給Recv傳遞200位元組的緩沖區以便讓每個記錄在一次Recv調用中被獲取到。
性能:
在測試中發現,客戶端每秒只能發送5條數據到服務段,總共10000條記錄,976K位元組左右,用了半個多小時才全部傳到伺服器。
分析:
因為客戶端沒有設置TCP_NODELAY選項,Nagle演算法強制TCP棧在發送數據包之前等待前一個數據包的ACK確認信息。然而,客戶端設置SO_SNDBUF為0,禁用了內核緩沖區。因此,10000個Send調用只能一個數據包一個數據包的發送和確認,由於下列原因,每個ACK確認信息被延遲200毫秒:
1、當伺服器獲取到一個數據包,啟動一個200毫秒的計時器。
2、服務端不需要向客戶端發送任何數據,所以,ACK確認信息不能被發回的數據包順路攜帶。
3、客戶端在沒有收到前一個數據包的確認信息前,不能發送數據包。
4、服務端的計時器超時後,ACK確認信息被發送到客戶端。
如何提高性能:
在這個設計中存在兩個問題。
第一,存在延時問題。客戶端需要能夠在200毫秒內發送兩個數據包到服務端。因為客戶端默認情況下使用Nagle演算法,應該使用默認的內核緩沖區,不應該設置SO_SNDBUF為0。一旦TCP棧拼接起來的數據包超過MTU值,這個數據包會立即被發送,不用等待前一個ACK確認信息。
第二,這個設計方案對每一個如此小的的數據包都調用一次Send。發送這么小的數據包是不很有效率的。在這種情況下,應該把每個記錄補充到100位元組並且每次調用Send發送80個記錄。為了讓服務端知道一次總共發送了多少個記錄,客戶端可以在記錄前面帶一個頭信息。
案例二:
一個Winsock TCP客戶端程序打開兩個連接和一個提供股票報價服務的Winsock TCP服務端通信。第一個連接作為命令通道用來傳輸股票編號到服務端。第二個連接作為數據通道用來接收股票報價。兩個連接被建立後,客戶端通過命令通道發送股票編號到服務端,然後在數據通道上等待返回的股票報價信息。客戶端在接收到第一個股票報價信息後發送下一個股票編號請求到服務端。客戶端和服務端都沒有設置SO_SNDBUF和TCP_NODELAY選項。
性能:
測試中發現,客戶端每秒只能獲取到5條報價信息。
分析:
這個設計方案一次只允許獲取一條股票信息。第一個股票編號信息通過命令通道發送到服務端,立即接收到服務端通過數據通道返回的股票報價信息。然後,客戶端立即發送第二條請求信息,send調用立即返回,發送的數據被復制到內核緩沖區。然而,TCP棧不能立即投遞這個數據包到網路,因為沒有收到前一個數據包的ACK確認信息。200毫秒後,服務端的計時器超時,第一個請求數據包的ACK確認信息被發送回客戶端,客戶端的第二個請求包才被投遞到網路。第二個請求的報價信息立即從數據通道返回到客戶端,因為此時,客戶端的計時器已經超時,第一個報價信息的ACK確認信息已經被發送到服務端。這個過程循環發生。
如何提高性能:
在這里,兩個連接的設計是沒有必要的。如果使用一個連接來請求和接收報價信息,股票請求的ACK確認信息會被返回的報價信息立即順路攜帶回來。要進一步的提高性能,客戶端應該一次調用Send發送多個股票請求,服務端一次返回多個報價信息。如果由於某些特殊原因必須要使用兩個單向的連接,客戶端和服務端都應該設置TCP_NODELAY選項,讓小數據包立即發送而不用等待前一個數據包的ACK確認信息。
提高性能的建議:
上面兩個案例說明了一些最壞的情況。當設計一個方案解決大量的小數據包發送和接收時,應該遵循以下的建議:
1、如果數據片段不需要緊急傳輸的話,應用程序應該將他們拼接成更大的數據塊,再調用Send。因為發送緩沖區很可能被復制到內核緩沖區,所以緩沖區不應該太大,通常比8K小一點點是很有效率的。只要Winsock內核緩沖區得到一個大於MTU值的數據塊,就會發送若干個數據包,剩下最後一個數據包。發送方除了最後一個數據包,都不會被200毫秒的計時器觸發。
2、如果可能的話,避免單向的Socket數據流接連。
3、不要設置SO_SNDBUF為0,除非想確保數據包在調用Send完成之後立即被投遞到網路。事實上,8K的緩沖區適合大多數情況,不需要重新改變,除非新設置的緩沖區經過測試的確比默認大小更高效。
4、如果數據傳輸不用保證可靠性,使用UDP。
⑧ pcap.h是什麼頭文件
pcap是一個網路開發包(常用於網路安全)
能夠構造任意(包括非法的)網路數據包並發送,還能夠截獲IP數據
比如,可以構造一個數據包,裡面的源MAC和IP都是你造假的,然後發到你定義的目的MAC和IP機器上去。
⑨ 怎樣用C語言實現網路抓包
第一法則:站在巨人肩膀上 && 不要重復造輪子。
對於這種復雜的過程,第一選擇是使用現成的,節約時間,提升效率。
Wireshark(前稱Ethereal)是一個網路封包分析軟體。網路封包分析軟體的功能是擷取網路封包,並盡可能顯示出最為詳細的網路封包資料。Wireshark使用WinPCAP作為介面,直接與網卡進行數據報文交換。
網路封包分析軟體的功能可想像成 "電工技師使用電表來量測電流、電壓、電阻" 的工作 - 只是將場景移植到網路上,並將電線替換成網路線。在過去,網路封包分析軟體是非常昂貴,或是專門屬於營利用的軟體。Ethereal的出現改變了這一切。在GNUGPL通用許可證的保障范圍底下,使用者可以以免費的代價取得軟體與其源代碼,並擁有針對其源代碼修改及客制化的權利。Ethereal是目前全世界最廣泛的網路封包分析軟體之一。
第二法則:學習 && 提升。
如果是單純的學習知識,可以直接嘗試寫一些具有部分功能的程序,過程會有點艱難,但非常有意義。學習網路編程,需要了解 開放系統互連參考模型的的七層每一層的意義以及現實當中實現的四層的網路協議。然後就可以知道抓包的包位於模型當中的傳輸層協議,包括UDP和TCP的協議。進一步要學習每種協議的格式,表頭,數據包等等。一句話,冰凍三尺非一日之寒。
Windows下的抓包及簡單的編程。
Windows2000在TCP/IP協議組件上做了很多改進,功能也有增強。比如在協議棧上的調整,增大了默認窗口大小,以及高延遲鏈接新演算法。同時在安全性上,可應用IPSec加強安全性,比NT下有不少的改進。
Microsoft TCP/IP 組件包含「核心協議」、「服務」及兩者之間的「介面」。傳輸驅動程序介面 (TDI) 與網路設備介面規范 (NDIS) 是公用的。 此外,還有許多用戶模型應用程序的更高級介面。最常用的介面是 Windows Sockets、遠程過程調用 (RPC) 和 NetBIOS。
Windows Sockets 是一個編程介面,它是在加州大學伯克利分校開發的套接字介面的基礎上定義的。它包括了一組擴展件,以充分利用 Microsoft Windows 消息驅動的特點。規范的 1.1 版是在 1993 年 1 月發行的,2.2.0 版在 1996 年 5 月發行。Windows 2000 支持 Winsock 2.2 版。在Winsock2中,支持多個傳輸協議的原始套接字,重疊I/O模型、服務質量控制等。
這里介紹Windows Sockets的一些關於原始套接字(Raw Socket)的編程。同Winsock1相比,最明顯的就是支持了Raw Socket套接字類型,通過原始套接字,我們可以更加自如地控制Windows下的多種協議,而且能夠對網路底層的傳輸機制進行控制。
1、創建一個原始套接字,並設置IP頭選項。
SOCKET sock;
sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
或者:
s = WSASoccket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED);
這里,我們設置了SOCK_RAW標志,表示我們聲明的是一個原始套接字類型。創建原始套接字後,IP頭就會包含在接收的數據中,如果我們設定 IP_HDRINCL 選項,那麼,就需要自己來構造IP頭。注意,如果設置IP_HDRINCL 選項,那麼必須具有 administrator許可權,要不就必須修改注冊表:
HKEY_LOCAL_
修改鍵:DisableRawSecurity(類型為DWORD),把值修改為 1。如果沒有,就添加。
BOOL blnFlag=TRUE;
setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&blnFlag, sizeof(blnFlag);
對於原始套接字在接收數據報的時候,要注意這么幾點:
a、如果接收的數據報中協議類型和定義的原始套接字匹配,那麼,接收的所有數據就拷貝到套接字中。
b、如果綁定了本地地址,那麼只有接收數據IP頭中對應的遠端地址匹配,接收的數據就拷貝到套接字中。
c、如果定義的是外部地址,比如使用connect(),那麼,只有接收數據IP頭中對應的源地址匹配,接收的數據就拷貝到套接字中。
2、構造IP頭和TCP頭
這里,提供IP頭和TCP頭的結構:
// Standard TCP flags
#define URG 0x20
#define ACK 0x10
#define PSH 0x08
#define RST 0x04
#define SYN 0x02
#define FIN 0x01
typedef struct _iphdr //定義IP首部
{
unsigned char h_lenver; //4位首部長度+4位IP版本號
unsigned char tos; //8位服務類型TOS
unsigned short total_len; //16位總長度(位元組)
unsigned short ident; //16位標識
unsigned short frag_and_flags; //3位標志位
unsigned char ttl; //8位生存時間 TTL
unsigned char proto; //8位協議 (TCP, UDP 或其他)
unsigned short checksum; //16位IP首部校驗和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IP_HEADER;
typedef struct psd_hdr //定義TCP偽首部
{
unsigned long saddr; //源地址
unsigned long daddr; //目的地址
char mbz;
char ptcl; //協議類型
unsigned short tcpl; //TCP長度
}PSD_HEADER;
typedef struct _tcphdr //定義TCP首部
{
USHORT th_sport; //16位源埠
USHORT th_dport; //16位目的埠
unsigned int th_seq; //32位序列號
unsigned int th_ack; //32位確認號
unsigned char th_lenres; //4位首部長度/6位保留字
unsigned char th_flag; //6位標志位
USHORT th_win; //16位窗口大小
USHORT th_sum; //16位校驗和
USHORT th_urp; //16位緊急數據偏移量
}TCP_HEADER;
TCP偽首部並不是真正存在的,只是用於計算檢驗和。校驗和函數:
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while (size > 1)
{
cksum += *buffer++;
size -= sizeof(USHORT);
}
if (size)
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
當需要自己填充IP頭部和TCP頭部的時候,就同時需要自己計算他們的檢驗和。
3、發送原始套接字數據報
填充這些頭部稍微麻煩點,發送就相對簡單多了。只需要使用sendto()就OK。
sendto(sock, (char*)&tcpHeader, sizeof(tcpHeader), 0, (sockaddr*)&addr_in,sizeof(addr_in));
下面是一個示常式序,可以作為SYN掃描的一部分。
#include <stdio.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#define SOURCE_PORT 7234
#define MAX_RECEIVEBYTE 255
typedef struct ip_hdr //定義IP首部
{
unsigned char h_verlen; //4位首部長度,4位IP版本號
unsigned char tos; //8位服務類型TOS
unsigned short total_len; //16位總長度(位元組)
unsigned short ident; //16位標識
unsigned short frag_and_flags; //3位標志位
unsigned char ttl; //8位生存時間 TTL
unsigned char proto; //8位協議 (TCP, UDP 或其他)
unsigned short checksum; //16位IP首部校驗和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IPHEADER;
typedef struct tsd_hdr //定義TCP偽首部
{
unsigned long saddr; //源地址
unsigned long daddr; //目的地址
char mbz;
char ptcl; //協議類型
unsigned short tcpl; //TCP長度
}PSDHEADER;
typedef struct tcp_hdr //定義TCP首部
{
USHORT th_sport; //16位源埠
USHORT th_dport; //16位目的埠
unsigned int th_seq; //32位序列號
unsigned int th_ack; //32位確認號
unsigned char th_lenres; //4位首部長度/6位保留字
unsigned char th_flag; //6位標志位
USHORT th_win; //16位窗口大小
USHORT th_sum; //16位校驗和
USHORT th_urp; //16位緊急數據偏移量
}TCPHEADER;
//CheckSum:計算校驗和的子函數
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size -=sizeof(USHORT);
}
if(size )
{
cksum += *(UCHAR*)buffer;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
void useage()
{
printf("******************************************
");
printf("TCPPing
");
printf(" Written by Refdom
");
printf(" Email: [email protected]
");
printf("Useage: TCPPing.exe Target_ip Target_port
");
printf("*******************************************
");
}
int main(int argc, char* argv[])
{
WSADATA WSAData;
SOCKET sock;
SOCKADDR_IN addr_in;
IPHEADER ipHeader;
TCPHEADER tcpHeader;
PSDHEADER psdHeader;
char szSendBuf[60]={0};
BOOL flag;
int rect,nTimeOver;
useage();
if (argc!= 3)
{ return false; }
if (WSAStartup(MAKEWORD(2,2), &WSAData)!=0)
{
printf("WSAStartup Error!
");
return false;
}
if ((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_RAW,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET)
{
printf("Socket Setup Error!
");
return false;
}
flag=true;
if (setsockopt(sock,IPPROTO_IP, IP_HDRINCL,(char *)&flag,sizeof(flag))==SOCKET_ERROR)
{
printf("setsockopt IP_HDRINCL error!
");
return false;
}
nTimeOver=1000;
if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOver, sizeof(nTimeOver))==SOCKET_ERROR)
{
printf("setsockopt SO_SNDTIMEO error!
");
return false;
}
addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(atoi(argv[2]));
addr_in.sin_addr.S_un.S_addr=inet_addr(argv[1]);
//
//
//填充IP首部
ipHeader.h_verlen=(4<<4 | sizeof(ipHeader)/sizeof(unsigned long));
// ipHeader.tos=0;
ipHeader.total_len=htons(sizeof(ipHeader)+sizeof(tcpHeader));
ipHeader.ident=1;
ipHeader.frag_and_flags=0;
ipHeader.ttl=128;
ipHeader.proto=IPPROTO_TCP;
ipHeader.checksum=0;
ipHeader.sourceIP=inet_addr("本地地址");
ipHeader.destIP=inet_addr(argv[1]);
//填充TCP首部
tcpHeader.th_dport=htons(atoi(argv[2]));
tcpHeader.th_sport=htons(SOURCE_PORT); //源埠號
tcpHeader.th_seq=htonl(0x12345678);
tcpHeader.th_ack=0;
tcpHeader.th_lenres=(sizeof(tcpHeader)/4<<4|0);
tcpHeader.th_flag=2; //修改這里來實現不同的標志位探測,2是SYN,1是FIN,16是ACK探測 等等
tcpHeader.th_win=htons(512);
tcpHeader.th_urp=0;
tcpHeader.th_sum=0;
psdHeader.saddr=ipHeader.sourceIP;
psdHeader.daddr=ipHeader.destIP;
psdHeader.mbz=0;
psdHeader.ptcl=IPPROTO_TCP;
psdHeader.tcpl=htons(sizeof(tcpHeader));
//計算校驗和
memcpy(szSendBuf, &psdHeader, sizeof(psdHeader));
memcpy(szSendBuf+sizeof(psdHeader), &tcpHeader, sizeof(tcpHeader));
tcpHeader.th_sum=checksum((USHORT *)szSendBuf,sizeof(psdHeader)+sizeof(tcpHeader));
memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));
memcpy(szSendBuf+sizeof(ipHeader), &tcpHeader, sizeof(tcpHeader));
memset(szSendBuf+sizeof(ipHeader)+sizeof(tcpHeader), 0, 4);
ipHeader.checksum=checksum((USHORT *)szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader));
memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));
rect=sendto(sock, szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader),
0, (struct sockaddr*)&addr_in, sizeof(addr_in));
if (rect==SOCKET_ERROR)
{
printf("send error!:%d
",WSAGetLastError());
return false;
}
else
printf("send ok!
");
closesocket(sock);
WSACleanup();
return 0;
}
4、接收數據
和發送原始套接字數據相比,接收就比較麻煩了。因為在WIN我們不能用recv()來接收raw socket上的數據,這是因為,所有的IP包都是先遞交給系統核心,然後再傳輸到用戶程序,當發送一個raws socket包的時候(比如syn),核心並不知道,也沒有這個數據被發送或者連接建立的記錄,因此,當遠端主機回應的時候,系統核心就把這些包都全部丟掉,從而到不了應用程序上。所以,就不能簡單地使用接收函數來接收這些數據報。
要達到接收數據的目的,就必須採用嗅探,接收所有通過的數據包,然後進行篩選,留下符合我們需要的。可以再定義一個原始套接字,用來完成接收數據的任務,需要設置SIO_RCVALL,表示接收所有的數據。
SOCKET sniffersock;
sniffsock = WSASocket(AF_INET, SOCK_RAW, IPPROTO_IP, NULL, 0, WSA_FLAG_OVERLAPPED);
DWORD lpvBuffer = 1;
DWORD lpcbBytesReturned = 0 ;
WSAIoctl(sniffersock, SIO_RCVALL, &lpvBuffer, sizeof(lpvBuffer), NULL, 0, & lpcbBytesReturned, NULL, NULL);
創建一個用於接收數據的原始套接字,我們可以用接收函數來接收數據包了。然後在使用一個過濾函數達到篩選的目的,接收我們需要的數據包。
如果在XP以上的操作系統,微軟封殺了Raw Soccket,只能用wincpap之類的開發包了。
⑩ Sniffer是什麼怎麼用
Sniffer,中文可以翻譯為嗅探器,是一種基於被動偵聽原理的網路分析方式。使用這種技術方式,可以監視網路的狀態、數據流動情況以及網路上傳輸的信息。當信息以明文的形式在網路上傳輸時,便可以使用網路監聽的方式來進行攻擊。將網路介面設置在監聽模式,便可以將網上傳輸的源源不斷的信息截獲。Sniffer技術常常被黑客們用來截獲用戶的口令,據說某個骨幹網路的路由器網段曾經被黑客攻入,並嗅探到大量的用戶口令。但實際上Sniffer技術被廣泛地應用於網路故障診斷、協議分析、應用性能分析和網路安全保障等各個領域。
本文將詳細介紹Sniffer的原理和應用。
一、Sniffer 原理
1.網路技術與設備簡介
在講述Sniffer的概念之前,首先需要講述區域網設備的一些基本概念。
數據在網路上是以很小的稱為幀(Frame)的單位傳輸的,幀由幾部分組成,不同的部分執行不同的功能。幀通過特定的稱為網路驅動程序的軟體進行成型,然後通過網卡發送到網線上,通過網線到達它們的目的機器,在目的機器的一端執行相反的過程。接收端機器的乙太網卡捕獲到這些幀,並告訴操作系統幀已到達,然後對其進行存儲。就是在這個傳輸和接收的過程中,嗅探器會帶來安全方面的問題。
每一個在區域網(LAN)上的工作站都有其硬體地址,這些地址惟一地表示了網路上的機器(這一點與Internet地址系統比較相似)。當用戶發送一個數據包時,這些數據包就會發送到LAN上所有可用的機器。
如果使用Hub/即基於共享網路的情況下,網路上所有的機器都可以「聽」到通過的流量,但對不屬於自己的數據包則不予響應(換句話說,工作站A不會捕獲屬於工作站B的數據,而是簡單地忽略這些數據)。如果某個工作站的網路介面處於混雜模式(關於混雜模式的概念會在後面解釋),那麼它就可以捕獲網路上所有的數據包和幀。
但是現代網路常常採用交換機作為網路連接設備樞紐,在通常情況下,交換機不會讓網路中每一台主機偵聽到其他主機的通訊,因此Sniffer技術在這時必須結合網路埠鏡像技術進行配合。而衍生的安全技術則通過ARP欺騙來變相達到交換網路中的偵聽。
2.網路監聽原理
Sniffer程序是一種利用乙太網的特性把網路適配卡(NIC,一般為乙太網卡)置為雜亂(promiscuous)模式狀態的工具,一旦網卡設置為這種模式,它就能接收傳輸在網路上的每一個信息包。
普通的情況下,網卡只接收和自己的地址有關的信息包,即傳輸到本地主機的信息包。要使Sniffer能接收並處理這種方式的信息,系統需要支持BPF,Linux下需要支持SOCKET一PACKET。但一般情況下,網路硬體和TCP/IP堆棧不支持接收或者發送與本地計算機無關的數據包,所以,為了繞過標準的TCP/IP堆棧,網卡就必須設置為我們剛開始講的混雜模式。一般情況下,要激活這種方式,內核必須支持這種偽設備Bpfilter,而且需要root許可權來運行這種程序,所以sniffer需要root身份安裝,如果只是以本地用戶的身份進入了系統,那麼不可能喚探到root的密碼,因為不能運行Sniffer。
也有基於無線網路、廣域網路(DDN, FR)甚至光網路(POS、Fiber Channel)的監聽技術,這時候略微不同於乙太網絡上的捕獲概念,其中通常會引入TAP (測試介入點)這類的硬體設備來進行數據採集。
3. Sniffer的分類
Sniffer分為軟體和硬體兩種,軟體的Sniffer有 Sniffer Pro、Network Monitor、PacketBone等,其優點是易於安裝部署,易於學習使用,同時也易於交流;缺點是無法抓取網路上所有的傳輸,某些情況下也就無法真正了解網路的故障和運行情況。硬體的Sniffer通常稱為協議分析儀,一般都是商業性的,價格也比較昂貴,但會具備支持各類擴展的鏈路捕獲能力以及高性能的數據實時捕獲分析的功能。
基於乙太網絡嗅探的Sniffer只能抓取一個物理網段內的包,就是說,你和監聽的目標中間不能有路由或其他屏蔽廣播包的設備,這一點很重要。所以,對一般撥號上網的用戶來說,是不可能利用Sniffer來竊聽到其他人的通信內容的。
4.網路監聽的目的
當一個黑客成功地攻陷了一台主機,並拿到了root許可權,而且還想利用這台主機去攻擊同一(物理)網段上的其他主機時,他就會在這台主機上安裝Sniffer軟體,對乙太網設備上傳送的數據包進行偵聽,從而發現感興趣的包。如果發現符合條件的包,就把它存到一個LOg文件中去。通常設置的這些條件是包含字「username」或「password」的包,這樣的包裡面通常有黑客感興趣的密碼之類的東西。一旦黑客截獲得了某台主機的密碼,他就會立刻進入這台主機。
如果Sniffer運行在路由器上或有路由功能的主機上,就能對大量的數據進行監控,因為所有進出網路的數據包都要經過路由器。
Sniffer屬於第M層次的攻擊。就是說,只有在攻擊者已經進入了目標系統的情況下,才能使用Sniffer這種攻擊手段,以便得到更多的信息。
Sniffer除了能得到口令或用戶名外,還能得到更多的其他信息,比如一個重要的信息、在網上傳送的金融信息等等。Sniffer幾乎能得到任何在乙太網上傳送的數據包。
二、Sniffer產品介紹
網路的安全性和高可用性是建立在有效的網路管理基礎之上的,網路管理包括配置管理、故障管理、性能管理、安全管理和計費管理五大部分。對於企業計算機網路來說,網路故障管理主要側重於實時的監控,而網路性能管理更看中歷史分析。
Sniffer網路分析儀是一個網路故障、性能和安全管理的有力工具,它能夠自動地幫助網路專業人員維護網路,查找故障,極大地簡化了發現和解決網路問題的過程,廣泛適用於Ethernet、Fast Ethernet、Token Ring、Switched LANs、FDDI、X.25、DDN、Frame Relay、ISDN、ATM和Gigabits等網路。
1.1 Sniffer產品的基本功能包括:
• 網路安全的保障與維護
1. 對異常的網路攻擊的實時發現與告警;
2. 對高速網路的捕獲與偵聽;
3. 全面分析與解碼網路傳輸的內容;
• 面向網路鏈路運行情況的監測
1. 各種網路鏈路的運行情況;
2. 各種網路鏈路的流量及阻塞情況;
3. 網上各種協議的使用情況;
4. 網路協議自動發現;
5. 網路故障監測;
• 面向網路上應用情況的監測
1. 任意網段應用流量、流向;
2. 任意伺服器應用流量、流向;
3. 任意工作站應用流量、流向;
4. 典型應用程序響應時間;
5. 不同網路協議所佔帶寬比例;
6. 不同應用流量、流向的分布情況及拓撲結構;
• 強大的協議解碼能力,用於對網路流量的深入解析
1. 對各種現有網路協議進行解碼;
2. 對各種應用層協議進行解碼;
3. Sniffer協議開發包(PDK)可以讓用戶簡單方便地增加用戶自定義的協議;
• 網路管理、故障報警及恢復
運用強大的專家分析系統幫助維護人員在最短時間內排除網路故障;
1.2 實時監控統計和告警功能
根據用戶習慣,Sniffer可提供實時數據或圖表方式顯示統計結果,統計內容包括:
網路統計:如當前和平均網路利用率、總的和當前的幀數及位元組數、總站數和激活的站數、協議類型、當前和總的平均幀長等。
協議統計:如協議的網路利用率、協議的數、協議的位元組數以及每種協議中各種不同類型的幀的統計等。
差錯統計:如錯誤的CRC校驗數、發生的碰撞數、錯誤幀數等。
站統計:如接收和發送的幀數、開始時間、停止時間、消耗時間、站狀態等。最多可統計1024個站。
幀長統計:如某一幀長的幀所佔百分比,某一幀長的幀數等。
當某些指標超過規定的閾值時,Sniffer可以自動顯示或採用有聲形式的告警。
Sniffer可根據網路管理者的要求,自動將統計結果生成多種統計報告格式,並可存檔或列印輸出。
1.3 Sniffer實時專家分析系統
高度復雜的網路協議分析工具能夠監視並捕獲所有網路上的信息數據包,並同時建立一個特有網路環境下的目標知識庫。智能的專家技術掃描這些信息以檢測網路異常現象,並自動對每種異常現象進行歸類。所有異常現象被歸為兩類:一類是symptom(故障徵兆提示,非關鍵事件例如單一文件的再傳送),另一類是diagnosis(已發現故障的診斷,重復出現的事件或要求立刻採取行動的致命錯誤)。經過問題分離、分析且歸類後,Sniffer將實時地,自動發出一份警告、對問題進行解釋並提出相應的建議解決方案。
Sniffer與其他網路協議分析儀最大的差別在於它的人工智慧專家系統(Expert System)。簡單地說,Sniffer能自動實時監視網路,捕捉數據,識別網路配置,自動發現網路故障並進行告警,它能指出:
網路故障發生的位置,以及出現在OSI第幾層。
網路故障的性質,產生故障的可能的原因以及為解決故障建議採取的行動。
Sniffer 還提供了專家配製功能,用戶可以自已設定專家系統判斷故障發生的觸發條件。
有了專家系統,您無需知道那些數據包構成網路問題,也不必熟悉網路協議,更不用去了解這些數據包的內容,便能輕松解決問題。
1.4 OSI全協議七層解碼
Sniffer的軟體非常豐富,可以對在各種網路上運行的400多種協議進行解碼,如TCP/IP、Novell Netware、DECnet、SunNFS、X-Windows、HTTP、TNS SLQ*Net v2(Oracle)、Banyan v5.0和v6.0、TDS/SQL(Sybase)、X.25、Frame Realy、PPP、Rip/Rip v2、EIGRP、APPN、SMTP等。還廣泛支持專用的網路互聯橋/路由器的幀格式。
Sniffer可以在全部七層OSI協議上進行解碼,目前沒有任何一個系統可以做到對協議有如此透徹的分析;它採用分層方式,從最低層開始,一直到第七層,甚至對ORACAL資料庫、SYBASE資料庫都可以進行協議分析;每一層用不同的顏色加以區別。
Sniffer對每一層都提供了Summary(解碼主要規程要素)、Detail(解碼全部規程要素)、Hex(十六進制碼)等幾種解碼窗口。在同一時間,最多可以打開六個觀察窗口。
Sniffer還可以進行強制解碼功能(Protocl Forcing),如果網路上運行的是非標准協議,可以使用一個現有標准協議樣板去嘗試解釋捕獲的數據。
Sniffer提供了在線實時解碼分析和在線捕捉,將捕捉的數據存檔後進行解碼分析二種功能。
二、Sniffer的商業應用
Sniffer被 Network General公司注冊為商標,這家公司以出品Sniffer Pro系列產品而知名。目前最新版本為Sniffer Portable 4.9,這類產品通過網路嗅探這一技術方式,對數據協議進行捕獲和解析,能夠大大幫助故障診斷和網路應用性能的分析鑒別。
Network General 已經被NetScout公司收購。
三、Sniffer的擴展應用
1、專用領域的Sniffer
Sniffer被廣泛應用到各種專業領域,例如FIX (金融信息交換協議)、MultiCast(組播協議)、3G (第三代移動通訊技術)的分析系統。其可以解析這些專用協議數據,獲得完整的解碼分析。
2、長期存儲的Sniffer應用
由於現代網路數據量驚人,帶寬越來越大。採用傳統方式的Sniffer產品很難適應這類環境,因此誕生了伴隨有大量硬碟存儲空間的長期記錄設備。例如nGenius Infinistream等。
3、易於使用的Sniffer輔助系統
由於協議解碼這類的應用曲高和寡,很少有人能夠很好的理解各類協議。但捕獲下來的數據卻非常有價值。因此在現代意義上非常流行如何把協議數據採用最好的方式進行展示,包括產生了可以把Sniffer數據轉換成Excel的BoneLight類型的應用和把Sniffer分析數據進行圖形化的開源系統PacketMap等。這類應用使用戶能夠更簡明地理解Sniffer數據。
4、無線網路的Sniffer
傳統Sniffer是針對有線網路中的區域網而言,所有的捕獲原理也是基於CSMA/CD的技術實現。隨著WLAN的廣泛使用,Sniffer進一步擴展到802.11A/B/G/N的無線網路分析能力。無線網路相比傳統網路無論從捕獲的原理和接入的方式都發生了較大改變。這也是Sniffer技術發展趨勢中非常重要的部分.