網路這東西就是乙個靠實踐的東西,只靠看書是不行的。當年在學校還上過史美林教授/張公忠教授所講的計算機網路體系結構課,用的是tanabaum寫的那本,考試還得了九十多分,可實際還是連tcp和udp有什麼區別都分不清,就是死記背,到畢業的時候基本上是忘光了,工作後等於重新來過。
學網路協議剛開始也是看書,但看了之後沒多少印象,那些東西靠死記真是沒法記的,後來找到乙個好辦法,就是自己寫個sniffer,自己寫個協議分析器,先學怎麼抓包,就看tcpdump的原始碼,然後看libpcap的原始碼,知道了什麼是網絡卡的混雜模式,很快就能抓到網絡卡上包的。接下來就是對包進行分析,就看作tcp/ip illustraion,從以太頭、arp/ip、icmp/igmp/tcp/udp、http/ftp/telnet/smtp等這麼一點一點、乙個字段乙個字段分析下來,很快就明白了所謂tcp/ip到底是怎麼回事。另外為了學tcp狀態轉換表,根據所抓的包的tcp標誌分析通訊雙方當前是什麼狀態,剛開始還只能從頭一方發syn包開始分析,到後來是可從連線中間包如手就能逐漸判斷雙方的tcp狀態,基本上是徹底搞清楚了tcp的狀態轉移是怎麼回事,後來再理解防火牆的狀態檢測原理就很容易了。另外在分析過程中,為徹底掌握ip碎片,還特地ping大包來抓,把抓上來的包自己重組,搞明白了ip頭的碎片offset欄位是怎麼用的。
能抓包後進而又開始學如何自己構造包來「干擾」正常通訊了,開始是學怎麼發tcp的rst包來切斷乙個正常的tcp連線,就的學會如何計算ip頭校驗和,tcp校驗和,知道了算tcp校驗和時必須加ip偽頭資料,然後是正確計算序列號和確認號,知道了原來syn和fin標誌也是算一位的,最重要的是理解了什麼是網路序什麼是主機序,現在基本把ntohs(l),htons(l)處理都成了一種程式設計的本能意識了。學會用rst切斷tcp後,進一步實現了直接發乙個頁面資訊告訴客戶端訪問了非法資訊,也就是以後實現url過濾時客戶端顯示的拒絕畫面。後來也學發arp資訊胡亂通告mac位址,也就是以前寫的那篇arp攻擊的由來。
後來俺寫的這個協議分析器逐步完善,能解析的就解析,不能解析的就列印出16進製制數,可列印字元也列印出來,對http、ftp、pop3、smtp這些文字協議幾乎就一下看明白了,對於非文字協議,如dns,也根據協議解析了出來,而且解析dns時不得不用了我一向不愛用的遞迴方法來程式設計。隨著網路應用的增加,在用到前都先作協議解析,除了各種tcp、udp的協議,還增加了bpdu、pppoe、ospf、esp、ah、ike等的解析處理,現在俺的協議分析器也可以分析上百種協議,平時抓包就只用俺這個,tcpdump基本不再用了,畢竟自己寫的自己更清楚,如果有不能解析的再現加進去。現在學新協議時,往往先抓包看看協議的基本資料格式,再看rfc了解細節。
學協議剛開始是看書,到後來要更深入了解或追詢最新發展情況就只能看rfc了,畢竟網路的東西變化太快,書的東西只能算入門,說不定很快就出新的了,到現在也看了數百篇的rfc了。
通過程式設計分析來學協議,慢是慢了點,花了乙個多月的時間,但感覺學得紮實,正所謂磨刀不誤砍柴功,而且一通百通。到現在雖然已經好幾年了,ip頭,tcp頭有哪些字段還是一下就可以說得出來,對理解各種網路攻擊原理從而進行防範更是有幫助,我覺得對我來說這種方法是很有效,如果哪位覺得有更有效的學習方法,可以共同交流一下。
乙個前輩寫的網路協議學習方法
網路這東西就是乙個靠實踐的東西,只靠看書是不行的。當年在學校還上過史美林教授 張公忠教授所講的計算機網路體系結構課,用的是tanabaum寫的那本,考試還得了九十多分,可實際還是連tcp和udp有什麼區別都分不清,就是死記背,到畢業的時候基本上是忘光了,工作後等於重新來過。學網路協議剛開始也是看書,...
乙個前輩寫的網路協議學習方法
網路這東西就是乙個靠實踐的東西,只靠看書是不行的。當年在學校還上過史美林教授 張公忠教授所講的計算機網路體系結構課,用的是tanabaum寫的那本,考試還得了九十多分,可實際還是連tcp和udp有什麼區別都分不清,就是死記背,到畢業的時候基本上是忘光了,工作後等於重新來過。學網路協議剛開始也是看書,...
乙個前輩寫的網路協議學習方法
網路這東西就是乙個靠實踐的東西,只靠看書是不行的。當年在學校還上過史美林教授 張公忠教授所講的計算機網路體系結構課,用的是tanabaum寫的那本,考試還得了九十多分,可實際還是連tcp和udp有什麼區別都分不清,就是死記背,到畢業的時候基本上是忘光了,工作後等於重新來過。學網路協議剛開始也是看書,...