win7 下怎么设置SOCKET才能监听所有IP包
【求助】win7 下如何设置SOCKET才能监听所有IP包
我想监听本机上的所有数据包,查资料后设置如下,但是只能监听发出去的包不能监听收到的包,请教要如何设置。我才接触网络部分,求指点!
------解决方案--------------------
WinPcap
------解决方案--------------------
Include\WinSock.h
------解决方案--------------------
win 7上已经无法使用raw这个东西了,被微软除名了,xp上还可以用用。
我想监听本机上的所有数据包,查资料后设置如下,但是只能监听发出去的包不能监听收到的包,请教要如何设置。我才接触网络部分,求指点!
WSADATA wsData;
WSAStartup(MAKEWORD(2,2),&wsData);
//建立套接字
SOCKET sock;
sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP);
BOOL flag=TRUE;
//设置IP头操作选项,用户可对IP头处理
setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));
char hostName[128];
gethostname(hostName,100);
//获取本地地址
hostent * pHostIP;
pHostIP=gethostbyname(hostName);
//填充SOCKADDR_IN结构
sockaddr_in addr_in;
addr_in.sin_addr=*(in_addr*)pHostIP->h_addr_list[0];
addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(6000);
bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in));
//把socket绑定到本地网卡
DWORD dwValue=1;
//设置SOCK_RAW为SIO_RCVALL,能接收所有IP包
#define IO_RCVALL _WSAIOW(IOC_VENDOR,1)
DWORD dwBufferLen[10];
DWORD dwBufferInLen=1;
DWORD dwBytesReturned=0;
WSAIoctl(sock,IO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);
------解决方案--------------------
WinPcap
------解决方案--------------------
Include\WinSock.h
387: /*
388: * Types
389: */
390: #define SOCK_STREAM 1 /* stream socket */
391: #define SOCK_DGRAM 2 /* datagram socket */
392: #define SOCK_RAW 3 /* raw-protocol interface */
393: #define SOCK_RDM 4 /* reliably-delivered message */
394: #define SOCK_SEQPACKET 5 /* sequenced packet stream */
------解决方案--------------------
win 7上已经无法使用raw这个东西了,被微软除名了,xp上还可以用用。