標準 Winsock API 隱藏了封包標頭細節,若需自訂 IP/TCP/ICMP 標頭 (如 IP 偽造、掃描、嗅探),必須使用 Raw Socket。本文介紹一個 C++ 封裝庫,支援 Win2000/NT/Win9x,提供同步/非同步 Raw Socket、封包建構、介面列舉、嗅探等功能,並附贈 ping、traceroute、TCP 半連接掃描、簡易伺服器等範例。
WSASocket,支援自訂 IP 標頭 (來源 IP、TTL、TOS)、校驗和計算。CTCPSocket, CUDPSocket, CICMPSocket 繼承 CSpoofSocket,提供 Send/Receive 封裝。CTCPSocketAsync, CUDPSocketAsync, CICMPSocketAsync 繼承 CAsyncSocket。CInterfaces 列舉網卡介面;CSniffSocket 嗅探模式 (混雜模式)。
CSpoofSocket sock;
sock.SetSourceIP("192.168.1.100"); // 偽造來源 IP
sock.SetTTL(64);
sock.SetTOS(0x10);
sock.SendTo(destIP, buffer, len); // 自動計算 IP/TCP/UDP 校驗和
CTCPSocketAsync scanner;
scanner.SetCallback(OnScanResult);
for (int port=1; port<=1024; port++) {
scanner.SendSYN(targetIP, port); // 僅送 SYN,收到 SYN+ACK 即判定開放
}
CUDPSocketAsync udpScanner;
udpScanner.SendTo(targetIP, port, ""); // 空封包
// 收到 ICMP Port Unreachable 即為關閉,無回應可能開放或被防火牆擋
CSniffSocket sniffer;
sniffer.StartSniff(OnPacketCaptured); // 啟用混雜模式
// 回呼函數接收完整 Ethernet+IP+TCP/UDP 封包
CTCPSocketAsync server;
server.Listen(8080);
server.SetAcceptCallback(OnClientConnect);
// 事件驅動模型,不阻塞主執行緒
ping.exe:ICMP Echo Request/Reply,自訂 TTL、封包大小。traceroute.exe:遞增 TTL 收集 ICMP Time Exceeded 追蹤路徑。spoof_demo.exe:IP 偽造發送 TCP/UDP 封包示範。tcp_server.exe:非同步 TCP 回應伺服器。udp_server.exe:非同步 UDP 回應伺服器。ipconfig.exe:列舉介面 IP/子網路遮罩/閘道 (呼叫 CInterfaces)。syn_scan.exe:TCP SYN 半連接埠掃描器。ws2_32.lib,定義 _WINSOCK2API_。本庫提供 IP 偽造、掃描、嗅探等功能,僅供網路安全研究、教學、授權滲透測試使用。任何未經授權的網路攻擊、入侵、監聽行為均屬違法,使用者須自負法律責任。
這個 Raw TCP/IP 庫以物件導向方式封裝了底層封包操作,大幅降低開發門檻,適合網路工具開發、安全研究、協定分析。原始碼開放、範例豐富,可直接整合至專案或作為二次開發基礎。