摘 學習網路程式設計方法

2021-07-01 20:18:52 字數 1618 閱讀 4775

網路這東西就是乙個靠實踐的東西,只靠看書是不行的。當年在學校還上過史美林教授/張公忠教授所講的計算機網路體系結構課,用的是 tanabaum寫的那本,考試還得了九十多分,可實際還是連tcp和udp有什麼區別都分不清,就是死記硬背,到畢業的時候基本上是忘光了。

工作後等於重新來過。上班了要在linux做一些底層的網路處理,不得不從頭來學linux和網路,程式設計部分主要看richard stevens的那幾本書:

apue、unp、tcp/ip illustraion

學網路協議剛開始也是看書,但看了之後沒多少印象,那些東西靠死記真是沒法記的,後來找到乙個好辦法,就是自己寫個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頭有哪些字段還是一下就可以說得出來,對理解各種網路攻擊原理從而進行防範更是有幫助,我覺得對我來說這種方法是很有效,如果哪位覺得有更有效的學習方法,可以共同交流一下。

python學習 網路程式設計(一)

udp的接收和傳送資料 udp的傳送資料 如下 import socket def main 建立套接字 udp socket socket.socket socket.af inet,socket.sock dgram 傳送資料 send data input 請輸入您要傳送的資訊 udp ip ...

Java學習 網路程式設計知識

一 網路程式設計概述 計算機網路之間以何種規則進行通訊,就是網路模型研究問題。網路模型一般是指osi open system interconnection開放系統互連 七層參考模型,tcp ip四層參考模型 主機至網路層 物理層 資料鏈路層 網際層 傳輸層 應用層 應用層 表示層 會話層 二 協議...

深入學習網路程式設計

目錄說明 p6 socket程式設計一 什麼是socket ipv4套接字位址結構 網路位元組序 位元組序轉換函式 位址轉換函式 套接字型別 p7 socket程式設計二 tcp客戶 服務端模型 回射客戶 伺服器 socket,bind,listen,accept,connect p8 socket...