日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

计算机网络实验(Wireshark 抓包工具使用、WinPcap 编程、协议分析流量统计程序的编写)

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机网络实验(Wireshark 抓包工具使用、WinPcap 编程、协议分析流量统计程序的编写) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實驗一:Wireshark 抓包工具使用

一、實驗目的

  • 學習 Wireshark 抓包工具的使用
  • 了解 Wireshark 抓包工具的功能
  • 通過學習,進一步理解協議及網絡體系結構思想
  • 二、實驗內容

    使用 Wireshark,并學習使用它進行網絡包分析。

    三、實驗原理

    Wireshark 是網絡包分析工具;網絡包分析工具的主要作用是嘗試捕獲網絡包,并嘗試顯示包的盡可能詳細的情況。Wireshark 常見的應用如下:

    • 網絡管理員用來解決網絡問題
    • 網絡安全工程師用來檢測安全隱患
    • 開發人員用來測試協議執行情況

    這里,我們通過 Wireshark 來學習常見的網絡協議。

    四、實驗過程

    包含了從安裝 Wireshark 開始到使用 Wireshark 觀察一些現象的過程:

    4.1 下載 Wireshark

    Wireshark 的官方網站是:https://www.wireshark.org/,下載地址是 https://2.na.dl.wireshark.org/win64/Wireshark-win64-3.4.6.exe

    4.2 準備工作

    再 Powershell 中輸入 ipconfig 查詢本機的 IP 信息:

    在同局域網下打開另一臺設備,啟動一個服務器:

    查看局域網內的這臺設備的 IP 地址:

    可以得到的信息匯總如下:

    機器IP(v4) 地址子網掩碼默認網關
    主機192.168.3.2255.255.255.0192.168.3.1
    服務器192.168.3.71255.255.255.0192.168.3.1

    因為只需要這些信息,所以直接在 Powershell 中獲取;需要更詳細的信息也可以通過網絡適配器選項中來獲得。接下來使用 Wireshark 捕獲兩者之間的通訊數據包,并且進行分析。

    4.3 啟動 Wireshark

    首先需要先選擇監聽的網絡設備:

    然后,就可以開始捕獲以太網的通信數據包:

    接下來,可以進行捕獲通過它的特定報文,并且分析內容。

    4.4 TCP 握手

    瀏覽器訪問上面查詢到的服務器的地址 http://192.168.3.71,并且在 Wireshark 中設定限制條件(過濾器) ip.src == 192.168.3.71 or ip.dst == 192.168.3.71 來只捕獲來自這兩個 IP 地址之間的通信。

    高亮的部分就是 TCP 的三次握手。

    4.5 TCP 報文分析示例

    這是上述三次握手過程中的第二次握手的報文的詳細信息:

    項目信息說明
    源端口80服務器的 HTTP 默認端口,服務確實開在 80 端口上
    目的端口61577用戶瀏覽器當前開啟的用于和服務器通信的端口
    TCP 段長度0該報文不攜帶數據
    Sequence 數字0Seq=0
    Acknowledge 數字1期望收到的下一個報文滿足 Seq=1
    首部長度32 bytes (8)8 * 4B = 32 bytes
    標志0x012SYN 和 ACK 位為 1
    校驗和0x5426校驗和為 0x5426,未驗證

    http://www.biyezuopin.vip

    4.6 HTTP 報文分析

    在 TCP 握手完成之后,服務器將使用 HTTP 協議傳輸數據到瀏覽器;我們在緊接著握手完成后面的位置找到了使用 HTTP 協議傳輸的數據包;可以打開查看其詳細信息:

    內容信息
    GET / HTTP/1.1操作類型:GET;遵循了 HTTP 1.1 版本的協議
    Host: 192.168.3.71主機名:192.168.3.71;當綁定域名的場合下會是主機的域名
    Connection: keep-alive連接類型是保持持久連接
    User-Agent: ...用戶的客戶端信息;這里有個 Mozilla/5.0 (Windows NT 10.0 ...) 說明是運行在 Windows 10 上的火狐瀏覽器
    …………

    HTTP 頭能塞的東西還挺多的,這里就不全部說明了;當然,這里所包含的項目也未必完整。

    五、思考題

    網絡工程師能通過 Wireshark 做哪些工作?

    • 檢查網絡協議的執行情況
    • 排查網絡故障,解決網絡問題
    • 網絡攻防,檢測網絡安全隱患

    實驗二:WinPcap 編程

    系統環境開發環境
    Windows 10 Pro 21H1CLion 2021.1; CMake 3.19; tdm-gcc 9.3; NpCap SDK 1.07

    http://www.biyezuopin.vip

    一、實驗目的

    • 了解 NpCap 架構和運行邏輯
    • 學習使用 NpCap SDK 進行編程

    二、實驗內容

    通過學習 NpCap SDK,編寫一個網絡抓包程序

    三、實驗原理

    本實驗主要基于 NpCap 完成,所以這里主要是關于 NpCap 的介紹:

    3.1 NpCap 概述

    WinPcap 是一個基于 Win32 平臺的,用于捕獲網絡數據包并進行分析的開源庫;在 Linux 上也有對應的 LibPcap;目前 WinPcap 已經處于無人維護的狀態,對于 Windows 10 有更新的且目前有人維護的開源項目 NpCap。

    大多數網絡應用程序通過被廣泛使用的操作系統元件來訪問網絡,比如 sockets——這是一種簡單的實現方式,因為操作系統已經妥善處理了底層具體實現細節(比如協議處理,封裝數據包等等工作),并且提供了一個與讀寫文件類似的,令人熟悉的接口;但是有些時候,這種“簡單的實現方式”并不能滿足需求,因為有些應用程序需要直接訪問網絡中的數據包:也就是說原始數據包——即沒有被操作系統利用網絡協議處理過的數據包。而 WinPcap/NpCap 則為 Win32 應用程序提供了這樣的接口:

    • 捕獲原始數據包;無論它是發往某臺機器的,還是在其他設備(共享媒介)上進行交換的
    • 在數據包發送給某應用程序前,根據指定的規則過濾數據包
    • 將原始數據包通過網絡發送出去
    • 收集并統計網絡流量信息

    SDK 提供的這些功能需要借助運行在 Win32 內核中的網絡設備驅動程序來實現;在安裝完成驅動之后,SDK 將這些功能作為一個接口表現出來以供使用。

    3.2 要使用的接口

    以下介紹了實現后文提到的 demo 所需要使用的 NpCap API 的簡單介紹:

    3.2.1 pcap_findalldevs

    NpCap 提供了 pcap_findalldevs_ex 和 pcap_findalldevs 函數來獲取計算機上的網絡接口設備的列表;此函數會為傳入的 pcap_if_t 賦值——該類型是一個表示了設備列表的鏈表頭;每一個這樣的節點都包含了 name 和 description 域來描述設備。

    除此之外,pcap_if_t 結構體還包含了一個 pcap_addr 結構體;后者包含了一個地址列表、一個掩碼列表、一個廣播地址列表和一個目的地址的列表;此外,pcap_findalldevs_ex 還能返回遠程適配器信息和一個位于所給的本地文件夾的 pcap 文件列表。

    3.2.2 pcap_open

    用來打開一個適配器,實際調用的是 pcap_open_live;它接受五個參數:

    • name:適配器的名稱(GUID)
    • snaplen:制定要捕獲數據包中的哪些部分。在一些操作系統中 (比如 xBSD 和 Win32),驅動可以被配置成只捕獲數據包的初始化部分:這樣可以減少應用程序間復制數據的量,從而提高捕獲效率;本次實驗中,將值定為 65535,比能遇到的最大的 MTU 還要大,因此總能收到完整的數據包。
    • flags:主要的意義是其中包含的混雜模式開關;一般情況下,適配器只接收發給它自己的數據包, 而那些在其他機器之間通訊的數據包,將會被丟棄。但混雜模式將會捕獲所有的數據包——因為我們需要捕獲其他適配器的數據包,所以需要打開這個開關。
    • to_ms:指定讀取數據的超時時間,以毫秒計;在適配器上使用其他 API 進行讀取操作的時候,這些函數會在這里設定的時間內響應——即使沒有數據包或者捕獲失敗了;在統計模式下,to_ms 還可以用來定義統計的時間間隔:設置為 0 說明沒有超時——如果沒有數據包到達,則永遠不返回;對應的還有 -1:讀操作立刻返回。
    • errbuf:用于存儲錯誤信息字符串的緩沖區

    該函數返回一個 pcap_t 類型的 handle。

    3.2.3 pcap_loop

    API 函數 pcap_loop 和 pcap_dispatch 都用來在打開的適配器中捕獲數據包;但是前者會已知捕獲直到捕獲到的數據包數量達到要求數量,而后者在到達了前面 API 設定的超時時間之后就會返回(盡管這得不到保證);前者會在一小段時間內阻塞網絡的應用,故一般項目都會使用后者作為讀取數據包的函數;雖然在本次實驗中,使用前者就夠了。

    這兩個函數都有一個回調函數;這個回調函數會在這兩個函數捕獲到數據包的時候被調用,用來處理捕獲到的數據包;這個回調函數需要遵頊特定的格式。但是需要注意的是我們無法發現 CRC 冗余校驗碼——因為幀到達適配器之后,會經過校驗確認的過程;這個過程成功,則適配器會刪除 CRC;否則,大多數適配器會刪除整個包,因此無法被 NpCap 確認到。

    3.2.4 pcap_datalink

    用于對 MAC 層進行了檢測,以確保在處理一個以太網絡,確保 MAC 首部是 14 位的。IP 數據包的首部就位于 MAC 首部的后面,將從 IP 數據包的首部解析到源 IP 地址和目的 IP 地址。

    3.2.5 pcap_compile & pcap_setfilter

    用來設置過濾器,以避免處理一些無用的包,提高包處理的效率。在本次實驗中我們需要將過濾器字符串設置成 ip and udp,使得我們傳入的回調只處理基于 IPv4 的 UDP 數據包;大大簡化了解析過程和回調函數的調用次數。

    3.3 其他的補充

    處理 UDP 數據包的首部時存在一些困難:因為 IP 數據包的首部的長度并不是固定的,但是可以通過 IP 數據包的 length 域來得到它的長度;一旦知道了 UDP 首部的位置,就能解析到源端口和目的端口。

    四、實驗過程

    從安裝 NpCap 到運行 NpCap 示例程序的全部過程;

    4.1 安裝 NpCap

    NpCap 是 WinPcap for Windows 10;它的官方下載頁面是 Npcap: Windows Packet Capture Library & Driver (nmap.org);在這里我們需要下載:

    • NpCap 內核驅動:Npcap 1.31 installer
    • NpCap SDK 文件:Npcap SDK 1.07

    安裝完成驅動后,再在 IDE 中為項目配置導入 NpCap SDK 文件。NpCap SDK 文件包中包括了使用 NpCap 實現的基本功能的 demo。

    4.2 使用 NpCap 的功能

    項目的文件結構如下:

    CMake target: if_list udp_dump basic_dump_ex (root) ├ module │ └ (NpCap Library files) NpCap SDK 庫文件 ├ src │ ├ basic_dump_ex.c 目標 basic_dump_ex 的源文件 │ ├ if_list.c 目標 if_list 的源文件 │ └ udp_dump.c 目標 udp_dump 的源文件 └ CMakeList.txt CMake 項目定義文件

    這些使用 NpCap 功能的 demo 的實現代碼都位于:https://github.com/ma-hunter/cn_exp

    五、實驗結果

    上述代碼包括的,使用 NpCap 實現的幾項基本功能的運行結果(非截圖)。

    5.1 讀取網絡設備列表

    使用 CMake,構建并運行上述項目中的目標 if_list:

    "D:\Program Files\JetBrains\Toolbox\apps\CLion\ch-0\211.6693.114\bin\cmake\win\bin\cmake.exe" --build D:\Workspaces\CLion\cn_exp\cmake-build-debug --target if_list -- -j 4 Scanning dependencies of target if_list [ 50%] Building C object CMakeFiles/if_list.dir/src/if_list.c.obj [100%] Linking C executable if_list.exe [100%] Built target if_list http://www.biyezuopin.vip 構建已完成

    運行結果如下:

    D:\Workspaces\CLion\cn_exp\cmake-build-debug\if_list.exe \Device\NPF_{5C8B26D4-9439-4304-B8FB-48A81CB33CF9}Description: WAN Miniport (Network Monitor)Loopback: no\Device\NPF_{C21F9683-BA8A-4AFE-827A-166030BB1466}Description: WAN Miniport (IPv6)Loopback: no\Device\NPF_{1C99E263-4855-4786-97ED-ECAC30A11761}Description: WAN Miniport (IP)Loopback: no\Device\NPF_{1A386F2B-3A3E-49A7-B899-2629C46C4FB3}Description: Hyper-V Virtual Ethernet Adapter #2Loopback: noAddress Family: #23Address Family Name: AF_INET6Address Family: #2Address Family Name: AF_INETAddress: 172.26.112.1Netmask: 0.240.255.255Broadcast Address: 255.31.112.1\Device\NPF_{A30B9DA2-E755-4DF6-8BD4-010B6590B072}Description: Hyper-V Virtual Ethernet AdapterLoopback: noAddress Family: #23Address Family Name: AF_INET6Address Family: #2Address Family Name: AF_INETAddress: 172.26.0.1Netmask: 0.240.255.255Broadcast Address: 255.31.0.1\Device\NPF_{21EAB23F-F3E5-48E0-B370-35B69F40B833}Description: Bluetooth Device (Personal Area Network) #3Loopback: noAddress Family: #23Address Family Name: AF_INET6Address Family: #2Address Family Name: AF_INETAddress: 169.254.62.143Netmask: 0.0.255.255Broadcast Address: 255.255.62.143\Device\NPF_{5CCBE082-6FB3-4754-B27A-3659F98979BE}Description: Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network AdapterLoopback: noAddress Family: #23Address Family Name: AF_INET6Address Family: #2Address Family Name: AF_INETAddress: 169.254.125.212Netmask: 0.0.255.255Broadcast Address: 255.255.125.212\Device\NPF_{E919BE86-5601-4998-B187-2C629DE1F9B9}Description: Microsoft Wi-Fi Direct Virtual Adapter #2Loopback: noAddress Family: #23Address Family Name: AF_INET6Address Family: #2Address Family Name: AF_INETAddress: 169.254.194.126Netmask: 0.0.255.255Broadcast Address: 255.255.194.126\Device\NPF_{FF7337C5-5DA3-4AF4-8C55-5A066C578D65}Description: Microsoft Wi-Fi Direct Virtual AdapterLoopback: noAddress Family: #23Address Family Name: AF_INET6Address Family: #2Address Family Name: AF_INETAddress: 169.254.180.74Netmask: 0.0.255.255Broadcast Address: 255.255.180.74\Device\NPF_{43524049-AA60-4F6E-A89E-8AE5BA1EAA93}Description: Realtek PCIe GbE Family ControllerLoopback: noAddress Family: #23Address Family Name: AF_INET6Address Family: #2Address Family Name: AF_INETAddress: 192.168.3.2Netmask: 0.255.255.255Broadcast Address: 255.168.3.2\Device\NPF_LoopbackDescription: Adapter for loopback traffic captureLoopback: yes進程已結束,退出代碼為 0

    于此同時可以看到控制面板下的網絡適配器頁面;可以看到基本的適配器信息是一致的:

    我們的 demo 輸出的更多是因為包含了一些被操作系統用戶級別隱藏的接口。

    5.2 打開設別并抓包監聽

    使用 CMake,構建并運行上述項目中的目標 basic_dump_ex:

    "D:\Program Files\JetBrains\Toolbox\apps\CLion\ch-0\211.6693.114\bin\cmake\win\bin\cmake.exe" --build D:\Workspaces\CLion\cn_exp\cmake-build-debug --target basic_dump_ex -- -j 4 Scanning dependencies of target basic_dump_ex [ 50%] Building C object CMakeFiles/basic_dump_ex.dir/src/basic_dump_ex.c.obj [100%] Linking C executable basic_dump_ex.exe [100%] Built target basic_dump_ex構建已完成

    運行結果如下:

    D:\Workspaces\CLion\cn_exp\cmake-build-debug\basic_dump_ex.exe 1. \Device\NPF_{5C8B26D4-9439-4304-B8FB-48A81CB33CF9} (WAN Miniport (Network Monitor)) 2. \Device\NPF_{C21F9683-BA8A-4AFE-827A-166030BB1466} (WAN Miniport (IPv6)) 3. \Device\NPF_{1C99E263-4855-4786-97ED-ECAC30A11761} (WAN Miniport (IP)) 4. \Device\NPF_{1A386F2B-3A3E-49A7-B899-2629C46C4FB3} (Hyper-V Virtual Ethernet Adapter #2) 5. \Device\NPF_{A30B9DA2-E755-4DF6-8BD4-010B6590B072} (Hyper-V Virtual Ethernet Adapter) 6. \Device\NPF_{21EAB23F-F3E5-48E0-B370-35B69F40B833} (Bluetooth Device (Personal Area Network) #3) 7. \Device\NPF_{5CCBE082-6FB3-4754-B27A-3659F98979BE} (Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter) 8. \Device\NPF_{E919BE86-5601-4998-B187-2C629DE1F9B9} (Microsoft Wi-Fi Direct Virtual Adapter #2) 9. \Device\NPF_{FF7337C5-5DA3-4AF4-8C55-5A066C578D65} (Microsoft Wi-Fi Direct Virtual Adapter) 10. \Device\NPF_{43524049-AA60-4F6E-A89E-8AE5BA1EAA93} (Realtek PCIe GbE Family Controller) 11. \Device\NPF_Loopback (Adapter for loopback traffic capture) Enter the interface number (1-11):10listening on Realtek PCIe GbE Family Controller... 13:36:31,027242 len:208 13:36:31,068904 len:1071 13:36:31,122063 len:54 13:36:31,423026 len:60 13:36:31,423094 len:54 13:36:31,750427 len:336 13:36:31,750466 len:320 13:36:31,782177 len:66

    程序將會運行到被外部中斷阻止后才會停止運行。

    5.3 捕獲 UDP 包并分析

    使用 CMake,構建并運行上述項目中的目標 basic_dump_ex:

    "D:\Program Files\JetBrains\Toolbox\apps\CLion\ch-0\211.6693.114\bin\cmake\win\bin\cmake.exe" --build D:\Workspaces\CLion\cn_exp\cmake-build-debug --target udp_dump -- -j 4 [100%] Built target udp_dump構建已完成

    運行結果如下:

    D:\Workspaces\CLion\cn_exp\cmake-build-debug\udp_dump.exe 1. \Device\NPF_{5C8B26D4-9439-4304-B8FB-48A81CB33CF9} (WAN Miniport (Network Monitor)) 2. \Device\NPF_{C21F9683-BA8A-4AFE-827A-166030BB1466} (WAN Miniport (IPv6)) 3. \Device\NPF_{1C99E263-4855-4786-97ED-ECAC30A11761} (WAN Miniport (IP)) 4. \Device\NPF_{1A386F2B-3A3E-49A7-B899-2629C46C4FB3} (Hyper-V Virtual Ethernet Adapter #2) 5. \Device\NPF_{A30B9DA2-E755-4DF6-8BD4-010B6590B072} (Hyper-V Virtual Ethernet Adapter) 6. \Device\NPF_{21EAB23F-F3E5-48E0-B370-35B69F40B833} (Bluetooth Device (Personal Area Network) #3) 7. \Device\NPF_{5CCBE082-6FB3-4754-B27A-3659F98979BE} (Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter) 8. \Device\NPF_{E919BE86-5601-4998-B187-2C629DE1F9B9} (Microsoft Wi-Fi Direct Virtual Adapter #2) 9. \Device\NPF_{FF7337C5-5DA3-4AF4-8C55-5A066C578D65} (Microsoft Wi-Fi Direct Virtual Adapter) 10. \Device\NPF_{43524049-AA60-4F6E-A89E-8AE5BA1EAA93} (Realtek PCIe GbE Family Controller) 11. \Device\NPF_Loopback (Adapter for loopback traffic capture) Enter the interface number (1-11):10listening on Realtek PCIe GbE Family Controller... 13:38:26.314222 len:181 192.168.3.2.7726 -> 180.97.33.12.8829 13:38:26.339699 len:163 180.97.33.12.8829 -> 192.168.3.2.7726 13:38:28.517235 len:361 223.166.151.86.8000 -> 192.168.3.2.4017 13:38:28.517526 len:97 192.168.3.2.4017 -> 223.166.151.86.8000 13:38:29.100916 len:82 192.168.3.2.60173 -> 192.168.3.1.53 13:38:29.151404 len:149 192.168.3.1.53 -> 192.168.3.2.60173 13:38:30.577642 len:129 223.166.151.86.8000 -> 192.168.3.2.4017

    程序將會運行到被外部中斷阻止后才會停止運行。

    六、思考題

    WINPCAP 是否能實現服務質量的控制?

    不能。WinPcap 可以獨立地通過主機協議發送和接受數據,如同 TCP/IP;這就意味著 WinPcap 不能阻止、過濾或操縱同一機器上的其他應用程序的通訊:它僅僅能簡單地“監視”在網絡上傳輸的數據包。所以,它不能提供類似網絡流量控制、服務質量調度和個人防火墻之類的支持,因而不能實現服務質量的控制。

    實驗三:協議分析&流量統計程序的編寫

    系統環境開發環境
    Windows 10 Pro 21H1CLion 2021.1; CMake 3.19; tdm-gcc 9.3; NpCap SDK 1.07

    一、實驗目的

    • 理解協議在通信中的作用,掌握常見 IP 協議;
    • 掌握基于 NpCap 的抓包軟件的開發;
    • 掌握協議解析和流量統計的編程方法;

    二、實驗內容

    利用 NpCap 編寫協議分析工具;輸出抓取的包和協議分析結構,并統計 IP 的流量(即包的數量)。

    功能要求:

  • 利用 NpCap 捕獲數據包,并可根據要求進行數據包過濾。
  • 根據 IP 協議,解析每個數據包的 PCI,展示其在不同網絡層次所使用的協議結構和具體信息。
  • 根據 IP 地址,統計源自該 IP 地址的流量,即捕獲到的數據包的數量。
  • 運行程序后將捕獲的信息輸出到標準輸出流中。

    三、實驗原理

    實驗的設計依據的原理,包括協議的概念和 NpCap 的接口使用邏輯。

    3.1 協議說明

    下面的內容包含了本次實驗所涉及到的協議類型的說明。

    3.1.1 協議棧分析

    因為 TCP/IP 協議采用分層的結構,所以網絡通信時,要傳輸的數據在發送端是一個逐層封裝的過程;而相應地在接收端則是一個逐層分解的過程;如下圖所示:

    在接收端的逐層分解,就是上述封裝的逆過程;

    3.1.2 以太網協議

    以太網 II 格式時一種幀格式,應用最為廣泛,幾乎成為了當前以太網的現行標準;它由 RFC894 定義,如下圖所示:

    3.1.3 IP 協議

    IP 協議是 Internet 的核心協議,它工作在網絡層,提供了不可靠無連接的數據傳送服務;協議格式如圖所示:

    3.1.4 ICMP 協議

    ICMP 的全稱是 Internet 控制信息協議 (Internet Control Message Protocol)。它提供了很多 Internet 的信息描述服務:例如能夠檢測網絡的運行狀況,通知協議有用的網絡狀態信息;ICMP 是基于 IP 協議的,ICMP 協議格式如圖所示:

    3.1.5 TCP 協議

    TCP 協議是基于連接的可靠的協議:它負責發收端的協定,然后保持正確可靠的數據傳輸服務;它在 IP 協議上運行,而 IP 無連接的協議,所以 TCP 豐富了 IP 協議的功能,使它具有可靠的傳輸服務;TCP 協議格式如圖所示:

    可以看到 TCP 報文段結構由以下的部分組成:

    • 源端口:指定了發送端的端口
    • 目的端口:指定了接受端的端口號
    • 序號:指明了段在即將傳輸的段序列中的位置
    • 確認號:規定成功收到段的序列號,確認序號包含發送確認的一端所期望收到的下一個序號
    • TCP 偏移量:指定了段頭的長度。段頭的長度取決與段頭選項字段中設置的選項
    • 保留:指定了一個保留字段,以備將來使用
    • 標志:SYN、ACK、PSH、RST、URG、FIN
      • SYN: 表示同步
      • ACK: 表示確認
      • PSH: 表示盡快的將數據送往接收進程
      • RST: 表示復位連接
      • URG: 表示緊急指針
      • FIN: 表示發送方完成數據發送
    • 窗口:指定關于發送端能傳輸的下一段的大小的指令
    • 校驗和:校驗和包含 TCP 段頭和數據部分,用來校驗段頭和數據部分的可靠性
    • 緊急指針:指明段中包含緊急信息,只有當 U R G 標志置 1 時緊急指針才有效
    • 選項:指定了公認的段大小,時間戳,選項字段的末端,以及指定了選項字段的邊界選項

    TCP 連接的建立和釋放采用了三步握手法,如下圖所示:

    其過程可以描述如下步驟:

  • 主機一發出連接序號為 x(seq=x)
  • 主機二應答接受主機一的連接請求,并聲明自己的序號為 y(seq=y,ACK=x+1)
  • 主機一收到確認后,發送第一個數據 TPDU 并確認主機二的序號(seq=x,ACK=y+1)
  • 至此,整個連接建立過程正常結束,數據傳輸已經正式開始。

    3.1.6 UDP 協議

    用戶數據報協議 UDP 是在 IP 協議上的傳輸層協議,它提供了無連接的協議服務;它在 IP 協議基礎上提供了端口的功能,因此既可讓應用程序之間進行通信了。UDP 協議格式如圖 3.7 所示:

    3.2 協議處理

    NpCap 按照一定的規則提供了 API,和本次實驗相關的邏輯如下:

    3.2.1 NpCap 處理流程

    NpCap 的工作周期可以被描述為如下序列:

    • pcap_findalldevs & pcap_findalldevs_ex:獲得網絡接口設備的列表
    • pcap_open & pcap_dump_open & pcap_open_live:打開設備/打開設備數據包
    • pcap_freealldevs:釋放獲得的設備列表結構所占用的內存
    • pcap_compile & pcap_setfilter:編譯并設置過濾器
    • pcap_loop:根據設定的數量來循環捕獲數據包,并調用指定的回調處理數據包
    • packet_handler:傳入 loop 的回調函數,用來處理被捕獲的數據包
    • pcap_close:關閉 NpCap 句柄(即打開的網絡設備)

    簡單地說,使用 NpCap 獲得網絡接口列表后,我們打開一個設備,并設定循環次數,傳入指定類型的回調函數來處理被捕獲的數據包,并在程序退出之前關閉設備。

    3.2.2 回調函數設計

    因為上述協議棧分析中提到了,接收端分析包的內容就是一個逆封裝的過程,所以我們可以采用逐層遞歸的方法來設計我們的回調函數;基本設計如下:

    • (pkt):用來傳入 NpCap 循環的,幀處理函數
    • (ethernet):用來處理以太網協議的部分
    • (ipv4) & (ipv6) & (arp):處理 IPv4、IPv6、ARP 協議的報頭
    • (icmp) & (tcp) & (udp):處理 ICMP、TCP、UDP 的報文

    根據設計需求,在判斷上一層的協議類型后,將待處理的報文遞歸給下一層的處理函數即可。

    四、實驗設計

    關于代碼實現方面的設計:

    4.1 項目組成

    項目可以分為 handlers、helpers 和 utils 三個部分組成;

    • utils 包含了可復用的無后效邏輯的實現,盡量避免重復代碼片段
    • handlers 包含了傳給 NpCap 的回調函數以及遞歸下降法實現的逆封裝函數
    • helpers 包含了要實現的額外功能,比如本次實驗中的流量統計

    這三個部分分別使用獨立的頭文件和源文件組成,被 main 模塊引用。

    4.2 預定義

    項目所需要的類型定義都包含在 definitions.h 中;包含了根據協議的組成而設計的報文和報頭的類型定義;因為最后捕獲的數據包是指向一片連續內存塊的指針,這里的定義必須保證指定的內存塊可以完全轉化為對應的包類型才行;因此,需要保證順序和使用的基本數據類型完全和定義符合。

    4.3 項目結構

    最后,整個項目的文件結構如下:

    CMake target: cn_exp (root) ├ module │ └ (NpCap Library files) NpCap SDK 庫文件 ├ include │ ├ definitions.h 預定義的類型聲明 │ ├ handlers.h 遞歸下降法的包處理回調函數的聲明 │ ├ helpers.h 流量統計相關方法的聲明 │ └ utils.h 可復用模塊的函數聲明 ├ src │ ├ utils.cpp 可復用模塊的函數實現 │ ├ helpers.cpp 流量統計相關方法的實現 │ └ handlers.cpp 遞歸下降法的包處理回調函數的實現 ├ CMakeList.txt CMake 項目定義文件 └ main.cpp 主進程文件

    使用 CMake 加載項目,并構建運行 cn_exp 即可生成目標。

    五、實現代碼

    GitHub 鏈接:https://github.com/ma-hunter/cn_exp

    六、實驗結果

    完成實現上文所述的程序后,運行程序,可以得到下面的結果:

    6.1 運行結果

    因為上傳截圖非常的麻煩,這里僅粘貼標準輸出的文本。

    6.1.1 選擇網絡設備
    Hello, World! Hello NpCap! 1.\Device\NPF_{5C8B26D4-9439-4304-B8FB-48A81CB33CF9}WAN Miniport (Network Monitor) 2.\Device\NPF_{C21F9683-BA8A-4AFE-827A-166030BB1466}WAN Miniport (IPv6) 3.\Device\NPF_{1C99E263-4855-4786-97ED-ECAC30A11761}WAN Miniport (IP) 4.\Device\NPF_{1A386F2B-3A3E-49A7-B899-2629C46C4FB3}Hyper-V Virtual Ethernet Adapter #2 5.\Device\NPF_{A30B9DA2-E755-4DF6-8BD4-010B6590B072}Hyper-V Virtual Ethernet Adapter 6.\Device\NPF_{21EAB23F-F3E5-48E0-B370-35B69F40B833}Bluetooth Device (Personal Area Network) #3 7.\Device\NPF_{5CCBE082-6FB3-4754-B27A-3659F98979BE}Realtek RTL8188EU Wireless LAN 802.11n USB 2.0 Network Adapter 8.\Device\NPF_{E919BE86-5601-4998-B187-2C629DE1F9B9}Microsoft Wi-Fi Direct Virtual Adapter #2 9.\Device\NPF_{FF7337C5-5DA3-4AF4-8C55-5A066C578D65}Microsoft Wi-Fi Direct Virtual Adapter 10.\Device\NPF_{43524049-AA60-4F6E-A89E-8AE5BA1EAA93}Realtek PCIe GbE Family Controller 11.\Device\NPF_LoopbackAdapter for loopback traffic capture Enter the interface number (1-11):
    6.1.2 設置監聽循環的次數
    Enter the interface number (1-11):10listening on Realtek PCIe GbE Family Controller.... Please input the num of packets you want to catch(0 for keeping catching):
    6.1.3 TCP 協議解析示例
    Time: 12:54:00, 129446 Length: 60 Type: 0x800 (IPv4) Destination address: c:c:b:6:c:e Source address: 8:a:0:c:6:c Version: 5 Header length: 5 (20B) Type of service: 96 Total length: 40 Identification: 22603 Flags: 0 Fragment offset: 64 (512 B) Protocol: TCP Checksum: 32469 Source IP address: 39.96.132.69 Destination IP address: 192.168.3.2 Source port: 443 Destination port: 55308 Sequence: 744910189 Acknowledgement: 846425137 Data offset: 0 (0 B) Flags: ACK Window: 28927 Checksum: 54318 Urgent pointer: 0
    6.1.4 UDP 協議解析示例
    Time: 12:54:00, 148551 Length: 106 Type: 0x800 (IPv4) Destination address: 8:a:0:c:6:c Source address: c:c:b:6:c:e Version: 5 Header length: 5 (20B) Type of service: 0 Total length: 92 Identification: 21792 Flags: 0 Fragment offset: 0 (0 B) Protocol: UDP Checksum: 0 Source IP address: 192.168.3.2 Destination IP address: 112.32.50.208 Source port: 7726 Destination port: 28078 Length: 72 Checksum: 26356
    6.1.5 流量統計示例
    Flow counts: IP Flow 111.206.210.75 3 112.32.50.208 2 13.107.136.9 53 192.168.3.2 34 39.96.132.69 8

    6.2 構建記錄

    "D:\Program Files\JetBrains\Toolbox\apps\CLion\ch-0\211.6693.114\bin\cmake\win\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - MinGW Makefiles" D:\Workspaces\CLion\cn_exp -- Configuring done -- Generating done -- Build files have been written to: D:/Workspaces/CLion/cn_exp/cmake-build-debug"D:\Program Files\JetBrains\Toolbox\apps\CLion\ch-0\211.6693.114\bin\cmake\win\bin\cmake.exe" --build D:\Workspaces\CLion\cn_exp\cmake-build-debug --target cn_exp -- -j 4 Scanning dependencies of target cn_exp [ 20%] Building CXX object CMakeFiles/cn_exp.dir/src/handlers.cpp.obj [ 40%] Linking CXX executable cn_exp.exe [100%] Built target cn_exp構建已完成

    七、思考題

    應用 WINPCAP 能實現哪些網絡應用?

    • 捕獲原始數據包。不管這個包是發往本地機,還是其他機器之間的交換包
    • 在數據包被發送到應用程序之前,通過用戶定義的規則過濾
    • 向網絡發送原始數據包
    • 對網絡通信量做出統計

    總結

    以上是生活随笔為你收集整理的计算机网络实验(Wireshark 抓包工具使用、WinPcap 编程、协议分析流量统计程序的编写)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产偷自拍视频 | 精品一二三四 | 不用播放器看av | 色婷婷一区二区 | 啄木乌欧美一区二区三区 | 性欧美丰满熟妇xxxx性久久久 | 国产伦精品一区二区三区妓女 | 天天艹夜夜 | 久久久看片 | 国产拍拍视频 | 农村一级毛片 | 免费裸体美女网站 | 尤物在线免费视频 | 黑人超碰| 在线亚洲观看 | 四虎精品欧美一区二区免费 | 麻豆午夜视频 | 神马久久网站 | 日本在线视频播放 | 黄片毛片av| 999国产精品| 亚洲www| 欧美伦理一区二区三区 | 欧美肉大捧一进一出免费视频 | 国产精品成人aaaaa网站 | 泽村玲子在线 | 亚洲精品无吗 | 日产精品久久久久久久蜜臀 | 男女调教视频 | 亚洲免费小视频 | 国产精品中文字幕在线观看 | 91视频这里只有精品 | 国产又粗又硬又长又爽的演员 | 色吧综合| 亚洲中文字幕无码专区 | aaa亚洲精品 | 国产做受69 | 日韩午夜精品视频 | 狠狠干2018 | 三级国产在线 | 久久先锋 | 亚州精品视频 | 国产chinesehd精品 | 91大奶 | 殴美一区二区 | 精品在线小视频 | 国产精品色婷婷 | 免费看日韩毛片 | 久久一区二区三区四区 | 片黄在线观看 | 天天曰天天爽 | 亚洲黄色免费观看 | 窝窝午夜影院 | a级片一区二区 | 国产婷婷一区二区三区 | 熟女毛片 | 国产古装艳史毛片hd | 婷婷五月在线视频 | 国模杨依粉嫩蝴蝶150p | 亚洲综合色在线观看 | 欧美日韩一区视频 | 欧美性天堂 | 亚洲免费专区 | 女同动漫免费观看高清完整版在线观看 | 操模特| 精品久久久久久久中文字幕 | 国产污视频在线观看 | 久久久久久久久久久97 | 少妇人妻偷人精品无码视频 | www毛片 | 国产美女久久 | 狠狠爱夜夜| 日韩大胆人体 | 欧美黄色视屏 | 激情av综合 | 91精选国产 | 日本爽爽爽爽爽爽在线观看免 | 精品人妻人人做人人爽夜夜爽 | 国产成人激情视频 | 美国福利片 | 开心激情网站 | 亚洲网站色 | 精品视频一区二区 | 国产精品成人免费一区久久羞羞 | 亚洲精品777 | 91av视频网站 | 最近更新中文字幕 | 国产精品视频成人 | 极品美女被c | 欧美a级大片 | 欧美国产在线一区 | 黄网在线免费看 | 日本公妇乱淫免费视频一区三区 | 台湾swag在线播放 | 久久久精品一区 | 中文字幕av观看 | 秋霞一级视频 | 欧美一区,二区 | 久久久欧美精品 |