【问题标题】:Sniffing in c++在 C++ 中嗅探
【发布时间】:2020-06-25 20:52:32
【问题描述】:

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

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

【问题讨论】:

  • 特权执行与C++无关
  • 我知道执行级别与 c++ 本身无关,但要使用 windows api 创建套接字,它需要是管理员。我问是否有另一种使用 windows api 嗅探数据包的方法,或者是否有另一个第三方库可以做到这一点。
  • 绕过根检查?对我来说听起来很老套
  • 如果你想知道它用于教育目的;)

标签: c++ windows sockets


【解决方案1】:

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

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

【讨论】:

  • 你知道任何不需要管理员嗅探的库吗?
  • @justaman 不,它是为安全目的而设计的。要安装 libpcap,您需要管理员/sudo 权限,但使用该库的程序可能会在不同的上下文中运行。
  • @Swift-FridayPie "在 Windows 上,据我所知,从套接字进行原始读取是完全不可能的" - 现在完全正确,但是 RAW sockets 仅限于管理员用户只是,正如 OP 所发现的那样。
  • @RemyLebeau 上次我将某些东西移植到 Windows 时,甚至没有定义 SOCK_RAW。显然它现在是 v.2 WinSock 的后期功能。
  • @Swift-FridayPie 您当时可能只是使用过时的 SDK。从 Windows 9x/NT4 的 1.1 开始,RAW 套接字已成为 WinSock 的一部分,但仅限于 IGMP 和 ICMP 数据包。这个限制在 Windows 2000 左右被取消,同时强加了管理员要求。
猜你喜欢
  • 2020-12-12
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2015-04-09
  • 1970-01-01
  • 2011-07-23
  • 1970-01-01
相关资源
最近更新 更多