首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

WinPcap 驅動開發 ARP 多功能工具:原理、API 詳解與完整原始碼

     編輯:關於VC++

一、WinPcap 簡介

WinPcap (Windows Packet Capture) 提供 Win32 應用程式存取網路底層能力:

  1. 捕獲原始封包 (含共享網路上其他主機流量)。
  2. 自訂規則過濾封包。
  3. 發送原始封包。
  4. 收集網路統計資訊。

限制:僅監聽,無法阻塞/控制其他程式流量,不適用 QoS 或個人防火牆。主流支援 NT/2000/XP。核心 DLL:packet.dll (底層)、wpcap.dll (高階封裝)。本文基於 packet.dll。

二、Packet.dll 核心資料結構與 API

2.1 主要結構體

  • _ADAPTER:網卡描述。
  • _PACKET:封包緩衝區描述。
  • NetType:網路類型 (LinkSpeed、LinkType:乙太網/Token Ring/FDDI/ATM...)。
  • npf_if_addr:IP/子網掩碼/廣播位址。
  • bpf_hdr:封包標頭 (時間戳/長度)。
  • bpf_stat:統計 (接收/丟棄/捕獲計數)。

2.2 常用 API 對照

三、T-ARP 功能與原理

3.1 命令列選項

  • -m 主機掃描:廣播 ARP Request 獲取存活主機 IP/MAC。
  • -a 反嗅探掃描:偽廣播位址 ff:ff:ff:ff:ff:fe 偵測嗅探主機。
  • -s ARP 欺騙/網路嗅探/IP 沖突:雙向偽造 ARP Reply 導流封包經本機 (需啟用 IP Routing 註冊鍵 IPEnableRouter=1)。
  • -r 重置:發送正確 ARP Reply 恢復通訊。

3.2 核心原理

  1. 啟動時以特殊 IP (112.112.112.112) 發送 ARP Request 取得本機 MAC。
  2. -m:用本機 IP/MAC 廣播 ARP Request,存活主機回應。
  3. -a:用 31 位偽廣播位址,僅嗅探主機回應。
  4. -s:取得目標 A/B MAC,向 A 發送「B 的 IP 對應本機 MAC」的 ARP Reply,向 B 發送「A 的 IP 對應本機 MAC」;啟用 IP 轉發後本機成中間人,可監聽/修改流量。若 A=B=本機則為混雜模式嗅探;若 A=B≠本機則為 IP 沖突攻擊。
  5. -r:發送正確 MAC 映射恢復 ARP 快取。

四、關鍵執行緒與流程

  • sniff 執行緒:PacketSetHwFilter(..., PROMISCUOUS) → 迴圈 PacketReceivePacket → getdata 解析。
  • sendMASR 執行緒:發送 ARP Request (掃描/欺騙前置)。
  • sendSR 執行緒:週期性發送 ARP Reply 維持欺騙/重置。

五、完整原始碼 (節錄關鍵結構與主流程)

// 封包結構定義 (pragma pack 1)
typedef struct ethdr { uchar eh_dst[6], eh_src[6]; ushort eh_type; } ETHDR;
typedef struct arphdr { ushort arp_hdr, arp_pro; uchar arp_hln, arp_pln; ushort arp_opt; uchar arp_sha[6]; ulong arp_spa; uchar arp_tha[6]; ulong arp_tpa; } ARPHDR;

// 主流程
main() {
    PacketGetAdapterNames(...) → 選擇網卡 → PacketOpenAdapter
    PacketGetNetType / PacketGetNetInfoEx → 顯示網卡資訊
    PacketAllocatePacket → 建立收發封包緩衝
    CreateThread(sniff) → 監聽執行緒
    getmine() → 取得本機 MAC
    依選項建立 sendMASR / sendSR 執行緒
    WaitForSingleObject(sendThread) → 等待發送結束
    PacketGetStats → 顯示統計
    釋放資源
}

完整 400+ 行原始碼見原文附件,含 ARP/乙太網封裝組裝、多執行緒同步、檔案記錄 (欺騙模式輸出 capture.txt)。

六、編譯與執行環境

  • 安裝 WinPcap 2.3 (穩定) 或 3.0 Alpha。
  • 專案連結 packet.lib、ws2_32.lib,包含 packet32.h、ntddndis.h。
  • 管理員權限執行 (需開啟網卡混雜模式)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
函式用途
PacketGetAdapterNames取得網卡清單與描述
PacketOpenAdapter / PacketCloseAdapter開啟/關閉網卡
PacketGetNetInfoEx取得 IP/掩碼/廣播位址
PacketGetNetType取得 MAC 層類型與速度
PacketSetHwFilter設定硬體過濾 (混雜模式 NDIS_PACKET_TYPE_PROMISCUOUS 等)
PacketSetBuff設定核心緩衝區大小
PacketSetReadTimeout設定讀取逾時
PacketAllocatePacket / PacketFreePacket / PacketInitPacket封包記憶體管理
PacketReceivePacket從驅動讀取封包 (同步/非同步)
PacketSendPacket發送封包
PacketSetNumWrites設定重發次數
PacketGetStats取得統計計數