首先仍是要提醒各位同窗,在學習本章以前,請認真的學習TCP/IP體系結構的相關知識,本系列教程在這方面只會淺嘗輒止。html
本節簡單概述下OSI七層模型和TCP/IP四層模型之間的對應關係,最後是本章教程須要的幾個核心Python模塊。python
國際標準化組織(ISO)在1978年提出了「開放系統互聯參考模型」,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它將計算機網絡體系結構的通訊協議劃分爲七層,自下而上依次爲:物理層(Physics Layer)、數據鏈路層(Data Link Layer)、網絡層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表示層(Presentation Layer)、應用層(Application Layer)。其中第四層完成數據傳送服務,上面三層面向用戶。linux
除了標準的OSI七層模型之外,常見的網絡層次劃分還有TCP/IP四層協議以及TCP/IP五層協議,它們之間的對應關係以下圖所示:web
圖2編程
四層模型和五層是現實世界中真實存在的,本系列教程遵循4層模型來寫做。本章內容集中在網絡接口層,實際對應到5層的數據鏈路層,由於硬件自己不是咱們要關心的內容。以後的各章,都會出現這張圖,但願引發你的重視。緩存
在TCP/IP協議族中,數據鏈路層主要有三個目的:微信
1)爲IP模塊發送和接收數據網絡
2)爲ARP模塊發送ARP請求和接收ARP應答app
3)爲RARP模塊發送RARP請求和接收RARP應答tcp
這裏須要強調一點的是,arp和rarp協議咱們將其劃分在數據鏈路層,若是你把它當成網絡層協議也無所謂,但願讀者不要在這個問題上爭論。提到數據傳輸,必需要談咱們的網絡環境,就我本人目前能接觸到的網絡基本都是以太網。
以太網(Ether-net)是指 DEC 公司、Intel 公司和 Xerox 公司在 1982 年聯合公佈的一個標準,這個標準裏面使用了一種稱做 CSMA/CD 的接入方法。而 IEEE802 提供的標準集 802.3(還有一部分定義到了 802.2 中)也提供了一個 CSMA/CD 的標準。
這兩個標準稍有不一樣,所以鏈路層數據幀的的封裝格式也有所不一樣(數據幀中的地址爲 MAC 地址):
圖3
Scapy的是一個強大的交互式數據包處理程序(使用python編寫)。它可以僞造或者解碼大量的網絡協議數據包,可以發送、捕捉、匹配請求和回覆包等等。它能夠很容易地處理一些典型操做,好比端口掃描,tracerouting,探測,單元 測試,攻擊或網絡發現(可替代hping,NMAP,arpspoof,ARP-SK,arping,tcpdump,tethereal,P0F等)。 最重要的他還有不少更優秀的特性——發送無效數據幀、注入修改的802.11數據幀、在WEP上解碼加密通道(VOIP)、ARP緩存攻擊(VLAN) 等,這也是其餘工具沒法處理完成的。
scapy在kali linux 2.0 中默認已經被安裝,若是你的系統中沒有須要手動安裝一下,下面是軟件包安裝的簡單說明。
使用pip安裝scapy。
root@kali:/home/pycharm# pip install scapy
圖4
Scapy能夠單獨使用,也能夠在python中調用。
瞭解Scapy的基本使用和支持的方法,首先咱們從終端啓動scapy,進入交互模式。
圖5
ls()顯示scapy支持的全部協議。
ls()函數的參數還能夠是上面支持的協議中的任意一個的類型屬性,也能夠是任何一個具體的數據包,如ls(TCP),ls(newpacket)等。
lsc()列出scapy支持的全部的命令。
conf:顯示全部的配置信息。conf變量保存了scapy的配置信息。
help()顯示某一命令的使用幫助,如help(sniff)。
show()顯示指定數據包的詳細信息。例如,這裏咱們先建立一個IP數據包,而後調用show方法。
sprintf()輸出某一層某個參數的取值,若是不存在就輸出」??」,具體的format格式是:%[[fmt][r],][layer[:nb].]field%,詳細的使用參考<Security Power Tools>的146頁。
%[[fmt][r],][layer[:nb].]field%
layer:協議層的名字,如Ether、IP、Dot11、TCP等。
filed:須要顯示的參數。
nb:當有兩個協議層有相同的參數名時,nb用於到達你想要的協議層。
r:是一個標誌。當使用r標誌時,意味着顯示的是參數的原始值。例如,TCP標誌中使用人類可閱讀的字符串’SA’表示SYN和ACK標誌,而其原始值是18.
我以前發過一篇文章《Python網絡數據監聽和過濾》,講了python中數據包解析,Scapy數據監聽的用法,你們能夠做爲參考。
須要準備的基礎知識不能全面羅列,你須要學習的內容和你我的目前的積累有關。但願各位同窗不要放棄對基礎知識的學習。
第3.1節《ARP緩存投毒攻擊》已經在微信訂閱號搶先發布,心急的同窗進入訂閱號(二維碼在下方),從菜單「專欄」—>」Python黑帽編程」進入便可。
查看完整系列教程,請關注個人微信訂閱號(xuanhun521,下方二維碼),回覆「python」。問題討論請加qq羣:Hacking (1羣):303242737 Hacking (2羣):147098303。