2009-02-17 14 views
2

我需要为我的应用程序手动创建TCP/IP标头。为此,我使用原始套接字。我的系统操作系统是win xp(SP3)。在Windows中的原始套接字实现?

我的代码编译好:)但它抛出一个运行时错误:

 
Initialising Winsock...Initialised successfully. Creating Raw TCP Socket...Raw TCP Socket Created successfully. Setting the socket in RAW mode...Successful. Enter hostname : 192.168.1.152 

Resolving Hostname...Resolved. Enter Source IP : 192.168.1.151 

Sending packet... Error sending Packet : 10022 
 

我已经设置IP_HDRINCL 1。我在做什么错?我也关掉了防火墙,但仍然得到相同的结果。

回答

2

我建议使用WinPcap用于这一目的。即使你知道如何用win32 API正确地做到这一点,它将会非常缓慢。

我已经成功地使用WinPcap将数据包注入千兆以太网端口,硬件可以处理的速度一样快。

2

不是一个答案,但希望开始...

MSDN

WSAEINVAL 10022 Invalid argument. Some invalid argument was supplied (for example, specifying an invalid level to the setsockopt function). In some instances, it also refers to the current state of the socket—for instance, calling accept on a socket that is not listening.

哪些参数你发送调用?


我发现了原始套接字this更新:

On Windows XP with Service Pack 2 (SP2) and Windows Vista, the ability to send traffic over raw sockets has been restricted in several ways:

  • TCP data cannot be sent over raw sockets.

如果适用于XP SP3,虽然不知道......

+0

sendto(s,buf,sizeof(IPV4_HDR)+ sizeof(TCP_HDR)+ payload,0,(SOCKADDR *)&dest,sizeof(dest))) – krishnakumar 2009-02-17 12:41:25

+1

您是否尝试发送TCP数据? – ng5000 2009-02-17 12:53:04