如何学习网络协议(学习笔记)
?
引: 抓包軟件---tcp狀態(tài)轉(zhuǎn)換。。構(gòu)造包---》2011-12-31 15:51:26
?
一個前輩寫的網(wǎng)絡(luò)協(xié)議學(xué)習(xí)方法
分類: Linux開發(fā)c/c++2008-10-02 00:35 2575人閱讀 評論(8) 收藏?舉報
?
??????? 網(wǎng)絡(luò)這東西就是一個靠實踐的東西,只靠看書是不行的。當(dāng)年在學(xué)校還上過史美林教授/張公忠教授所講的計算機網(wǎng)絡(luò)體系結(jié)構(gòu)課,用的是Tanabaum寫的那本,考試還得了九十多分,可實際還是連TCP和UDP有什么區(qū)別都分不清,就是死記背,到畢業(yè)的時候基本上是忘光了,工作后等于重新來過。
????? 上班了要在Linux做一些底層的網(wǎng)絡(luò)處理,不得不從頭來學(xué)Linux和網(wǎng)絡(luò),編程部分主要看Richard Stevens的那幾本書:APUE、UNP、TCP/IP Illustraion等,學(xué)Linux則看得很雜,市面上各種Linux入門書大都翻了一遍,俺是習(xí)慣在書店里看書,愛看書而不愛買書,汗,,然后就是去各大BBS、論壇把他們的精華區(qū)都下載下來狂看,邊看邊實踐,基本上在一個月內(nèi)熟悉了Linux的操作。
?????????? 學(xué)網(wǎng)絡(luò)協(xié)議剛開始也是看書,但看了之后沒多少印象,那些東西靠死記真是沒法記的,后來找到一個好辦法,就是自己寫個sniffer,自己寫個協(xié)議分析器,先學(xué)怎么抓包,就看tcpdump的源碼,然后看libpcap的源碼,知道了什么是網(wǎng)卡的混雜模式,很快就能抓到網(wǎng)卡上包的。
?
接下來就是對包進行分析,就看作TCP/IP Illustraion,從以太頭、ARP/IP、ICMP/IGMP/TCP/UDP、HTTP/FTP/TELNET/SMTP等這么一點一點、一個字段一個字段分析下來,很快就明白了所謂TCP/IP到底是怎么回事。另外為了學(xué)TCP狀態(tài)轉(zhuǎn)換表,根據(jù)所抓的包的TCP標志分析通信雙方當(dāng)前是什么狀態(tài),剛開始還只能從頭一方發(fā)SYN包開始分析,到后來是可從連接中間包如手就能逐漸判斷雙方的TCP狀態(tài),基本上是徹底搞清楚了TCP的狀態(tài)轉(zhuǎn)移是怎么回事,后來再理解防火墻的狀態(tài)檢測原理就很容易了。另外在分析過程中,為徹底掌握IP碎片,還特地ping大包來抓,把抓上來的包自己重組,搞明白了IP頭的碎片offset字段是怎么用的。
?
????????? 能抓包后進而又開始學(xué)如何自己構(gòu)造包來“干擾”正常通信了,開始是學(xué)怎么發(fā)TCP的RST包來切斷一個正常的TCP連接,就的學(xué)會如何計算IP頭校驗和,TCP校驗和,知道了算TCP校驗和時必須加IP偽頭數(shù)據(jù),然后是正確計算序列號和確認號,知道了原來SYN和FIN標志也是算一位的,最重要的是理解了什么是網(wǎng)絡(luò)序什么是主機序,現(xiàn)在基本把ntohs(l),htons(l)處理都成了一種編程的本能意識了。學(xué)會用RST切斷TCP后,進一步實現(xiàn)了直接發(fā)一個頁面信息告訴客戶端訪問了非法信息,也就是以后實現(xiàn)URL過濾時客戶端顯示的拒絕畫面。后來也學(xué)發(fā)ARP信息胡亂通告MAC地址,也就是以前寫的那篇ARP攻擊的由來。
?
?
?????????? 后來俺寫的這個協(xié)議分析器逐步完善,能解析的就解析,不能解析的就打印出16進制數(shù),可打印字符也打印出來,對HTTP、FTP、POP3、SMTP這些文本協(xié)議幾乎就一下看明白了,對于非文本協(xié)議,如DNS,也根據(jù)協(xié)議解析了出來,而且解析DNS時不得不用了我一向不愛用的遞歸方法來編程。隨著網(wǎng)絡(luò)應(yīng)用的增加,在用到前都先作協(xié)議解析,除了各種TCP、UDP的協(xié)議,還增加了BPDU、PPPOE、OSPF、ESP、AH、IKE等的解析處理,現(xiàn)在俺的協(xié)議分析器也可以分析上百種協(xié)議,平時抓包就只用俺這個,TCPDUMP基本不再用了,畢竟自己寫的自己更清楚,如果有不能解析的再現(xiàn)加進去。現(xiàn)在學(xué)新協(xié)議時,往往先抓包看看協(xié)議的基本數(shù)據(jù)格式,再看RFC了解細節(jié)。
????????????? 學(xué)協(xié)議剛開始是看書,到后來要更深入了解或追詢最新發(fā)展情況就只能看RFC了,畢竟網(wǎng)絡(luò)的東西變化太快,書的東西只能算入門,說不定很快就出新的了,到現(xiàn)在也看了數(shù)百篇的RFC了。
???????????? 通過編程分析來學(xué)協(xié)議,慢是慢了點,花了一個多月的時間,但感覺學(xué)得扎實,正所謂磨刀不誤砍柴功,而且一通百通。到現(xiàn)在雖然已經(jīng)好幾年了,IP頭,TCP頭有哪些字段還是一下就可以說得出來,對理解各種網(wǎng)絡(luò)攻擊原理從而進行防范更是有幫助,我覺得對我來說這種方法是很有效,如果哪位覺得有更有效的學(xué)習(xí)方法,可以共同交流一下。
?
源文檔 <http://blog.csdn.net/eroswang/article/details/3008146>
轉(zhuǎn)載于:https://www.cnblogs.com/titer1/archive/2011/12/31/2308838.html
總結(jié)
以上是生活随笔為你收集整理的如何学习网络协议(学习笔记)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows2003+PHP-5.3.
- 下一篇: Vector和LinkedList源代码