端口掃描備份_第1頁
端口掃描備份_第2頁
端口掃描備份_第3頁
端口掃描備份_第4頁
端口掃描備份_第5頁
已閱讀5頁,還剩27頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

沈陽工程學院實訓報告實訓題目:程序設計專項實訓——端口掃描程序設計系別信息學院班級學生姓名學號指導教師張小瑞史江萍劉娜實訓進行地點:信息學院實驗室任務下達時間:2013年12月23日起止日期:2013年12月23日起——至2014年1月3日止《程序設計專項實訓》教學大綱課程編號:B02636第7學期課程類型:必修學時:2周學分:2適用專業:計算機科學與技術專業(信息安全方向)編制時間:2011年1月一、實訓的性質、目的和意義程序設計實訓是實踐性教學環節之一,是信息安全專業提高編程能力的必修課程。本實訓提供一系列與信息安全相關的題目,由學生通過學習、編程來完成。通過本次實訓,使學生實際接觸與信息安全相關的編程工作,培訓學生興趣,鞏固課堂教學內容,使學生掌握程序設計的基本思想和方法。另外,熟悉軟件開發的整個流程,提高學生分析和解決實際問題的能力,培養團隊精神,并在此基礎上強化學生的實踐意識、提高其實際動手能力和創新能力,從而為后續課程的學習,畢業設計環節以及將來的實際工作打好堅實的基礎。二、實訓的具體內容信息安全程序設計實訓要求學生綜合利用所學的有關知識,在教師的指導下,運用軟件工程的方法,嚴格按照研發的步驟展開項目實戰,完成某個項目的開發,并形成書面的實訓報告。在強化學生編程能力的同時,著重培養學生的綜合技術應用能力;分析問題與解決問題的能力。本實訓不限制程序開發語言,學生可以根據自己的題目選擇合適的語言。下面是各個設計階段的具體內容。⒈系統分析“分析就是在采取行動之前,對問題的研究”。系統分析在軟件開發過程中是非常重要的,其任務就是在考慮完各方面的實際因素后,就要對項目進行總體的分析設計。簡單的講,總體設計需要確定的內容應當包括:⑴系統需要實現哪些功能;⑵開發使用什么軟件,在什么樣的硬件環境;⑶需要多少時間,計劃進度如何;⑷需要遵循的規則和標準有哪些。一般情況下,在總體設計出來后,就需要拿出一個確定的系統開發方案。本階段的設計結果(即系統分析)應該在實訓報告中進行詳細描述,寫出系統需要實現的目的和目標,.系統各個模塊與結構,使用軟件,硬件和技術分析說明,開發時間進度表。總之,系統分析階段是以比較抽象概括的方式提出了解決問題的辦法。⒉詳細設計詳細設計階段的任務,也就是把問題解決方案具體化。詳細設計主要是針對程序開發部分來說的,但這個階段的不是真正編寫程序,而是設計出程序的詳細規格說明,應該包含必要的細節,例如:程序界面風格、表單、需要的基礎數據等,程序員可以根據它們寫出實際的程序代碼。⒊編碼在前面分析與詳細設計的基礎上,使用Java語言,把上一階段的設計結果編寫成程序,程序的風格應符合軟件工程的思想和規范。⒋測試要求學習并掌握開發環境所提供的調試工具,能夠閱讀在線幫助。在此基礎之上,應根據系統的需求設計相應的測試數據方案(特別是一些異常情況的處理),最終完成該系統的測試和調試任務。并要寫出相應的測試說明書。三、教學方法與重點、難點教學方法:采用理論教學和實踐教學相結合的方法。在理論教學中盡量采用實際編程等教學手段,針對不同的知識點采取不同的教學方法,例如實例教學、探索性教學等,注重課堂教學過程中教與學的互動性。老師進行提示性講解后,在實踐環節中以學生為主體,鼓勵學生動手實踐,教師跟蹤整個環節,耐心指導,快速糾正學生錯誤,及時解決學生困難。重點:項目的開發流程;關鍵安全知識點的講授;實例編寫。難點:軟件開發過程;安全知識;項目的實現。四、建議學時分配表教學內容總學時講課學時實踐學時備注項目講解和項目準備階段,數據庫的學習與設計422課設前給學生下達任務要求任務講解及第一次集中編碼422任務講解及第二次集中編碼422任務講解及第三次集中編碼422任務講解及第四次集中編碼422任務講解及第五次集中編碼422任務講解及第六次集中編碼422程序編碼、測試88答辯、撰寫設計報告413學生演示,教師審查學生的代碼并給出評價合計401525五、實訓選題的原則和要求對本實訓選題提出如下要求:⒈選題原則實訓題目以選用學生相對比較熟悉并且具有一定興趣的安全相關的題目為宜,力求通過本實踐性教學環節,使學生能夠強化理解信息安全知識點,增強編程能力,增加對于信息安全問題的興趣,對軟件開發過程有一個更清醒的認識。學生自由結組或組織分組,根據工作量決定小組人數,建議每組3-5人,組內分工,協調合作。⒉選題要求在后面的課題表中列出了幾個實訓課題,每個課題都有相應的要求或說明。各課題的難易度有一定的差異,因此,參加實訓的學生首先要了解設計的任務,仔細閱讀各個課題的設計要求,然后根據自己的基礎和能力情況選擇其中一題,或者由指導教師指定。一般來說,選擇課題應以在規定的時間內能完成,并能得到應有的鍛煉為原則。若學生對課題表以外的相關課題較感興趣,希望選作本次實訓的課題時,應征得指導教師的認可,并寫出明確的設計要求和說明。設計時要嚴格按照題意要求進行設計,不能隨意更改。若確因條件所限,必須要改變課題要求時,應在征得指導教師同意的前提下進行。3.參考選題(1)讀寫windows注冊表(2)鍵盤鉤子程序(3)自動更新程序(4)SQL注入實例(5)端口掃描器(6)進程注入程序(7)數據加密和解密——DES/3DES(8)數據加密和解密——RSA(9)圖像數字水印(10)開啟和關閉windows服務六、實訓報告要求實訓的設計報告是學生對本次實訓的全面總結,應該反映每個設計階段的設計思路和設計內容。該報告應作為整個實訓評分的書面依據和存檔材料。實訓報告一般要以固定規格的紙張(如A4)書寫或打印并裝訂,字跡及圖形要清楚,工整,規范。內容及要求如下:⑴各個階段的輸出結果。⑵系統環境配置與操作說明。⑶總結⑷驗收情況七、成績評定標準專題設計的成績評定以選定課題的難易度,完成情況和設計報告為依據綜合評分。從總體來說,所設計的系統應該符合設計要求,設計過程中的每一個階段均應提供正確的文檔(設計報告),設計報告要符合規范要求。序號報告內容所占比重評分原則不給分及格中等良好優秀1問題描述5%沒有不完整基本正確描述正確描述準確2設計思想10%沒有不完整基本可行方案良好很有說服力3具體設計的正確性70%不正確不完整基本正確正確,清晰正確,清晰4組內是否前后一致5%不一致有些不一致基本一致一致完全一致5其他10%包括是否按時完成,報告格式,字跡、語言等等八、題目說明讀寫windows注冊表目的和要求編寫應用程序,對windows的注冊表進行增加、刪除、修改鍵和鍵值的操作,以此熟悉讀寫注冊表的API的使用基本內容使用RegOpenKeyEx或RegCreateKeyEx函數打開或創建一個鍵;使用RegQueryValueEx讀取子鍵的值,使用RegSetValueEx設置子鍵值,使用RegEnumKey獲得所有子鍵,使用RegDeleteKey刪除一個鍵;

完成操作后使用RegCloseKey關閉鍵。鍵盤鉤子程序目的和要求學習鉤子的使用方式基本內容編寫應用程序,監聽鍵盤操作,并將一定時間內鍵盤輸入的內容記錄在一個txt文檔中。自動更新程序目的和要求模擬應用程序自動更新的過程,以此了解自動更新原理基本內容編寫應用程序,分為服務器端和客戶端。客戶端定期向服務器端查詢更新情況。若需要更新,客戶端自動從服務器端下載更新文件,并且進行更新。4.SQL注入實驗目的和要求模擬使用SQL注入方法入侵系統的過程,以此了解SQL注入的原理基本內容編寫簡單的登錄系統程序,用戶名和密碼從數據庫中獲取。使用SQL注入方式使用非法用戶名和密碼進入系統。簡單端口掃描器目的和要求通過本題目,了解端口掃描器的原理基本內容使用多線程技術,對本機的一定范圍內的端口進行TCP連接。若在一定時間內無響應,認為端口關閉,若連接成功,則端口打開。進程注入程序目的和要求通過本題目,學習進程注入的方法,了解進程注入的原理基本內容使用鉤子技術,將放入DLL文件中的程序注入到explorer.exe或者IE中,跟隨其運行。數據加密和解密——DES/3DES目的和要求通過本實驗,了解DES加密和解密的原理基本內容自己編寫DES/3DES加密算法,并對磁盤文件中的數據進行加密和解密。數據加密和解密——RSA目的和要求通過本實驗,了解RSA加密和解密的原理基本內容自己編寫RSA加密算法,并對磁盤文件中的數據進行加密和解密。圖像數字水印目的和要求通過本實驗,了解圖像數字水印的原理基本內容自己編寫一個簡單的數字水印的嵌入和檢測算法,對一幅圖像進行真偽識別。開啟和關閉windows服務目的和要求通過本實驗,學習開啟和關閉windows服務的方法基本內容自己編寫程序,添加一個windows服務并且啟動,然后關閉它。九、參考資料1.石志國,薛為民,尹浩編著,計算機網絡安全教程,北方交通大學出版社,2007年1月2.(美)斯托林斯(Stallings,W.)著,孟慶樹等譯,密碼編碼學與網絡安全——原理與實踐(第四版),電子工業出版社,2006年11月3.(美)馬里克(Malik,S.)著;王寶生,朱培棟,白建軍譯,網絡安全原理與實踐,人民郵電出版社,2008年08月4.周繼軍,蔡毅主編,網絡與信息安全基礎(重點大學計算機專業系列教材),清華大學出版社,2008年08月。5.張敏波編著,網絡安全實戰詳解(企業專供版),電子工業出版社,2008年05月6.楊波等編著.現代密碼學,清華大學出版社,2003年.7.關振勝等編著.公鑰基礎設施PKI及其應用,電子工業出版社,2008年.8.傅建明,彭國軍,張煥國編著.計算機病毒分析與對抗,武漢大學出版社,2004年.9.陳志雨等編著,計算機信息安全技術應用,電子工業出版社,2005年.10.

胡錚等編著,

網絡與信息安全,清華大學出版社,2006年.11.王景中,徐小青等編著,計算機通信信息安全技術,清華大學出版社,2006年.12.楚狂等編著,網絡安全與防火墻技術,人民郵電出版社,2000年.13.胡建偉等編著,網絡對抗原理,西安電子科技大學出版,2004年.14.杜曄

張大偉

范艷芳.網絡攻防技術教程:從原理到實踐,武漢大學出版社,2008年.

沈陽工程學院實訓成績評定表系(部):信息學院班級:信安本101學生姓名:何忠海指導教師評審意見評價內容具體要求權重評分加權分調研論證能獨立查閱文獻,收集資料;能制定實訓方案和日程安排。0.15432工作能力態度工作態度認真,遵守紀律,出勤情況是否良好,能夠獨立完成設計工作,0.25432工作量按期圓滿完成規定的設計任務,工作量飽滿,難度適宜。0.25432說明書的質量說明書立論正確,論述充分,結論嚴謹合理,文字通順,技術用語準確,符號統一,編號齊全,圖表完備,書寫工整規范。0.55432指導教師評審成績(加權分合計乘以8)分加權分合計指導教師簽名:年月日評閱教師評審意見評價內容具體要求權重評分加權分查閱文獻查閱文獻有廣泛性,有綜合歸納資料的能力。0.25432工作量工作量飽滿,難度適中。0.55432說明書的質量說明書立論正確,論述充分,結論嚴謹合理,文字通順,技術用語準確,符號統一,編號齊全,圖表完備,書寫工整規范。0.35432評閱教師評審成績(加權分合計乘以4)分加權分合計評閱教師簽名:年月日答辯小組評審意見評價內容具體要求權重評分加權分學生匯報匯報準備充分,思路清晰;語言表達準確,概念清楚,論點正確,有層次,有重點,基本上反映了所完成任務的全部內容;時間符合要求。0.55432答辯思路清晰;回答問題有理論依據,基本概念清楚;主要問題回答準確,深入,有說服力。0.55432答辯小組評審成績(加權分合計乘以8)分加權分合計答辯小組教師簽名:年月日課程設計總評成績分附表2:工作流程說明表部門教務處工作名稱程序設計實訓經辦人員各教學系部需要配合的相關部門教務處實踐教學科工作內容簡介為進一步鞏固消化學生所學知識、培養學生綜合運用所學相關課程知識的能力,針對某門課程所開設的設計。工作流程1.指導教師進行實訓的選題工作,填寫備選題目登記表。2.教研室主任對指導教師的選題進行篩選審查。3.系部教學副主任對實訓的選題審核簽字。4.指導教師向學生下達實訓任務書。5.指導教師指導、督促、檢查學生設計情況,填寫實訓指導教師工作日志。6.教務處、系部教學副主任和教研室主任抽查實訓完成情況。7.指導教師和評閱教師分別完成實訓成績的評定(必要時可進行答辯),總成績經教研室主任、系部教學副主任審核簽字后,上報教務處。8.教研室對實訓樣本和有關材料收存歸檔。9.指導教師進行實訓工作的總結。指導教師簽名(蓋章):計算機網絡實訓程序設計專項實訓-PAGEII--PAGE21-摘要隨著互聯網的飛速發展,網絡入侵行為日益嚴重,網絡安全成為人們關注的焦點。端口掃描技術是網絡安全掃描技術的重要技術之一。對目標系統進行端口掃描,是網絡系統入侵者進入目標系統的第一步。網絡安全探測在網絡安全中起著主動防御的作用,占有非常重要的地位。網絡安全探測的所有功能都是建立在端口掃描的基礎上,所以對端口掃描技術的研究有著非常重要的現實意義。現實世界中的很多過程都具有多條線索同時動作的特性。Java語言的一大特性就是內置對多線程的支持。多線程是指同時存在幾個執行體,按幾條不同的執行線索共同工作的情況,它使得編程人員可以很方便地開發出具有多線程功能、能同時處理多個任務的功能強大的應用程序。端口是由計算機的通信協議TCP/IP協議定義的。其中規定,有IP地址和端口號作為套接字,它代表TCP連接的一個連接端,一般稱為Socket.具體來說,就是用[IP:端口]來定位一臺主機的進程。可見端口與進程是一一對應的,如果某個進程正在等待連接,稱之為該進程正在監聽,那么就會出現與它相對應的端口。由此可見,通過掃描端口,就可以判斷出目標計算機有哪些通信進程正在等待連接。利用TCP

connect掃描原理,掃描主機通過TCP/IP協議的三次握手與目標主機的指定端口建立一次完整的連接,如果目標主機該端口有回復,則說明該端口開放。利用多線程技術實現了對一目標IP進行設定數目的端口掃描,對多IP段的特定端口進行掃描。關鍵詞:多線程;端口;端口掃描;IP段掃描目錄摘要 I第1章緒論 11.1課題研究背景 11.2端口掃描檢測防護技術的發展 21.2.1傳統的端口掃描技術的檢測防護 21.2.2改進后的端口掃描技術的檢測防護 2第2章系統分析 42.1系統主要目標 42.2開發環境及工具 42.3功能介紹 4第3章系統功能設計 63.1獲取本機IP 63.2分割字符串函數的實現 63.3TCPconnect()掃描 63.4UDP掃描 7第4章功能實現 94.1TCP掃描檢測 94.1.1掃描本機 94.1.2掃描網絡中其他主機 94.1.3掃描IP段 104.2UDP掃描檢測 114.2.1掃描本機 114.2.2掃描網絡中其他主機 124.3TCP、UDP一起掃描 12結論 13參考文獻 14附錄 15第1章緒論1.1課題研究背景隨著網絡經濟和網絡社會時代的到來,Internet爆炸式的發展正在改變著經濟、社會、文化的結構和運行方式,推動著國家的現代化、推動著社會文明的發展、改變著人類的思維方式。它給人們的生產和生活都帶來了前所未有的飛躍。然而網絡技術同其它技術一樣是一把雙刃劍,危險也伴隨著強大功能一道而來。1988年11月2日,是Internet歷史上極不光彩的一天。Internet遭到T“蠕蟲”病毒的攻擊,這種病毒是第一個攻擊Internet的重要病毒,在這次事件中共造成了當日在線60000多臺主機中近10%的主機遭到了破壞,大量的數據和資料毀于一旦,直接造成經濟損失上億美元。這還得益于人們對蠕蟲病毒的傳播做出了迅速的反應,阻止了繼續擴散,才減少了病毒入侵造成的損失。從那以后,網絡安全問題層出不窮。1999年,CIH病毒使全球范圍內的計算機系統受到了嚴重的損失。2000年初,一些身份不明的黑客相繼對YAHOO,E-BAY等商業網站發動的拒絕服務攻擊,使這些網站癱瘓達數小時之久,造成的經濟損失高達10億美元。2001年尼姆達病毒及其變種病毒在工nternet上的泛濫,造成了巨大的經濟損失。2004年8月7日,中國民間保釣聯合會網站遭到攻擊,使網站無法正常訪問和使用。2006年,被命名為“灰鴿子”的木馬程序,不僅侵襲用戶的計算機,還可以通過控制用戶計算機系統上的攝像頭和麥克風,將捕獲的圖像和聲音傳遞給黑客,從而實現對用戶行為的監視。在2006年底開始的2個多月的時間里是又一輪病毒蔓延的狂潮,數百萬電腦用戶被卷入其中,那只憨態可掬、領首敬香的“熊貓”除而不盡。反病毒工程師們將它命名為“尼姆亞”。它還有一個更通俗的名字一“熊貓燒香”。據不完全統計,國內感染“熊貓燒香”病毒的企業已接近千家,其中外企用戶居多,個人用戶更是不計其數,損失慘重。最近幾年來,這類事件已經成為最熱門的話題之一,據相關資料統計表明,電子科技大學碩士學位論文美國每年因網絡安全事件造成的經濟損失高達75億美元,全球平均每20秒就發生一次網絡入侵事件。而每一次網絡入侵發生的最初,入侵者都要通過端口掃描器等工具獲取目標主機的信息,然后根據獲得的信息制定一個可行的入侵方案,完成入侵。而上面提到的所有案例,基本上都是通過端口掃描技術獲得了目標主機的端口分布狀態,以及在開放端口上運行的服務和軟件版本等信息,然后再利用服務本身存在的漏洞進行病毒的傳播。于是,相關的計算機網絡安全技術便成為了國內、外研究的重點。計算機網絡安全從其本質上來講就是計算機網絡上的信息安全。計算機網絡安全所涉及的研究領域較為廣泛,從廣義來說,凡是涉及到網絡上信息的保密性、完整性、可用性、真實性和可控性的相關理論和技術,都是計算機網絡安全所要研究的領域。1.2端口掃描檢測防護技術的發展端口掃描做為網絡入侵的基礎,它可以通過向目標主機發送探測數據包,記錄目標主機的響應,并通過分析響應數據包來判斷服務端口的打開和關閉,從而了解目標主機的安全狀況。1.2.1傳統的端口掃描技術的檢測防護傳統的端口掃描技術一般是在較短的時間段集中向目標主機發送大量的探測數據包,并根據返回數據包的信息來判斷目標主機端口的分布情況。針對這種掃描技術,端口掃描檢測系統采用的方法主要有兩種:1.對主機沒有對外提供服務的端口進行監測,如果檢測到有對這樣端口的連接請求,就認為有端口掃描發生;2.對整個網絡流量進行監控,檢查網絡中所有的數據,并對異常情況進行記錄,典型的如基于規則的檢測方法。比較著名的端口掃描檢測工具有Snort,Watcher和PortSentry,它們有各自的優點:Snort是一個輕量級的網絡入侵檢測系統。它的探測引擎采用模塊化的插件結構,允許開發者擴展Snort的功能,同時用戶也可以按自己的需要定制功能。Snort檢測端口掃描的方法是:在Y秒內,如果檢測到從同一個源地址發出,目的為不同的主機和端口組合的TCP或UDP數據包并且數目上超出閡值X,則認為是掃描。Watcher是一個比較完整的基于網絡的入侵檢測系統。它檢測所有通過的數據包,并且將它認為是惡意的攻擊行為記錄在syslog中。它的檢測原理是:如果在短時間內有超過7個以上的端口收到數據包(不管類型如何),那么這一事件就被認為是端口掃描記錄下來。PortSentry是基于主機的網絡入侵檢測系統的一個組成部分,主要用來檢測。測外部對主機的端口掃描,它能夠對多種掃描方法進行檢測。它的檢測原理是:對沒有開放服務的端口的訪問有可能是一次掃描。通過監測沒有開放服務的端口,在最近n次連接里由同一個源發起的連接超過X次則判斷為一次掃描。1.2.2改進后的端口掃描技術的檢測防護目前,端口掃描的手段日益趨于隱蔽化和多樣化,傳統的端口掃描檢測技術已經不能滿足需要。新的端口掃描技術做了許多改進,例如:改變掃描的順序:將要掃描的IP地址和端口的順序打亂,這樣可以躲避和降低檢測的效率。降低掃描速度:降低掃描速度能夠使當前大部分掃描檢測系統不產生報鰲。掃描時間間隔隨機化:確定的掃描時間間隔可以使檢測系統高效的工作,隨機化能夠降低系統的檢測效率。不太重要字段的隨機化:改變掃描數據包中的序列號、確認號、端口號等一些字段值可以增加檢測的難度。IP欺騙:源IP地址是很難改變的一個部分,因為掃描者需要接收對方的反饋來確定端口是否開放。如果能夠監視一個靠近目標的網絡,就可以假冒一個源地址來發送掃描數據包,然后再從被監視的網絡中獲取響應的數據包。分布式掃描:從許多不同位置的真實主機上發送掃描數據包,掃描的痕跡也被分布在不同的主機上,這會使掃描檢測變得更為復雜。在新的端口掃描技術出現后,相應的出現了許多檢測防護系統,但均存在一定的缺陷,不能夠很好的實現對被保護主機的防護。

第2章系統分析2.1系統主要目標本程序主要實現了:簡易的TCPconnect()掃描,支持多線程;UDP掃描功能;能對單個指定的主機進行掃描或掃描指定網段內的主機;能掃描特定的部分端口號或對指定的端口段內的端口進行逐個掃描;2.2開發環境及工具測試平臺:WindowsXPProfessional使用軟件:VisualC++6.0開發語言:C語言2.3功能介紹服務器上所開放的端口就是潛在的通信通道,也就是一個入侵通道。對目標計算機進行端口掃描,能得到許多有用的信息,進行端口掃描的方法很多,可以是手工進行掃描、也可以用端口掃描軟件進行。掃描器通過選用遠程TCP/IP不同的端口的服務,并記錄目標給予的回答,通過這種方法可以搜集到很多關于目標主機的各種有用的信息,例如遠程系統是否支持匿名登陸、是否存在可寫的FTP目錄、是否開放TELNET服務和HTTPD服務等。端口掃描程序功能模塊如下圖2.1所示。圖2.1功能模塊圖程序運行流程圖2.2所示。圖2.2運行流程圖第3章系統功能設計本程序主要實現了簡易的TCPconnect()掃描和UDP掃描功能,對TCP掃描支持多線程掃描,UDP掃描僅支持單線程。3.1獲取本機IP首先使用winsock中的gethostname()函數獲取本地主機的標準主機名,再使用函數gethostbyname()主機名字和地址信息的hostent結構指針,最后通過inet_ntoa()函數將地址轉化為字符形式返回給主調函數。3.2分割字符串函數的實現由于掃描結果是使用靜態字符串保存的,所以最后顯示的時候,需要用到分割字符串函數,來將字符串中掃描出的端口號分離出來顯示。本函數主要是通過Find()函數來查找用作分隔符的字符串在待查找的字符串中的位置,然后通過Add()函數將分隔符之間的字符保存進數組中,來達到分割字符的目的。1.獲取待掃描的主機IP。通過判斷選擇的哪個RadioButton的值,來選擇從對應的IPAddress控件中讀入用戶輸入的值,若是單個的IP則將開始地址StartAddr和結束地址EndAddr都賦值為IPAddress控件的值;若是IP范圍,則第一個IP地址賦值給StartAddr,最后一個IP地址賦值給EndAddr。2.獲取待掃描的端口號首先讀入用戶設置的允許的最大線程數。再通過判斷選擇的哪個RadioButton的值,來選擇從對應的EditBox控件中讀入用戶輸入的值。若是指定的端口號,則循環讀入EditBox中的端口號(一個端口號占用一行,一次讀入一行),每行的字符不超過9字符,再在讀入的每行字符的末尾添加字符串結束標記’\0’,再通過atoi()函數把字符型轉換為整型,存放在定義的數組結構中,并保存端口號的總個數。若是端口范圍,則第一個端口號的值和最后一個端口號的值分別讀入存放在定義的結構體中。3.指定端口號的初始化首先試著讀取DefaultPorts.txt文件中保存的端口號,若讀入成功,則顯示該文本文檔中保存的值;若該文件不存在或讀入異常,則顯示默認設置的值。4.指定端口號的保存在運行端口掃描時會將指定端口保存進文本文檔DefaultPorts.txt中,若此文件不存在,則創建此文件。3.3TCPconnect()掃描這是最基本的TCP掃描。操作系統提供的connect()系統調用,用來與每一個感興趣的目標計算機的端口進行連接。如果端口處于偵聽狀態,那么connect()就能成功。否則,這個端口是不能用的,即沒有提供服務。這個技術的一個最大的優點是,你不需要任何權限。系統中的任何用戶都有權利使用這個調用。另一個好處就是速度。如果對每個目標端口以線性的方式,使用單獨的connect()調用,那么將會花費相當長的時間,你可以通過同時打開多個套接字,從而加速掃描。使用非阻塞I/O允許你設置一個低的時間用盡周期,同時觀察多個套接字。但這種方法的缺點是很容易被發覺,并且被過濾掉。目標計算機的logs文件會顯示一連串的連接和連接是出錯的服務消息,并且能很快的使它關閉。1.基本原理調用connect()函數,根據返回值來判斷端口是否打開的,connect()函數返回0說明建立連接成功,說明該端口是打開的,就將該端口保存進靜態字符串變量中,然后關閉連接,則線程數減一。RunThreadNum是用來控制最大線程數量的。2.掃描多個主機多端口多線程的實現掃描多個主機是使用for循環來實現逐個掃描的,多端口也是使用for循環來實現逐個掃描的。最大線程數量是通過變量RunThreadNum的值來控制的,當其值大于允許的最大線程數maxthread時,便Sleep等待,直到存活的線程數小于maxthread,經過測試最大線程數maxthread設置為150效果較好,不宜大于200。多線程的創建是通過調用AfxBeginThread()函數來實現的。3.掃描結果的顯示首先判斷靜態字符串變量showout_tcp是否為空,若為空說明沒有端口是打開的。若存在打開的端口,則調用分割字符串函數將打開的端口號提取出來存放到Array數組中,再分別顯示出來。3.4UDP掃描這種方法由于使用的是UDP協議。由于這個協議很簡單,所以掃描變得相對比較困難。這是由于打開的端口對掃描探測并不發送一個確認,關閉的端口也并不需要發送一個錯誤數據包。幸運的是,許多主機在你向一個未打開的UDP端口發送一個數據包時,會返回一個ICMP_PORT_UNREACH錯誤。這樣就能發現哪個端口是關閉的。UDP和ICMP錯誤都不保證能到達,因此這種掃描就不那么可靠。而且這種掃描方法是很慢的,因為RFC對ICMP錯誤消息的產生速率做了規定,而且本程序的UDP掃描只支持單線程。1.基本原理首先使用socket()函數創建套接字,再用bind()函數綁定套接字,然后向掃描的目的主機的目的端口發送UDP數據包,再等待目的主機的目的端口是否返回ICMP_PORT_UNREACH錯誤數據報,若收到返回的錯誤數據包,則說明該端口是關閉著的,否則該端口是打開的,再將打開的端口保存進靜態數組中,以方便顯示結果。2.計算效驗和首先通過while循環,將各位相加求和,若為奇數個字節,則最后通過if循環將最后一個字節加完,再移位做位運算,最后取反得到效驗和,再返回給調用函數。3發送UDP數據包先調用WSASocket()函數創建sock套接字,再調用setsockopt()函數設置套接字選項,再將UDP、IP頭部填充好,最后調用sendto()函數將構造的數據包發送到目的IP地址的掃描的端口。USHORTCPortScanDlg::Send_UDPinfo(UINTS_ADR,UINTD_ADR,USHORTDF_SPT,USHORTSCAN_DPT){ …… if((sock=WSASocket(AF_INET,SOCK_RAW,IPPROTO_IP,NULL,0,WSA_FLAG_OVERLAPPED))==INVALID_SOCKET){ ……} if((Check_Ret=setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&FLAG,sizeof(FLAG)))<0){……………} …填充UDP、IP頭部………………Send_info=sendto(sock,Packet_Buf,ipheader->total_len,0,(structsockaddr*)&DEST_ADDR,sizeof(DEST_ADDR)); closesocket(sock); return0;}4.接收ICMP數據包首先定義一個套接字集合,并將其清空,再把讀數據的套節字加入到套接字集合中,再通過select()函數檢查套節字是否可讀:1.如果沒有則返回1給主調函數,表示沒有收到返回的ICMP_PORT_UNREACH錯誤數據報,則說明該端口是打開的。2.如果有可讀的套接字,就再通過FD_ISSET()函數檢查需要讀取的套接字是否在可讀的套接字集合中:(1)如果可讀的套接字中沒有需要讀取的套接字,則返回1給主調函數,表示沒有收到返回的ICMP_PORT_UNREACH錯誤數據報,則說明該端口是打開的。(2)如果可讀的套接字中有需要讀取的套接字,則調用recvfrom()函數從套接口上接收數據,如果沒有數據,則說明該套接口不是用來傳送數據的,則可以判斷為返回的ICMP_PORT_UNREACH錯誤數據報,則說明該端口是關閉的。第4章功能實現4.1TCP掃描檢測4.1.1掃描本機1.IP設置(1)IP設置為本地IP(58):圖4.1設置本機ip(2)IP設置為:圖4.2設置指定ip2.端口設置為0-1024,最大線程數設置為100,協議選擇TCP3.掃描結果(1)IP設置為本地IP(58)的掃描結果:圖4.3本機掃描結果(2)IP設置為的掃描結果:圖4.4指定主機掃描結果設置為掃描本地IP和設置為掃描時掃描結果會有差別:掃描時掃描不出端口139,具體原因還不清楚。4.1.2掃描網絡中其他主機1.設置IP(經過ping命令發現IP為4的主機能ping通)圖4.5指定網絡中的主機2.端口設置為0-1024,最大線程數設置為100,協議選擇TCP。掃描結果如下圖4.6所示。圖4.6掃描結果4.1.3掃描IP段1.設置IP圖4.7設置掃描ip段2.端口設置為掃描指定端口,最大線程數設置為100,協議選擇TCP圖4.8設置指定的端口3.掃描結果圖4.9ip段掃描結果由掃描結果可知能正常掃描,但由于沒有先判斷主機是否在線,所以對不在線的主機也發送了連接請求,導致掃描速度較慢。4.2UDP掃描檢測4.2.1掃描本機1.IP設置(1)IP設置為本地IP(58):圖4.10設置本機ip(2)IP設置為:圖4.11設置指定ip2.由于是單線程,掃描速度較慢,端口設置為掃描指定端口,協議選擇UDP。圖4.12設置指定端口3.掃描結果:IP設置為本地IP(38)的掃描結果和IP設置為的掃描結果相同。圖4.13掃描結果4.2.2掃描網絡中其他主機1.設置IP(經過ping命令發現IP為4的主機能ping通)圖4.14設置網絡中的指定主機ip2.由于單線程,掃描速度較慢,端口設置為掃描指定端口同掃描本機的設置協議選擇UDP。3.掃描結果如下圖4.15網絡中指定主機掃描結果由掃描結果可知能正常掃描。4.3TCP、UDP一起掃描IP設置為4,端口設置為指定端口,協議選擇TCP和UDP,掃描結果如下:圖4.16TCP/UDP同時掃描由掃描結果可知能正常掃描,但由于TCP掃描使用多線程速度較快,而UDP掃描則是單線程,所以速度較慢,若同時進行兩種協議的掃描,會使整體速度下降很大,所以不建議選擇兩種協議同時進行掃描。

結論本設計經過近兩周的努力,基本滿足了一個端口掃描程序的基本要求。完成后的程序實現了TCPconnect()掃描和UDP掃描功能,TCP掃描支持多線程,能大大加快掃描速度。能對單個指定的主機進行掃描或掃描指定網段內的主機。能對指定的端口段內的端口進行逐個掃描,或掃描特定的部分端口號,以避免在不需要了解的端口號上浪費時間。進度條顯示,能方便用戶隨時知道掃描的進度。系統設計期間,學習到很多課堂上沒有的知識,還積累了很多實踐經驗,增強了動手能力和解決實際問題的能力。通過這次的課程設計,對網絡編程有了更深入的了解,進一步熟悉了TCP和UDP協議的內容,掌握了TCP、UDP掃描端口的基本原理,學會了運用sock套接字構造UDP數據包并發送,以及如何接收ICMP數據包。對編程思想有了進一步的體會,養成了一些良好的編程習慣。系統雖然完成,但還有很多不足之處,希望自己能不斷學習和實踐,爭取以后做得更好。雖然此軟件實現了支持多線程的TCPconnect()掃描功能,和單線程的UDP掃描功能。但也還有很多不足之處,如掃描功能單一:不支持TCPSYN掃描、TCPFIN掃描以及IP段掃描等功能,對UDP掃描不支持多線程功能,而且在掃描主機前沒有發送ICMP報文去判斷主機是否在線,還需要進一步完善。限于作者知識水平和經驗有限,此程序還有許多有待完善和改正的地方,懇請各位老師和讀者批評指正。

參考文獻[1]吳功宜.計算機網絡(第二版).清華大學出版社,2007[2]唐海娜,李俊.基于RRD的網絡流量監測方法.微電子學與計算機,2003(7):24-26[3]雷震甲,嚴體華等.計算機網絡管理.西安電子科技大學出版社,2006[4]Behrouz,A.Forouzan,SophiaChungFegan.吳時霖,吳永輝等譯.數據通信與網絡.機械工業出版社,2007.[5]http://networking.ctocio.com.cn/tipS/136/7108136.shtml[6]王宏,龔正虎.松耦合分布式網絡管理【J】.計算機工程與科學,2004,26(4):8~10[7]WILLIAMSTALLINGS著.胡成松,汪凱譯.SNMP網絡管理.中國電力出版社,2003[8]談杰,李星.網絡測量綜述.計算機應用,2006(2):5~7[9]Michael,Kofler著.楊曉云,王建橋等譯.MySQL5權威指南.人民郵電出版社,2006[10]黃炳強.PHP5+MySQL網站開發實例精講.人民郵電出版社,2007[11]孫建華,王宇等.網絡系統管理應用與開發.人民郵電出版社,2005[12]楊云江.計算機網絡管理技術.清華大學出版社,2005

附錄源代碼#pragmacomment(lib,"ws2_32.lib")#pragmawarning(disable:4786)#include<iostream>#include<strstream>#include<winsock2.h>#include<string>#include<vector>#include<map>#include<fstream>#include<time.h>if(gethostname(szHostName,128)==0){ pHost=gethostbyname(szHostName);for(i=0;pHost!=NULL&&pHost->h_addr_list[i]!=NULL;i++){/*對每一個IP地址進行處理*/ pszAddr=inet_ntoa(*(structin_addr*)pHost->h_addr_list[i]); break; }}while(-1!=pos){if(-1==pre_pos)pos=source.Find(division,pos);elsepos=source.Find(division,(pos+1));if(-1==pre_pos) {iFirst=0;if(-1==pos)nCount=source.GetLength();elsenCount=pos;}else{iFirst=pre_pos+len;if(-1!=pos)nCount=pos-pre_pos-len;elsenCount=source.GetLength()-pre_pos-len;}dest.Add(source.Mid(iFirst,nCount));pre_pos=pos;}voidCPortScanDlg::setAddr(DWORD&StartAddr,DWORD&EndAddr){ switch(m_conf_IP.m_IP) { case0: m_conf_IP.m_IP_Self.GetAddress(StartAddr); m_conf_IP.m_IP_Self.GetAddress(EndAddr); break; case1: m_conf_IP.m_IP_Design.GetAddress(StartAddr); m_conf_IP.m_IP_Design.GetAddress(EndAddr); break; case2: m_conf_IP.m_IP_Start.GetAddress(StartAddr); m_conf_IP.m_IP_End.GetAddress(EndAddr); break; default: break; }}voidCPortScanDlg::setPort(tag_PORTS*pScanParam,int&ThreadNum){ ThreadNum=m_conf_Port.m_ThreadNum; switch(m_conf_Port.m_Port) { case0: { shortnCount=0; charbuff[10]; for(inti=0;i<m_conf_Port.m_DesignPort.GetLineCount();i++) { intlen=m_conf_Port.m_DesignPort.GetLine(i,buff,9); if(len!=0) { buff[len]='\0'; pScanParam->nArrOfPorts[nCount++]=atoi(buff); } } pScanParam->nCount=nCount; pScanParam->bSepecifiedPort=0; break; } case1: pScanParam->bSepecifiedPort=1; pScanParam->iStartPort=m_conf_Port.m_StartPort; pScanParam->iEndPort=m_conf_Port.m_EndPort; break; default: break; }voidconf_Port::ReadDefaultPorts(){ try { CStdioFilef("DefaultPorts.txt",CFile::modeRead|CFile::typeText); CStrings,ss; while(f.ReadString(ss)) { s+=ss; s+="\r\n"; } GetDlgItem(IDC_EDIT_DesignPort)->SetWindowText(s); f.Close(); } catch(...) { CStrings="13\r\n37\r\n123\r\n135\r\n139\r\n489\r\n1002"; GetDlgItem(IDC_EDIT_DesignPort)->SetWindowText(s); }}voidconf_Port::SaveDefaultPorts(){ CStdioFilef("DefaultPorts.txt",CFile::modeCreate|CFile::modeWrite|CFile::typeText); charbuff[10]; for(inti=0;i<m_DesignPort.GetLineCount();i++) { intlen=m_DesignPort.GetLine(i,buff,9); if(len!=0) { buff[len]='\0'; f.WriteString(buff); f.WriteString("\r\n"); } } f.Close(); }UINTCPortScanDlg::DoScanPort_TCP(LPVOIDlp){ ……… ret=connect(sock,(structsockaddr*)&sin,sizeof(sin)); if(ret==0) { str.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論