c++ - 在 C++ 中嗅探
问题描述
我正在尝试使用 Winsock 嗅探 CPP 中的数据包,但有一个问题。当我创建一个套接字时,它需要是一个“原始套接字”,以便它可以转移到“嗅探模式”:
sniffer = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
但是当我创建那个套接字时,程序需要处于管理模式。
我想知道是否有办法绕过它,或者有另一种方法可以在 CPP 中嗅探数据包而无需管理员模式。谢谢!
解决方案
该操作具有特权,在某些平台上根本不可用。在 POSIX 平台上,用户可能需要在某个组中,而不必是 root,在 Linux 上,您可以ls -l
针对代表网络接口的相应设备节点运行以找出正确的用户组(它仍然可能是 root)。
通常,您需要一个带有内核空间驱动程序\模块的数据包捕获库来实际绕过它。此类库的示例是 Wireshark 使用的全能 libpcap。有其他系统的端口,包括 Windows,称为 WinPCap。
推荐阅读
- r - 绘制二部图的分区比绘制整个图需要更多的时间
- java - Tomcat容器允许访问主机
- java - SpringBoot Postgresql 驱动问题
- python-3.x - 我在哪里添加 Graphviz 的可执行文件在 Mac 上
- android - 如何在 if/else 语句中为 setImageResource 使用 Drawable?
- php - 如何防止从发布 http 请求将空数据插入 mysql 数据库
- google-apps-script - 如果函数使用 google sheet 脚本
- c++ - 有没有一种有效的方法来对具有父/子关系的对象数组进行排序?
- html - 使 CSS 网格上的项目成为超链接
- android - 在水平回收器视图/轮播视图中显示多个文本标签