使用SIO_RCVALL命令可以在原始套接字上设置网卡以混合模式工作,允许指定的套接字接受所有流经本机的IP数据包
// DataCapture.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "winsock2.h"
#include "mstcpip.h"
#include "iostream"
using namespace std;
#pragma comment(lib,"ws2_32.lib")
#define DEFAULT_BUFLEN 65535
#define DEFAULT_NAMELEN 512
int main()
{
WSADATA wsaData;
SOCKET SnifferSocket = INVALID_SOCKET;
char recvbuf[DEFAULT_BUFLEN];
int iResult;
int recvbuflen = DEFAULT_BUFLEN;
HOSTENT* local;
char HostName[DEFAULT_NAMELEN];
IN_ADDR addr;
SOCKADDR_IN LocalAddr, RemoteAddr;
int addrlen = sizeof(SOCKADDR_IN);
int in = 0, i = 0;
DWORD dwBufferLen[10];
DWORD Optval = 1;
DWORD dwBytesReturned = 0;
//初始化套接字
iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
if (iResult != 0)
{
cout << "初始化失败:" << iResult << endl;
return 1;
}
//创建套接字
SnifferSocket = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
if (INVALID_SOCKET == SnifferSocket)
{