用原始套接字实现网络监听的问题(程序代码给出了,望高手指出不足!)

winnuke 2005-04-28 11:27:28
#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(80);
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;
}

什么输出也没有,是什么原因呢???
...全文
142 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
darkstar21cn 2005-04-29
  • 打赏
  • 举报
回复
The WSAIoctl function is used to set or retrieve operating parameters associated with the socket, the transport protocol, or the communications subsystem.
darkstar21cn 2005-04-29
  • 打赏
  • 举报
回复
也许你应该看看WSAioctl()函数的说明。
ForTopLevel 2005-04-29
  • 打赏
  • 举报
回复
网卡需要设置在混杂模式promiscuous

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧