最近一段时间在研究原始套接字,准备做一个仿Sniffer的嗅探器。
在调用WSAIoctl函数,并编译时会有两个错误:基本意思就是WSAIoctl和SIO_RCVALL是未定义的。
前一个问题很好解决:查阅MSDN可得到如下定义:
Header: Declared in Winsock2.h.
Library: Use Ws2_32.lib.
但添加后,重新编译会出现数十个错误(汗~~),大概看了一下就是函数重定义的意思。马上找到Stafx.h文件,删除其中的#include <afxsock.h>语句,重新编译,只有后一个错误了~~
至于后一个错误是少了一个头文件所致,因此只要新建一个头文件,取名为mstcpip.h,然后复制以下内容,搞定~~嘿嘿~
// Copyright (C) Microsoft Corporation, 1996-1999
#ifndef MSTCPIPH
#define MSTCPIPH
#if _MSC_VER > 1000
#pragma once
#endif
/* Argument structure for SIO_KEEPALIVE_VALS */
struct tcp_keepalive {
u_long onoff;
u_long keepalivetime;
u_long keepaliveinterval;
};
// New WSAIoctl Options
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
#define SIO_RCVALL_MCAST _WSAIOW(IOC_VENDOR,2)
#define SIO_RCVALL_IGMPMCAST _WSAIOW(IOC_VENDOR,3)
#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4)
#define SIO_ABSORB_RTRALERT _WSAIOW(IOC_VENDOR,5)
#define SIO_UCAST_IF _WSAIOW(IOC_VENDOR,6)
#define SIO_LIMIT_BROADCASTS _WSAIOW(IOC_VENDOR,7)
#define SIO_INDEX_BIND _WSAIOW(IOC_VENDOR,8)
#define SIO_INDEX_MCASTIF _WSAIOW(IOC_VENDOR,9)
#define SIO_INDEX_ADD_MCAST _WSAIOW(IOC_VENDOR,10)
#define SIO_INDEX_DEL_MCAST _WSAIOW(IOC_VENDOR,11)
#endif