下面是发送SYN给服务器的代码:
//IP头填写
ipHeader.h_verlen=(4<<4 | sizeof(ipHeader)/sizeof(unsigned long));
// ipHeader.tos=0;
ipHeader.total_len=htons(sizeof(ipHeader)+sizeof(tcpHeader));
ipHeader.ident=1;
ipHeader.frag_and_flags=0;
ipHeader.ttl=128;
ipHeader.proto=IPPROTO_TCP;
ipHeader.checksum=0;
ipHeader.sourceIP=inet_addr(ip);//本地IP
ipHeader.destIP=inet_addr(dip);//服务器IP
//填写TCP头
tcpHeader.th_dport=htons(80); //服务器端口
tcpHeader.th_sport=htons(8288); //本地端口
tcpHeader.th_seq=htonl(0x12345678);
tcpHeader.th_ack=0;
tcpHeader.th_lenres=(sizeof(tcpHeader)/4<<4|0);
tcpHeader.th_flag=2; //标志2为SYN包
tcpHeader.th_win=htons(512);
tcpHeader.th_urp=0;
tcpHeader.th_sum=0;
psdHeader.saddr=ipHeader.sourceIP;
psdHeader.daddr=ipHeader.destIP;
psdHeader.mbz=0;
psdHeader.ptcl=IPPROTO_TCP;
psdHeader.tcpl=htons(sizeof(tcpHeader));
memcpy(szSendBuf, &psdHeader, sizeof(psdHeader));
memcpy(szSendBuf+sizeof(psdHeader), &tcpHeader, sizeof(tcpHeader));
tcpHeader.th_sum=checksum((USHORT *)szSendBuf,sizeof(psdHeader)+sizeof(tcpHeader));
memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));
memcpy(szSendBuf+sizeof(ipHeader), &tcpHeader, sizeof(tcpHeader));
memset(szSendBuf+sizeof(ipHeader)+sizeof(tcpHeader), 0, 4);
ipHeader.checksum=checksum((USHORT *)szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader));
memcpy(szSendBuf, &ipHeader, sizeof(ipHeader));
rect=sendto(sock, szSendBuf, sizeof(ipHeader)+sizeof(tcpHeader),
0, (struct sockaddr*)&addr, sizeof(addr));
if ( rect == SOCKET_ERROR )
{
CString mess;
mess.Format("连接错误,代码:%d",WSAGetLastError());
Over=TRUE;
AfxMessageBox(mess);
return;
}
....接收的我是用WSAIoctl截取所有包来分析的,只要从外面发到本机8288端口的数据我就收下来分析。在里面我已经收到了服务器的ACK应答,只不知道怎么再发一次本地的应答给服务器,望高手指教。。谢谢!!!
8 个解决方案
#1
参考TCP/IP,返回的ACK,客户完成第三次握手(也是ACK)
#2
简单的也就是对服务端ACK的ACK
#3
对啊,我想知道代码是怎么样的,楼上的能给代码参考一下吗?我知道协议是发回个ACK,只是不知道代码不知道怎么写。。。
#4
你要仔细看看协议的内容就知道了。 大约是把ack的值+1再返回去
#5
恳求有经验的兄弟帮忙,在网上找不到相关资料,郁闷坏了。。
#6
怎么可能找不到 tcp/ip协议 卷一 到处都是电子书,你不可能要别手把手的教你把
#7
up
#8
upp
#1
参考TCP/IP,返回的ACK,客户完成第三次握手(也是ACK)
#2
简单的也就是对服务端ACK的ACK
#3
对啊,我想知道代码是怎么样的,楼上的能给代码参考一下吗?我知道协议是发回个ACK,只是不知道代码不知道怎么写。。。
#4
你要仔细看看协议的内容就知道了。 大约是把ack的值+1再返回去
#5
恳求有经验的兄弟帮忙,在网上找不到相关资料,郁闷坏了。。
#6
怎么可能找不到 tcp/ip协议 卷一 到处都是电子书,你不可能要别手把手的教你把
#7
up
#8
upp