發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊(cè)
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
一、前言 本文主要介紹如何在程序中實(shí)現(xiàn) IP 地址的隱藏。其實(shí)這篇東西不算我寫的。其中《 IP 頭結(jié)構(gòu)》部分我懶得打字 ,故復(fù)制、粘貼了孤獨(dú)劍客的文章 ,先說(shuō)聲謝謝!代碼部分參考了外國(guó)程序 xes 寫的一個(gè)程序。所以這只是學(xué)習(xí)過(guò)程中的一個(gè)副產(chǎn)品。既然程序已經(jīng)做好了 ,就順便放上來(lái)跟大家一起交流 ,共同提高吧。本文只不過(guò)想說(shuō)明一下 IP 數(shù)據(jù)的結(jié)構(gòu)和發(fā)送機(jī)制。如果有人把它改為惡意 IP 攻擊工具 ,后果自負(fù)。 二、 IP 頭結(jié)構(gòu) 我們知道 ,TCP/IP 網(wǎng)絡(luò)數(shù)據(jù)全部是通過(guò)封裝在 IP 數(shù)據(jù)包中在 Internet 網(wǎng)上傳送的 ,也就是封裝建立起一個(gè)包含 IP 頭和數(shù)據(jù)的 IP 數(shù)據(jù)報(bào)。一般來(lái)說(shuō) ,網(wǎng)絡(luò)軟件總是以多個(gè) 32 位字產(chǎn)生 IP 頭 ,即使必須用附加的 0 填充 IP 頭。 IP 頭包含了傳輸 IP 數(shù)據(jù)包中封裝數(shù)據(jù)的所有必要信息。 IP 頭的數(shù)據(jù)結(jié)構(gòu)和描述如下 : 成員 長(zhǎng)度 (Bit) 描述 Version 4 IP 頭的版本號(hào) ,目前是 IPv4,最新是 IPv6 Header Length 4 IP 頭的長(zhǎng)度 ,若沒有特殊選擇 ,IP 頭總是 20 字節(jié)長(zhǎng) Type of Service 8 服務(wù)類型 ,定義了數(shù)據(jù)傳輸?shù)膬?yōu)先級(jí)、延遲、吞吐量和可靠性等特性 Total Packet Length 16 IP 包的長(zhǎng)度 ,若沒有特殊選項(xiàng) ,一般為 20 字節(jié)長(zhǎng) Identification 16 IP 包標(biāo)識(shí) ,主機(jī)使用它唯一確定每個(gè)發(fā)送的數(shù)據(jù)報(bào) Flag 3 IP 數(shù)據(jù)分割標(biāo)志 Fragment Offset 13 IP 數(shù)據(jù)分割偏移 Time to Live 8 數(shù)據(jù)報(bào)在網(wǎng)絡(luò)上的存活時(shí)間 ,每通過(guò)一個(gè)路由器 ,該數(shù)值減一 Protocol 8 TCP/IP 協(xié)議類型 ,比如 :ICMP 為 1,IGMP 為 2,TCP 為 6,UDP 為 17 等 Header Checksum 16 頭部檢驗(yàn)和 Source IP Address 32 源 IP 地址 Destination IP Address 32 目的 IP 地址 Other ? 其他選項(xiàng) Data ? 數(shù)據(jù) 實(shí)現(xiàn)自己定義的 IP 頭是一件非常有意義的事情 ,比如 ,通過(guò)改變 IP 頭里的 TOS 的優(yōu)先級(jí)和 TTL,你可以使自己的數(shù)據(jù)包有更強(qiáng)的傳輸能力和壽命 ,通過(guò)修改 IP 頭里的源 IP 地址就可以隱藏自己機(jī)器的 IP 地址等等。象著名攻擊程序 " 淚滴 TearDrop" 就是通過(guò)故意制造系統(tǒng)不能處理的分片 IP 包而實(shí)現(xiàn)的 ,還有 SYN Flooder 和 UDP Flooder 就是通過(guò)產(chǎn)生隨機(jī)源 IP 實(shí)現(xiàn)欺騙的。 三、實(shí)現(xiàn)原理 一般來(lái)說(shuō) ,自定義 IP 頭是通過(guò)使用 socket 的庫(kù)函數(shù) setsockopt() 的選項(xiàng) IP_HDRINCL 來(lái)實(shí)現(xiàn)的 ,盡管這在 unix 和 linux 平臺(tái)上很容易實(shí)現(xiàn) ,但遺憾的是在 Windows 平臺(tái)的 Winsock1.1 和 Winsock2.0 函數(shù)庫(kù)里 setsockopt() 不支持 IP_HDRINCL 選項(xiàng) ,所以在 Windows 9x/NT 里是無(wú)法通過(guò) Winsock 函數(shù)庫(kù)來(lái)實(shí)現(xiàn) IP 頭自定義的 ,當(dāng)然可以通過(guò)編寫虛擬設(shè)備驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn) ,不過(guò)比較復(fù)雜 ,但 Windows 2000 的出現(xiàn)打破了這種局面 ,Windows2000 的 Winsock2.2 函數(shù)庫(kù)里全面支持 setsockopt() 的選項(xiàng) IP_HDRINCL,使得我們輕松就可以實(shí)現(xiàn)自定義的 IP 頭。實(shí)現(xiàn)方法如下 : 四、代碼部分 { 1. 本程序只能運(yùn)行于 Window 2000. 2. 你必須有 Administrator 權(quán)限 . 3. 程序需要用到一個(gè) button 和一個(gè) memo. ---------------------------------------------------------------------- 運(yùn)行程序前 ,請(qǐng)根據(jù)自己的需要改變 SrcIP 、 SrcPort 、 DestIP 和 DestPort 的值 ---------------------------------------------------------------------- 如果你看不懂以下代碼 ,最好不要去運(yùn)行它。 ---------------------------------------------------------------------- } unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, Registry; Const SrcIP = '123.123.123.1';// 發(fā)送方 IP 地址 SrcPort = 1234; // 發(fā)送方端口 DestIP = '127.0.0.2'; // 目的 IP 地址 DestPort = 4321; // 目的端口 Max_Message = 4068; Max_Packet = 4096; type TPacketBuffer = Array[0..Max_Packet-1] of byte; TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure SendIt; end; // IP 頭 type T_IP_Header = record ip_verlen : Byte; ip_tos : Byte; ip_totallength : Word; ip_id : Word; ip_offset : Word; ip_ttl : Byte; ip_protocol : Byte; ip_checksum : Word; ip_srcaddr : LongWord; ip_destaddr : LongWord; end; // UDP 頭 Type T_UDP_Header = record src_portno : Word; dst_portno : Word; udp_length : Word; udp_checksum : Word; end; // 一些 Winsock 2 的類型聲明 u_char = Char; u_short = Word; u_int = Integer; u_long = Longint; SunB = packed record s_b1, s_b2, s_b3, s_b4: u_char; end; SunW = packed record s_w1, s_w2: u_short; end; in_addr = record case integer of 0: (S_un_b: SunB); 1: (S_un_w: SunW); 2: (S_addr: u_long); end; TInAddr = in_addr; Sockaddr_in = record case Integer of 0: (sin_family: u_short; sin_port: u_short; sin_addr: TInAddr; sin_zero: array[0..7] of Char); 1: (sa_family: u_short; sa_data: array[0..13] of Char) end; TSockAddr = Sockaddr_in; TSocket = u_int; const WSADESCRIPTION_LEN = 256; WSASYS_STATUS_LEN = 128; type PWSAData = ^TWSAData; WSAData = record // WSDATA wVersion: Word; wHighVersion: Word; szDescription: array[0..WSADESCRIPTION_LEN] of Char; szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char; iMaxSockets: Word; iMaxUdpDg: Word; lpVendorInfo: PCha
來(lái)自: 求索真理 > 《我的寶庫(kù)》
0條評(píng)論
發(fā)表
請(qǐng)遵守用戶 評(píng)論公約
獲取主機(jī)的IP信息
獲取主機(jī)的IP信息#include "Winsock2.h"1.MAKEWORD 宏 的使用平臺(tái):SDK 這個(gè)宏創(chuàng)建一個(gè)被指定變量連接而成的WORD變量。struct hostent { char *h_name;hostent->h_addrtyp...
Socket編程指南及示例程序
SOCKET sock;D:"Code"成品代碼"Socket"socket_src>UDP_Send_Broadcast.exe.sockaddr類型是用來(lái)表示Socket地址的類型,同上面的sockaddr_in類型相比,sockaddr的適用范圍更廣,...
TCP/IP各種包頭結(jié)構(gòu)
/*TCP報(bào)頭*/typedef struct { ?USHORT? srcport; // 源端口?USHORT ?dstport; // 目的端口?UINT ?seqnum;? // 順序號(hào)?UINT ?acknum;? //期待獲得對(duì)方的TCP包編號(hào)?BYTE h_len;? // 以32比特為單位的TCP...
Windows環(huán)境下實(shí)現(xiàn)原始UDP數(shù)據(jù)包發(fā)送
Windows環(huán)境下實(shí)現(xiàn)原始UDP數(shù)據(jù)包發(fā)送。9)源和目的IP地址(Source and Destination IP Address):標(biāo)識(shí)網(wǎng)絡(luò)終端設(shè)備的IP地址;// 填充UDP頭 UDPHeader *pUdphdr = (UDPHeader *)&buff[sizeof(IPHea...
IP報(bào)文頭結(jié)構(gòu)體
//16位源端口 unsigned short th_dport; //16位目的端口 unsigned int th_seq; //32位序列號(hào) unsigned int th_ack; //32位確認(rèn)號(hào) unsigned char th_lenres; //4位首部長(zhǎng)度/4位保留字 unsigne...
自己動(dòng)手編寫嵌入式Bootloader之(2)
unsigned char *RxBuf = (unsigned char *)1024;但是我們要完成的功能僅僅是從TFTP服務(wù)器下載內(nèi)核和文件系統(tǒng)映像,而服務(wù)器的IP和MAC地...
手把手教你玩轉(zhuǎn)ARP包(二)【數(shù)據(jù)包的游戲系列之一】
我們?cè)賮?lái)看一下ARP響應(yīng)包的構(gòu)造 2) 響應(yīng)包的填充 有了前面詳細(xì)的解說(shuō),你肯定就能自己說(shuō)出響應(yīng)包的填充方法來(lái)了吧,所以我就不細(xì)說(shuō)了,列兩個(gè)表就好了 比如說(shuō)給 192.168.0.99(MAC為 bb-bb-bb...
wireshark使用說(shuō)明(修改版)
Wireshark使用說(shuō)明。注意:如果使用GTK2的GUI界面遇到問(wèn)題可以嘗試GTK1,在Windows下256色(8bit)顯示模式無(wú)法運(yùn)行GTK2.但是某些高級(jí)分析統(tǒng)計(jì)功能在GTK1下可能無(wú)法實(shí)現(xiàn)。可以使用src|dst和tcp|udp關(guān)鍵...
Windows API 教程(九) 網(wǎng)絡(luò)編程
sockaddr、 SOCKADDR、 sockaddr_in、 SOCKADDR_IN 這 幾個(gè)結(jié)構(gòu)用于表示地址很端口。/* 主機(jī)正式名稱 */ char FAR * FAR * h_aliases...
微信掃碼,在手機(jī)上查看選中內(nèi)容