数据包套接字只在混杂模式下接收本地stream量

数据包套接字只在混杂模式下接收本地stream量,第1张

概述数据包套接字只在混杂模式下接收本地stream量

我有socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL))创build一个套接字,我已经设置为混杂模式使用:

struct ifreq ifr; strncpy((char*)ifr.ifr_name,interface,IF_nameSIZE); if(ioctl(sock,SIocgIFINDEX,&ifr)<0) fail(2); struct packet_mreq mr; memset(&mr,sizeof(mr)); mr.mr_ifindex = ifr.ifr_ifindex; mr.mr_type = PACKET_MR_PROMISC; if(setsockopt(sock,Sol_PACKET,PACKET_ADD_MEMBERSHIP,&mr,sizeof(mr)) < 0) fail(2);

问题是,当我从套接字执行read() ,它只返回来自或到达我的计算机的数据。

我怎样才能读取和处理networking上的所有数据包?

Wireshark显示所有的数据包都很好,所以我知道这不是我的电脑或网卡。 ifconfig在运行时报告它是PROMISC 。

C# – 写windows安全日志

从Java读取windows ACL

存储windows密码

为当前域创build一个安全标识符

linux工具来读取堆栈的值

有没有办法可以在linux上查看真正的进程cmdline?

把一个进程放在沙箱里,这样做可以把危害降到最小

SSO对会话超时的影响

Amazon EC2实例之间进行通信的最佳实践是什么?

基于服务器的应用程序安装程序是否可以创build新的组?

与Rob Jones的建议一起,尝试使用像Wireshark这样的工具,以确保您正在接收您期望的界面上的数据包。 至少这将确认(或否认)你的代码有问题。

还需要确保将接口本身设置为混杂模式。 如果没有,那么你可以使用ioctl()来设置它:

ifr.ifr_flags |= IFF_PROMISC; if( ioctl(sock,SIOCSIFFLAGS,&ifr) != 0 ) { // handle error here }

当您的应用程序正在运行时,请确保ifconfig报告该接口的PROMISC标志。

请注意,这将需要作为特权用户执行。

试验出了代码。 为我工作。 当然(由于第102行的测试),这将只打印TCP通信的细节。

尝试使用SOCK_PACKET作为socket()的第二个参数,而不是SOCK_RAW。

如果你在交换机上,你可能只会看到目的地或源自你的计算机的数据包。 尝试一个中心。

您的交换机端口也需要进行适当配置(思科世界中的SPAN端口)。 在这里看到更多的细节:

http://www.winpcap.org/misc/faq.htm#Q-22

以下是思科有关SPAN端口如何工作的信息:

http://www.cisco.com/en/US/products/hw/switches/ps708/products_tech_note09186a008015c612.sHTML

这可能不是一个软件问题。

你可能会使用错误的硬件。 您的计算机可能连接到交换机。 交换机足够聪明,可以“学习”哪些计算机在哪个端口上,并且只将流量路由到需要去的地方。 因此,交换机正在为您过滤数据包。

要解决这个问题,你需要获得一个Hub。 虽然集线器和交换机看起来非常相似,但它们的工作方式不同 该集线器是愚蠢的,将路由到所有端口的所有流量,使您看到混杂模式下的其他流量。

请注意,即使您更换了计算机连接的设备,也可能会连接到更多的交换机,这也会限制流量。 因此,您将无法从比您自己的中心或测试实验室设置更远的地方嗅探流量。

总结

以上是内存溢出为你收集整理的数据包套接字只在混杂模式下接收本地stream量全部内容,希望文章能够帮你解决数据包套接字只在混杂模式下接收本地stream量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1267728.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存