//源码先:[C,不是C++,调试编译时请用C的方式]
//环境:winxp_sp2+VS2003
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib,"ws2_32.lib")void main(void)
{
struct WSAData wsaData;
//这是一个从 192.168.10.110:1026 -> 192.168.10.250:80 建立TCP连接3次握手的第一个SYN包,用抓包工具抓得,未作任何修改,直接将其内容copy到这个数组中
unsigned short sendPkg[26]={0x4500,0x0034,0x0008,0x4000,0x4006,0xA403,0xC0A8,0x0A6E,0xC0A8,0x0AFA,0x0402,0x0050,0x7424,0x6E47,0x0000,0x0000,0x8002,0xFFFF,0xF1A7,0x0000,0x0204,0x05AC,0x0103,0x0302,0x0101,0x0402};
SOCKET s;
DWORD ipHead=1; //自己设置IP头
struct sockaddr_in to; //发送目标
long tmp=0;
to.sin_family=AF_INET;
to.sin_port=htons(80);
to.sin_addr.S_un.S_addr=inet_addr("192.168.10.250");
for(tmp=0; tmp<8; tmp++) to.sin_zero[tmp]=0; WSAStartup(0x0202,&wsaData);
//使用原始socket和原始协议
s=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
//设置自己填充IP头
setsockopt(s,IPPROTO_IP,IP_HDRINCL, &ipHead, sizeof(ipHead));
//下面显示"0",表示尚未发生错误
printf("%u,",WSAGetLastError());
sendto(s,sendPkg,26*2,0,&to,sizeof(to));//发送数据包
printf("%u",WSAGetLastError());
//这里显示"10004"错误,MSDN的解释是:
//Interrupted function call.
//A blocking operation was interrupted by a call to WSACancelBlockingCall.
//可是我重启后以管理员身份重新运行它也仍然出现这个错误,郁闷ing....不知道问题出在哪里
getchar();//暂停一下
}
//环境:winxp_sp2+VS2003
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib,"ws2_32.lib")void main(void)
{
struct WSAData wsaData;
//这是一个从 192.168.10.110:1026 -> 192.168.10.250:80 建立TCP连接3次握手的第一个SYN包,用抓包工具抓得,未作任何修改,直接将其内容copy到这个数组中
unsigned short sendPkg[26]={0x4500,0x0034,0x0008,0x4000,0x4006,0xA403,0xC0A8,0x0A6E,0xC0A8,0x0AFA,0x0402,0x0050,0x7424,0x6E47,0x0000,0x0000,0x8002,0xFFFF,0xF1A7,0x0000,0x0204,0x05AC,0x0103,0x0302,0x0101,0x0402};
SOCKET s;
DWORD ipHead=1; //自己设置IP头
struct sockaddr_in to; //发送目标
long tmp=0;
to.sin_family=AF_INET;
to.sin_port=htons(80);
to.sin_addr.S_un.S_addr=inet_addr("192.168.10.250");
for(tmp=0; tmp<8; tmp++) to.sin_zero[tmp]=0; WSAStartup(0x0202,&wsaData);
//使用原始socket和原始协议
s=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
//设置自己填充IP头
setsockopt(s,IPPROTO_IP,IP_HDRINCL, &ipHead, sizeof(ipHead));
//下面显示"0",表示尚未发生错误
printf("%u,",WSAGetLastError());
sendto(s,sendPkg,26*2,0,&to,sizeof(to));//发送数据包
printf("%u",WSAGetLastError());
//这里显示"10004"错误,MSDN的解释是:
//Interrupted function call.
//A blocking operation was interrupted by a call to WSACancelBlockingCall.
//可是我重启后以管理员身份重新运行它也仍然出现这个错误,郁闷ing....不知道问题出在哪里
getchar();//暂停一下
}
这个程序在win2003下面使用VS2003也没问题,
但是用win2000或winxp就不行,
郁闷啊!