一、預備知識
1,集線器(hub)
它屬於純硬件網絡底層設備,工作於OSI參考模型的第一層,即物理層。不解析。
集線器只對信號進行整形、放大后再重發,不進行編碼,轉發的時候是以廣播的方式進行的,即它要向某節點發送數據時,不是直接把數據發送到目的節點,而是把數據包發送到與集線器相連的所有節點。
2,交換機
交換機工作於OSI參考模型的第二層,即數據鏈路層。它可以解析到MAC地址。
交換機是針對共享工作模式(例hub)的弱點而推出的。交換機擁有一條高帶寬的背部總線和內部交換矩陣。交換機的所有的端口都掛接在這條背部總線上,當控制電路收到數據包以后,處理端口會查找內存中的地址對照表(ARP表)以確定目的MAC(網卡的硬件地址)的NIC(網卡)掛接在哪個端口上,通過內部交換矩陣迅速將數據包傳送到目的端口。目的MAC若不存在,交換機才廣播(ARP協議)到所有的端口,接收端口回應后交換機會“學習”新的地址,並把它添加入內部地址表中。
3,路由器
路由器工作於OSI參考模型的第三層,即數據網絡層。它可以解析到IP。
提供了路由與轉送兩種重要機制,可以決定數據包從來源端到目的端所經過的路由路徑(即兩個網絡或多個網絡間轉發數據包),這個過程稱為路由;將路由器輸入端的數據包移送至適當的路由器輸出端(在路由器內部進行),這稱為轉送。
選擇最佳路徑的策略即路由算法是路由器的關鍵所在。為了完成這項工作,在路由器中保存着各種傳輸路徑的相關數據——路徑表(Routing Table),供路由選擇時使用。路徑表中保存着子網的標志信息、網上路由器的個數和下一個路由器的名字等內容。路徑表可以是由系統管理員固定設置好的。
4,網卡
網卡收到傳輸來的數據,網卡內的單片程序先接收數據頭的目的MAC地址,根據計算機上的網卡驅動程序設置的接收模式判斷該不該接收,認為該接收就在接收后產生中斷信號通知CPU,認為不該接收就丟棄不管,所以不該接收的數據網卡就截斷了,計算機根本就不知道。CPU得到中斷信號產生中斷,操作系統就根據網卡驅動程序中設置的網卡中斷程序地址調用驅動程序接收數據,驅動程序接收數據后放入信號堆棧讓操作系統處理。
5,ARP欺騙
https://blog.csdn.net/jung_zhang/article/details/52100383
二、嗅探器原理
- 收集:從網卡上收集二進制信息(將網卡設置成混雜模式完成抓包)
- 轉換:將捕獲的二進制信息轉換成可讀形式。
- 分析:對捕獲和轉換后的數據進行分析。
前提,要捕獲的東西必須是要物理信號能收到的報文信息。顯然只要通知網卡接收其收到的所有包(一般叫做混雜promiscuous模式:指網絡上的所有設備都對總線上傳送的數據進行偵聽,並不僅僅是它們自己的數據。),在HUB下就能接收到這個網段的所有包,但是交換機下就只能是自己的包加上廣播包。
要想在交換機下接收別人的包,那就要讓其發往你的機器所在端口。交換機記住一個口的MAC是通過接收來自這個口的數據后並記住其源MAC,就像一個機器的IP與MAC對應的ARP列表,交換機維護一個物理口與MAC的表,所以可以欺騙交換機的。可以發一個包設置源MAC是你想接收的機器的MAC,那么交換機就把你機器的網線插的物理口與那個MAC對應起來了,以后發給那個MAC的包就發往你的網線插口了,也就是你的網卡可以Sniffer到了。注意這物理口與MAC的表與機器的ARP表一樣是動態刷新的,那機器發包后交換HUB就又記住他的口了,所以實際上是兩個在爭,這只能應用在只要收聽少量包就可以的場合。
內部網基於IP的通信可以用ARP欺騙別人機器讓其發送給你的機器,如果要想不影響原來兩方的通信,可以欺騙兩方,讓其都發給你的機器再由你的機器轉發,相當於做中間人,這用ARP加上編程很容易實現。並且現在很多設備支持遠程管理,有很多交換機可以設置一個口監聽別的口,不過這就要管理權限了。
三、抓包工具
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 數據包分析實戰(第二版)》