3

获取原始套接字需要 root 权限,而 tcp/udp 没有它,所以我需要知道如何获取 udp 套接字并获取 icmp 数据。编程语言是 C,操作系统是类 BSD。

(换句话说我想写一个没有root权限的ping)

4

3 回答 3

2

您可以在没有 root 权限的情况下编写 UDP ping。

当启用IP_RECVERR选项时,所有错误都存储在套接字错误队列中,并且可以通过设置MSG_ERRQUEUE标志的recvmsg (2) 接收。

请参阅 UDP 手册。

我假设 forge&send 例程已经在 SOCK_DGRAM 套接字上实现。然后,访问 ICMP 消息的源地址:

  • 设置套接字选项以接收错误 (IP_RECVERR)
  • 在错误队列 (MSG_ERRQUEUE) 上调用 recvmsg()
  • 解析返回的结构(msghdr 和 iovec),它包含 ICMP 发布者的源地址。
于 2015-03-27T14:50:26.770 回答
0

UDP是OSI第四层协议,ICMP也是。因此,您无法在 UDP 套接字上实现 ICMP,因为它的第四层协议已经固定为 UDP。您可以考虑编写一个需要打开原始套接字的权限的实现。然后,您要么为应用程序或您的帐户提供正确的功能,要么翻转可执行文件的 SUID 位以使其以 root 身份运行。

于 2012-10-26T14:59:50.880 回答
-2

所以,呃,绕过这个要求是微不足道的,你认为它还会存在吗?

它旨在提供一些安全性,因此并不是很容易四处走动。

我不认为它可以做到。

于 2012-10-26T13:10:02.810 回答