抓包原理

1、預備知識

1,集線器(hub)

它屬於純硬件網絡底層設備,工做於OSI參考模型的第一層,即物理層。不解析。html

集線器只對信號進行整形、放大後再重發,不進行編碼,轉發的時候是以廣播的方式進行的,即它要向某節點發送數據時,不是直接把數據發送到目的節點,而是把數據包發送到與集線器相連的全部節點前端

2,交換機

交換機工做於OSI參考模型的第二層,即數據鏈路層。它能夠解析到MAC地址。算法

交換機是針對共享工做模式(例hub)的弱點而推出的。交換機擁有一條高帶寬的背部總線和內部交換矩陣。交換機的全部的端口都掛接在這條背部總線上,當控制電路收到數據包之後,處理端口會查找內存中的地址對照表(ARP表)以肯定目的MAC(網卡的硬件地址)的NIC(網卡)掛接在哪一個端口上,經過內部交換矩陣迅速將數據包傳送到目的端口。目的MAC若不存在,交換機才廣播(ARP協議)到全部的端口,接收端口迴應後交換機會「學習」新的地址,並把它添加入內部地址表中。chrome

3,路由器

路由器工做於OSI參考模型的第三層,即數據網絡層。它能夠解析到IP。編程

提供了路由與轉送兩種重要機制,能夠決定數據包歷來源端到目的端所通過的路由路徑(即兩個網絡或多個網絡間轉發數據包),這個過程稱爲路由;將路由器輸入端的數據包移送至適當的路由器輸出端(在路由器內部進行),這稱爲轉送。c#

選擇最佳路徑的策略即路由算法是路由器的關鍵所在。爲了完成這項工做,在路由器中保存着各類傳輸路徑的相關數據——路徑表(Routing Table),供路由選擇時使用。路徑表中保存着子網的標誌信息、網上路由器的個數和下一個路由器的名字等內容。路徑表能夠是由系統管理員固定設置好的。windows

靜態路由表:由系統管理員事先設置好固定的路徑表稱之爲靜態(static)路徑表。
動態路由表:動態(Dynamic)路徑表是路由器根據網絡系統的運行狀況而自動調整的路徑表。

4,網卡

網卡收到傳輸來的數據,網卡內的單片程序先接收數據頭的目的MAC地址,根據計算機上的網卡驅動程序設置的接收模式判斷該不應接收,認爲該接收就在接收後產生中斷信號通知CPU,認爲不應接收就丟棄無論,因此不應接收的數據網卡就截斷了,計算機根本就不知道。CPU獲得中斷信號產生中斷,操做系統就根據網卡驅動程序中設置的網卡中斷程序地址調用驅動程序接收數據,驅動程序接收數據後放入信號堆棧讓操做系統處理。瀏覽器

5,ARP欺騙

https://blog.csdn.net/jung_zhang/article/details/52100383tomcat

2、嗅探器原理

  • 收集:從網卡上收集二進制信息(將網卡設置成混雜模式完成抓包)
  • 轉換:將捕獲的二進制信息轉換成可讀形式。
  • 分析:對捕獲和轉換後的數據進行分析。

前提,要捕獲的東西必須是要物理信號能收到的報文信息。顯然只要通知網卡接收其收到的全部包(通常叫作混雜promiscuous模式:指網絡上的全部設備都對總線上傳送的數據進行偵聽,並不只僅是它們本身的數據。),在HUB下就能接收到這個網段的全部包,可是交換機下就只能是本身的包加上廣播包。服務器

要想在交換機下接收別人的包,那就要讓其發往你的機器所在端口。交換機記住一個口的MAC是經過接收來自這個口的數據後並記住其源MAC,就像一個機器的IP與MAC對應的ARP列表,交換機維護一個物理口與MAC的表,因此能夠欺騙交換機的。能夠發一個包設置源MAC是你想接收的機器的MAC,那麼交換機就把你機器的網線插的物理口與那個MAC對應起來了,之後發給那個MAC的包就發往你的網線插口了,也就是你的網卡能夠Sniffer到了。注意這物理口與MAC的表與機器的ARP表同樣是動態刷新的,那機器發包後交換HUB就又記住他的口了,因此其實是兩個在爭,這隻能應用在只要收聽少許包就能夠的場合。

內部網基於IP的通訊能夠用ARP欺騙別人機器讓其發送給你的機器,若是要想不影響原來兩方的通訊,能夠欺騙兩方,讓其都發給你的機器再由你的機器轉發,至關於作中間人,這用ARP加上編程很容易實現。而且如今不少設備支持遠程管理,有不少交換機能夠設置一個口監聽別的口,不過這就要管理權限了。

 3、抓包工具

1,wireshark

wireshark是捕獲機器上的某一塊網卡的網絡包,當你的機器上有多塊網卡的時候,你須要選擇一個網卡。

使用方法:https://blog.csdn.net/zjy900507/article/details/79303359

 2,Fiddler

Fiddler和wireshark工做原理不同。fiddler的實現原理是以代理服務器的方式工做,代理就是在客戶端和服務器之間設置一道關卡,客戶端先將請求數據發送出去後,代理服務器會將數據包進行攔截,代理服務器再冒充客戶端發送數據到服務器;同理,服務器將響應數據返回,代理服務器也會將數據攔截,再返回給客戶端。

Fiddler是一個http協議調試代理工具,即只是針對HTTP協議的(工做在OSI參考模型的應用層),而wireshark是針對幾乎全部協議的。

瀏覽器與服務器之間經過創建TCP鏈接以HTTP協議進行通訊,瀏覽器默認經過本身發送HTTP請求到服務器。 而Fiddler是c#開發(微軟出品,主要做者Eric Lawrence)的http代理服務器,fiddler工做於七層中的應用層,可以捕獲到經過的http(s)請求。(瀏覽器 < -> Fiddler < -> 服務器)

啓動Fiddler以後會監聽8888端口(默認8888,能夠修改)。

一個實驗轉自:https://blog.csdn.net/gscaiyucheng/article/details/26938019

1. 在啓動fiddler以前端口8888的狀態

命令:netstat -ano|findstr 「8888″

表示查不到佔用狀態

2. 啓動fiddler以後:

在啓動fiddelr以後能夠發現8888端口被5256線程給監聽

能夠查看到5256線程爲fiddler程序:

命令:tasklist |findstr 「5256″

3.而後啓動Chrome瀏覽器,瀏覽網頁就會發現:

5658進程與fiddler創建了tcp鏈接,發送端爲5658進程佔用3258端口,接收端爲fiddler(5256)佔用的8888端口

命令:netstat -ano|findstr 「8888″

查看5568進程,爲chrome程序

命令:tasklist |findstr 「5568″

同理,打開Firefox瀏覽器,瀏覽網頁也是如此:

7836進程與fiddler創建了tcp鏈接,發送端爲7836進程佔用3294端口,接收端爲fiddler(5256)佔用的8888端口

命令:netstat -ano|findstr 「8888″

查看7836進程,爲firefox程序:

命令:tasklist |findstr 「7836″

ps:要注意的firefox中須要手工將代理設置成fiddler:127.0.0.1:8888,由於Firefox不是使用系統默認的winINET(不過剛親自試驗發現安裝fiddler後,firefox會提示安裝fiddler插件,以後就不須要在手動配置了,若是不能監聽火狐,就手動配置一下吧~)

因此,fiddler做爲一個代理服務器,跟瀏覽器創建鏈接以後,瀏覽器像目標服務器發送的請求都會通過fiddler代理,

因此fiddler能夠捕獲到http(s)請求,從而能夠解釋、分析、甚至重寫發出去的http(s)請求。

使用方法:https://www.cnblogs.com/miantest/p/7289694.html

補充一個小知識:

1)127.0.0.1是回送地址,指本地機,通常用來測試使用。回送地址是本機回送地址(Loopback Address),即主機IP堆棧內部的IP地址,主要用於網絡軟件測試以及本地機進程間通訊,不管什麼程序,一旦使用回送地址發送數據,協議軟件當即返回,不進行任何網絡傳輸。

2)localhost是本地DNS解析的127.0.0.1的域名,這個你打開本機的hosts文件就能夠看到,通常位於c:\windows\system32\driver\etc下,通常在最後有這麼一行:127.0.0.1 localhost。咱們在本機上安裝tomcat默認即監聽8080端口,咱們訪問tomcat裏的網頁例如http://localhost:8080/login/to_login。

 

參考:

1,百度百科

2,《Wireshark 數據包分析實戰(第二版)》

相關文章
相關標籤/搜索