捕获数据包的程序设计
#pragma comment (lib,"Ws2_32.lib")
#include<winsock2.h>
#include <Ws2tcpip.h>
#include<stdio.h>
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)//0x80000000|0x18000000|0x00000001
int main(void )
{
SOCKET SnifferSocket;
WSADATA wsaData;
int iFlag=WSAStartup(MAKEWORD(2,0),&wsaData);
struct sockaddr_in sa;
char receive[1024]={0};
SnifferSocket = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
sa.sin_family = AF_INET;
sa.sin_port = htons(7000);
sa.sin_addr.s_addr=INADDR_ANY;//inet_addr(10.0.0.66);
bind(SnifferSocket,(struct sockaddr *)&sa, sizeof(sa)) ;
DWORD dwBufferLen[10] ;
DWORD dwBufferInLen = 1 ;
DWORD dwBytesReturned = 0 ;
WSAIoctl(
SnifferSocket,//套接字的描述符;
SIO_RCVALL,//待执行操作的控制代码,这里为SO_SSL_SET_VALIDATE_CERT_HOOK,表示将指针设置为证书验证指令;
&dwBufferInLen, //是一个指向输入缓冲区的指针;
sizeof(dwBufferInLen),//输入缓冲区大小;
&dwBufferLen, //指向输出缓冲区的指针;
sizeof(dwBufferLen),//输出缓冲区大小;
&dwBytesReturned ,//指向真实的输出字节的数值;
NULL , NULL //这里必须为NULL
);
memset(receive,0,1024);
recv( SnifferSocket, receive, sizeof(receive) , 0 ) ;
for(int i=0;i<1024;i++)
printf("%x",receive[i]);
closesocket(SnifferSocket);
WSACleanup();
return 0;
}
不知道错在那里?谢谢了!!