首页 > 解决方案 > 在 C++ 中嗅探

问题描述

我正在尝试使用 Winsock 嗅探 CPP 中的数据包,但有一个问题。当我创建一个套接字时,它需要是一个“原始套接字”,以便它可以转移到“嗅探模式”: sniffer = socket(AF_INET, SOCK_RAW, IPPROTO_IP);但是当我创建那个套接字时,程序需要处于管理模式。

我想知道是否有办法绕过它,或者有另一种方法可以在 CPP 中嗅探数据包而无需管理员模式。谢谢!

标签: c++windowssockets

解决方案


该操作具有特权,在某些平台上根本不可用。在 POSIX 平台上,用户可能需要在某个组中,而不必是 root,在 Linux 上,您可以ls -l针对代表网络接口的相应设备节点运行以找出正确的用户组(它仍然可能是 root)。

通常,您需要一个带有内核空间驱动程序\模块的数据包捕获库来实际绕过它。此类库的示例是 Wireshark 使用的全能 libpcap。有其他系统的端口,包括 Windows,称为 WinPCap。


推荐阅读