raw socket抓包,无线网卡下只有进来的包

Atison 2008-01-04 01:25:07
做了个程序使用 Raw Socket 抓包在普通的网卡下可以抓到所有的包。

但是在无线网卡下却只能捕获到进来的包。这是怎么回事?

单步调试发现程序运行到

socket.SetSocketOption(SocketOptionLevel.IP,SocketOptionName.HeaderIncluded,1);
byte[] IN = new byte[4]{1,0,0,0};
byte[] OUT = new byte[4];

int ret_code = socket.IOControl(SIO_RCVALL,IN,OUT);

在这一行中出现异常,提示说“提供了一个无效的参数”。

异常详细信息如下:
捕捉到 System.Net.Sockets.SocketException
Message="提供了一个无效的参数。"
Source="System"
ErrorCode=10022
NativeErrorCode=10022

请问各位高手,有没有什么解决方法?
...全文
853 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Atison 2008-01-31
  • 打赏
  • 举报
回复
都快结帖了,怎么还没人解答呢?
Atison 2008-01-19
  • 打赏
  • 举报
回复
高手去哪了?
45Ter 2008-01-14
  • 打赏
  • 举报
回复
帮你顶下,手上现在没有无线网卡,晚上回家试试看!
Atison 2008-01-14
  • 打赏
  • 举报
回复
to:45Ter

关掉混合模式也抓不到出去的包。
45Ter 2008-01-11
  • 打赏
  • 举报
回复
把混合模式关掉就看看
很多无线网卡不支持混杂模式!
Atison 2008-01-11
  • 打赏
  • 举报
回复
不是吧。再顶上去。
Atison 2008-01-08
  • 打赏
  • 举报
回复
看来这100分没人能拿走了。
Atison 2008-01-08
  • 打赏
  • 举报
回复
高手去哪了?
Atison 2008-01-05
  • 打赏
  • 举报
回复
急啊。高手都睡觉去了?
Efcndi 2008-01-05
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20070516/20/73e598ed-7019-4ac6-979c-9dda659c05e9.html
Atison 2008-01-05
  • 打赏
  • 举报
回复
除了 raw 还有其他的方法抓包吗?
Atison 2008-01-05
  • 打赏
  • 举报
回复
顶上去
Atison 2008-01-05
  • 打赏
  • 举报
回复
是不是无线网卡不支持 IOControl 方法?
qinxinfo 2008-01-05
  • 打赏
  • 举报
回复
看来跟网卡有关,找下相关资料.
Atison 2008-01-05
  • 打赏
  • 举报
回复
谢谢 Efcndi 的支持。

我的程序就是根据你给的那个页面的代码改的,网上用 C# 写 Raw Socket 的代码差不多都是这个版本的。

已经换了好几台电脑测试,不管是 xp sp2 系统 还是 Server 2003 系统,只要是用无线网卡的,就不能抓到出去的数据,只能抓到进来的数据。
Efcndi 2008-01-05
  • 打赏
  • 举报
回复
http://technet.microsoft.com/zh-cn/library/bb457156(en-us).aspx#EHAA
-》Tcp/Ip-》Restricted traffic over raw sockets

上面那个结合这个,看看是否有帮助。
Atison 2008-01-04
  • 打赏
  • 举报
回复
再顶上去
fish_yht 2008-01-04
  • 打赏
  • 举报
回复
先顶
再解决
Atison 2008-01-04
  • 打赏
  • 举报
回复
在线关注
goodmrning 2008-01-04
  • 打赏
  • 举报
回复
关注中!!!!!!!!!!!!!!
顶!!!!!!!!!!!1
加载更多回复(2)
本文章将介绍如何使用RawSocket(原始套接字)开发网络嗅探器: 首先我们得了解什么是套接字,这个我就不多说,自己百度,百度百科比我说的好。 那么什么又是原始套接字呢,常用的套接字分为 SOCK_STREAM(流套接字) 用于TCPXY通讯。 SOCK_DGRAM(数据报套接字) 同于UDPXY通讯。 那么原始呢,他则是和名字一样原始套接字;举例:要想用流套接字进行一次TCP的发,那么直接连接上对方服务器然后用Send就可以发送指定的内容,但其实发送的数据并不止你的那些内容,有一些东西是流套接字会给你自动补上的。TCP是属于IPXY的一个子XY,那么要发送一个TCP数据就得加上(以太网XY报头这个先不提),IPXY的报头,和TCPXY报头,这些东西流套接字都会帮你处理,而原始套接字则不会(当然也可以设置让原始套接字构造IP报头)。原始套接字他有更多的用途,但相对来说也比流套接字或数据报套接字麻烦。 原始套接字还可以设置成允许接收本地所有的套接字数据。那么我们就利用这个功能来做嗅探器! 首先:1.使用  WSAStartup (合并短整数 (2, 2), WSADATA)  来初始化Winsocket服务 其参数有2个  第一个 (短整数型/双字节型):wVersionRequired  这个参数表明使用的winsock版本号,高位指定修订版本号,低位指定主版本号。第二个参数 WSADATA类型 用于接收Winsocket细节东西,咱不用管它。 //下面就不说那么详细了,源码里面全是注释,自己看。 2.然后使用socket (#AF_INET, #SOCK_RAW, #IPPROTO_IP)  来创建一个套接字   第一个参数应该是表明Internet地址格式反正只能固定这个,仅仅支持这个  参数2:表明要创建的是一个原始套接字,参数3:指定IPXY  IPXY括其子XY TCP UDP 等。成功返回套接字句柄 3.  bind (s, addr, sizeof (addr))  将套接字绑定至指定网卡,参数1=套接字句柄    参数2为一个addr结构的值,该值表明要绑定的网卡IP及端口号 4.  ioctlsocket (Socket, 2550136833, 1) 将套接字的模式改变为允许接收所有数据 顺利完成上面的操作后咱就可以用Recv来接收数据了,只要不断的调用Recv就OK。
r40_tinav2.1_最终验证通过_使用CB-S来验证OV5640有横条纹fpscamera+SPI2.0成功_20171114_1443没有外层目录.7z 开发板:CB-S 1、(可选修改/调试技巧:) 除了ov5640.c之外,其它的驱动都不编译,节省编译时间! W:\ov5640_spi20_r40t\lichee\linux-3.10\drivers\media\platform\sunxi-vfe\device\Makefile obj-m += ov5640.o #obj-m += ov2640.o #obj-m += ov7736.o #obj-m += s5k4ec.o #obj-m += s5k4ec_mipi.o #obj-m += gc2035.o #obj-m += gt2005.o #obj-m += gc0307.o #obj-m += gc0308.o #obj-m += gc0328.o #obj-m += gc0328c.o #obj-m += gc2145.o #obj-m += gc0329.o #obj-m += gc0311.o #obj-m += hi253.o #obj-m += sp2518.o #obj-m += sp2519.o #obj-m += sp0718.o #obj-m += sp0838.o #obj-m += ov16825.o #obj-m += ov5650.o #obj-m += ov5647.o #obj-m += ov5647_mipi.o #obj-m += t8et5.o #obj-m += s5k4e1.o #obj-m += s5k4e1_mipi.o #obj-m += sp2518.o #obj-m += sp0718.o #obj-m += gc5004.o #obj-m += gc5004_mipi.o #obj-m += ov5648.o #obj-m += ar0330.o #obj-m += ov5648.o #obj-m += sp5408.o #obj-m += ov12830.o #obj-m += ov8825.o #obj-m += ov8850.o #obj-m += gc2155.o #obj-m += ov8858.o #obj-m += ov13850.o #obj-m += imx214.o #obj-m += ov8858_4lane.o #obj-m += sp5409.o #obj-m += s5k5e2yx.o #obj-m += ov2710_mipi.o #obj-m += ov2686.o (这里是看ov5640的驱动的probe执行是否正确?设备ID是否读取成功!) W:\ov5640_spi20_r40t\lichee\linux-3.10\drivers\media\platform\sunxi-vfe\device\ov5640.c static int sensor_detect(struct v4l2_subdev *sd) { data_type rdval; printk("****wyb %s:%d/%s()! \n", __FILE__, __LINE__, __func__); LOG_ERR_RET(sensor_read(sd, 0x300a, &rdval;)) printk("****wyb %s:%d/%s()! 0x300a rdval=0xx\n", __FILE__, __LINE__, __func__, rdval); if(rdval != 0x56) return -ENODEV; LOG_ERR_RET(sensor_read(sd, 0x300b, &rdval;)) printk("****wyb %s:%d/%s()! 0x300b rdval=0xx\n", __FILE__, __LINE__, __func__, rdval); if(rdval != 0x40) return -ENODEV; return 0; } (在全志R16平台改过这个文件,让摄像头不要休眠,但是全志R40平台的tina v2.1系统下不需要修改!) W:\ov5640_spi20_r40t\lichee\linux-3.10\drivers\media\platform\sunxi-vfe\vfe.c 2、(可

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧