原创 Linux 網絡編程之TCP(上)

1.TCP通信流程 TCP網絡編程主要是用套接字來實現網絡服務器與客戶端通信,一個標準的套接字是由協議族,IP地址與端口號組成,它是TCP服務器與客戶端通信的基礎, TCP的服務器端流程: (1)建立套接字(socket) (2)將地址結

原创 Linux原始套接字之ARP協議實現

1. ARP協議介紹  ARP(AddressResolutionProtocol)地址解析協議用於將計算機的網絡地址(IP地址32位)轉化爲物理地址(MAC地址48位)[RFC826].ARP協議是屬於鏈路層的協議,在以太網中的數據幀從

原创 Linux open系統調用流程(3)

1. 閒言少敘,繼續分析__link_path_walk函數: /* * Name resolution. * This is the basic name resolution function, turning a pathna

原创 Linux VFS-通用文件模型相關對象

1.概述 在Linux系統,爲了隱藏具體文件系統的實現細節,提供了一個虛擬文件系統,VFS支持的文件系統可以劃分爲以下三個類型: (1)基於磁盤的文件系統Ext2, Ms-Dos (2)網絡文件系統,可以通過網絡訪問其它文件系統上的內容,

原创 Linux open系統調用流程(2)

1. 書結上文,繼續分析do_filp_open函數,其傳入4個參數: dfd:相對目錄 tmp:文件路徑名,例如要打開/usr/src/kernels/linux-2.6.30 flags:打開標誌 mode:打開模式 /* * N

原创 Linux網絡編程之ICMP洪水攻擊

1. ICMP洪水攻擊原理 ICMP洪水攻擊基於PING協議,通過發送大量的PING包來攻擊目標主機,主要攻擊有3類: (1)直接洪水攻擊,即通過多線程的方式一次性發送大量的ICMP包,其缺點是容易暴露,對方知道你的IP,可以直接屏蔽 (

原创 Linux原始套接字之sniffer部分實現

1.概述  通常在同一個網段的所有網絡接口都有訪問在物理媒體上傳輸的所有數據的能力,而每個網絡接口都還應該有一個硬件地址,該硬件地址不同於網絡中存在的其他網絡接口的硬件地址,同時,每個網絡至少還要一個廣播地址。(代表所有的接口地址),在正

原创 C語言定義和聲明區別

1. 變量的定義和聲明 C語言定義和聲明分爲變量的定義和聲明和函數的定義和聲明。由於,函數是具有全局外部特性,並且函數的定義和聲明區別是很明顯的。其聲明需要返回值類型,函數名和參數列表。而函數的定義需要函數體。所以,很容易區別函數的聲明和

原创 Linux VFS 之mount系統調用

1. 我們知道,在對文件的打開,讀和寫操作之前,必須掛載文件系統。那麼,內核如何掛載文件系統,換句話說,在掛載文件系統時內核都做了哪些事情。這是本文討論的事情。在掛載文件系統之前,必須格式化文件系統類型,

原创 Linux網絡編程之原始套接字-ping協議實現

1.概述 PING協議是用來檢驗本地主機與遠程主機是否連接,發送的是ICMP ECHO_REQUEST包。普通的套接字是基於TCP或者是UDP的,無法發送ICMP包,所以必須用原始套接字來實現。PING協議的客戶端類型值爲8,代碼值爲0,

原创 Linux 網絡編程之原始套接字

1. 介紹 前面主要介紹了流式套接字(SOCK_STREAM),數據報套接字(SOCK_DGRAM),基本上能夠滿足TCP與UDP的應用。但一些問題,我們仍然無法解決,如: (1)發送一個自定義的IP包 (2)發送ICMP包 (3)偵聽網

原创 C語言頭文件詳解

1. GCC編譯時問題 在由多個C語言文件組成的程序中,對於頭文件的管理非常重要。頭文件提供給用戶一個接口,用戶從中可以知道可以調用哪些函數,實現哪些功能,而不必去管這些功能的具體實現。因此,寫好頭文件是非常關鍵的。在頭文件中,最常見的

原创 Linux open系統調用流程(1)

1.概述 我們知道,Linux把設備看成特殊的文件,稱爲設備文件。在操作文件之前,首先必須打開文件,打開文件的函數是通過open系統調用來實現的。而簡單的文件打開操作,在Linux內核實現卻是非常的複雜。open函數打開原理就是將進程fi

原创 Linux網絡編程之UDP洪水攻擊

1.概述 UDP攻擊向目標主機的UDP端口發送大量的UDP報文,造成目標主機的端口堵塞,達到攻擊的目的。建立多線程,利用原始套接字封裝UDP與IP的首部,然後發送UDP報文,攻擊目標主機. 2. UDP攻擊實例 #include <std

原创 Linux網絡編程之多播

1.概念 單播是用於兩個主機之間傳送數據,廣播是一個主機對局域網內的所有主機發送數據。而多播,又稱爲組播,它是對一組特定的主機通信。將網絡上同一類型業務邏輯上分組,只和組內的成員通信,其它主機沒有加入組則不能通信。與單播相同的是,組播允許