c - 如何在 UNIX 上的 udp 套接字上获取 icmp

标签 c unix udp ping icmp

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

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

最佳答案

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

When the IP_RECVERR option is enabled, all errors are stored in the socket error queue, and can be received by recvmsg(2) with the MSG_ERRQUEUE flag set.

See the UDP manual.

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

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

关于c - 如何在 UNIX 上的 udp 套接字上获取 icmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13087097/

相关文章:

c - 用于内核开发的 LInux 与 BSD

c - 如何在 C 中计算 2⁶⁴/n?

c - 如何在 apache 2.2 服务器上运行 c 程序?

linux - 如何创建不带参数 $1 和 $2 的字符串=$*

linux - 我如何将多个目录展平并叠加到一个目录中?

c - 在选择中响应 ICMP

C 数组分配过程 - 一次或单独 - 部分数组分配 - 不同的输出

bash - 带有打开编辑器的命令的 xargs 使 shell 处于奇怪的状态

java - 通过udp传输文件

python - UDP数据包应该多久发送一次?