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

VC++ 基於 UDP 協議實現「網路信使」訊息群發:封包結構分析與原始 Socket 偽裝 IP 技術

     編輯:關於VC++

Windows 2000/XP 預設啟用「信使服務」接收 UDP 埠 135 (實為 RPC 端點對應器,實際信使服務使用動態埠) 的 net send 訊息。本文分析信使服務 UDP 封包結構,實作純 UDP Socket 發送訊息,並探討使用 Raw Socket 偽裝來源 IP 的可行性。

信使服務 UDP 封包結構

完整封包 = IP Header (20B) + UDP Header (8B) + Messenger Payload。

Messenger Payload (第 29 字節起):

  • 前 80 字節:訊息標頭。
  • 第 41-44 字節:DWORD 發送時間 (Unix timestamp)。
  • 第 75-78 字節:DWORD 訊息本體長度 (不含標頭)。
  • 其後為 三個欄位,各 12 字節標頭 + 內容:
    • 欄位 1:發送者電腦名 (NetBIOS 名稱)。
    • 欄位 2:接收者電腦名 (或 * 表廣播)。
    • 欄位 3:訊息文字內容 (支援 ASCII 圖示)。
    每欄位標頭:前 4 字節 = 內容長度,後 4 字節 = 配置長度 (對齊用)。

標準 UDP Socket 發送實作


SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
sockaddr_in to;
to.sin_family = AF_INET;
to.sin_port = htons(135); // 實際需查詢目標機器信使服務埠
to.sin_addr.s_addr = inet_addr("192.168.1.100");

// 手工構建 Messenger Payload (略)
char packet[1024] = { ... };
sendto(s, packet, len, 0, (sockaddr*)&to, sizeof(to));
closesocket(s);
限制:標準 Socket 無法偽裝來源 IP,接收端可見真實發送者 IP。若需匿名/偽裝,必須使用 Raw Socket (IP_HDRINCL)。

Raw Socket 偽裝 IP 原理

  1. 建立 socket(AF_INET, SOCK_RAW, IPPROTO_RAW) (需管理員權限 / CAP_NET_RAW)。
  2. 設定 setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) 告知核心由應用層填寫 IP Header。
  3. 手工構建完整 IP Header (版本、IHL、TOS、總長度、ID、Flags/Fragment、TTL、Protocol=UDP、Checksum、Src IP、Dst IP)。
  4. 接著 UDP Header (Src Port、Dst Port、Length、Checksum=0 可選)。
  5. 最後 Messenger Payload。
  6. sendto 發送 (目標 IP 僅供路由參考,實際來源 IP 取自 IP Header)。

關鍵結構定義


#pragma pack(push, 1)
struct IPHeader {
  BYTE  ver_ihl;     // 0x45
  BYTE  tos;         // 0
  WORD  tot_len;     // 總長度 (網路序)
  WORD  id;          // 識別碼
  WORD  frag_off;    // 0x4000 (Don't Fragment)
  BYTE  ttl;         // 128
  BYTE  protocol;    // IPPROTO_UDP (17)
  WORD  checksum;    // IP Header checksum
  DWORD src_addr;    // 偽裝來源 IP
  DWORD dst_addr;    // 目標 IP
};
struct UDPHeader {
  WORD src_port;
  WORD dst_port;
  WORD length;
  WORD checksum;     // 可設 0 (IPv4 選擇性)
};
#pragma pack(pop)

法律與道德警示

  • 偽裝 IP 發送封包屬於 IP Spoofing,在多數司法管轄區屬違法行為,且易被 ISP/防火牆攔截 (uRPF、Ingress Filtering)。
  • 本文僅供學術研究與防禦測試 (如驗證防火牆反欺騙規則),嚴禁用於騷擾、釣魚、駭客攻擊。
  • 現代網路環境 (Windows 10/11、企業級防火牆) 預設封鎖 Raw Socket 發送偽造來源 IP 封包。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved