写一个RAW SOCKET程序时,遇到的一个问题。
在接收的时候,出了问题。
1、
sniffersock = socket( AF_INET , SOCK_RAW , IPPROTO_IP )
2、
setsockopt( sniffersock , SOL_SOCKET , SO_RCVTIMEO , (const char *)&rcvtimeo , sizeof(rcvtimeo) )
3、
bind(sniffersock,(PSOCKADDR)&sa, sizeof(sa))
4、
WSAIoctl( sniffersock, SIO_RCVALL , &dwBufferInLen, sizeof(dwBufferInLen),
&dwBufferLen, sizeof(dwBufferLen),
&dwBytesReturned , NULL , NULL ) )
5、
int nRet = recv(sniffersock,buff,1024,0);
if(nRet = SOCKET_ERROR)
{
TRACE("接收错误!%d\n",WSAGetLastError());
}
前4步都没有出任何的问题。
到了第5步,老是返回的一个-1.我看了一下WSAGetLastError()。但是返回的也只是一个0。
这个是为什么呢?
1、
sniffersock = socket( AF_INET , SOCK_RAW , IPPROTO_IP )
2、
setsockopt( sniffersock , SOL_SOCKET , SO_RCVTIMEO , (const char *)&rcvtimeo , sizeof(rcvtimeo) )
3、
bind(sniffersock,(PSOCKADDR)&sa, sizeof(sa))
4、
WSAIoctl( sniffersock, SIO_RCVALL , &dwBufferInLen, sizeof(dwBufferInLen),
&dwBufferLen, sizeof(dwBufferLen),
&dwBytesReturned , NULL , NULL ) )
5、
int nRet = recv(sniffersock,buff,1024,0);
if(nRet = SOCKET_ERROR)
{
TRACE("接收错误!%d\n",WSAGetLastError());
}
前4步都没有出任何的问题。
到了第5步,老是返回的一个-1.我看了一下WSAGetLastError()。但是返回的也只是一个0。
这个是为什么呢?
...全文
相关推荐
基于raw socket的UDP数据的发送和接收
基于raw socket的UDP数据的发送和接收,自定义IP头,UDP头,数据
运用Raw Socket进行以太网帧解析
RAW SOCKETRAW Socket提供了一种方法来绕过整个网络堆栈遍历,并直接将以太网帧输送到一个应用程序的方法。(跳过网络层和传输层的过滤解析,因而可以直接处理新的或是自定义的数据包格式)常用创建RAW Socket格式的方法:AF_PACKET和PF_SOCKET。AF_PACKET用于win和mac系统。本篇介绍基于Linux的PF_PACKET创建方法。基于PF_PACKET的PF_...
linux raw socket
raw socket即原始套接字,可以通过创建socket时,设置参数SOCK_RAW来创建。相比平时使用SOCK_STREAM创建的应用层的套接字,raw socket可以直接处理ip首部和tcp首部,并且可以监听抓取经过本机的ip数据包和mac帧,可以处理ICMP和IGMP等网络控制报文。通常有两种方式: //发送接收ip数据包 socket(PF_INET,SOCK_RAW,IPPROTO_T
raw socket来实现ip报文的发送
如何自己封装IP头用raw socket来实现ip报文的发送
linux下使用RAW SOCKET接收LLDP报文并解析LLDP报文
linux下使用RAW SOCKET接收LLDP报文并解析,纯C代码,可使用GCC直接编译,测试通过。


网络编程
