获取原始套接字需要 root 权限,而 tcp/udp 没有它,所以我需要知道如何获取 udp 套接字并获取 icmp 数据。编程语言是 C,操作系统是类 BSD。
(换句话说我想写一个没有root权限的ping)
您可以在没有 root 权限的情况下编写 UDP ping。
当启用IP_RECVERR选项时,所有错误都存储在套接字错误队列中,并且可以通过设置MSG_ERRQUEUE标志的recvmsg (2) 接收。
我假设 forge&send 例程已经在 SOCK_DGRAM 套接字上实现。然后,访问 ICMP 消息的源地址:
UDP是OSI第四层协议,ICMP也是。因此,您无法在 UDP 套接字上实现 ICMP,因为它的第四层协议已经固定为 UDP。您可以考虑编写一个需要打开原始套接字的权限的实现。然后,您要么为应用程序或您的帐户提供正确的功能,要么翻转可执行文件的 SUID 位以使其以 root 身份运行。
所以,呃,绕过这个要求是微不足道的,你认为它还会存在吗?
它旨在提供一些安全性,因此并不是很容易四处走动。
我不认为它可以做到。