d.h*_*ill 6 c udp traceroute raw-sockets icmp
我必须写一个trceroute脚本,但我不确定我的尝试是否正确.
现在我就这样做(如果我做错了或笨拙,请纠正我):
有没有更好的方法来改变TTL而不是使用sock_raw,我必须自己定义所有的标题?打开ICMP袜子时,我应该为socket()使用什么参数?如何收到ICMP答案?
您的目标平台是什么?这是来自OpenBSD 源代码的BSD 风格:
if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)) < 0)
err(5, "icmp socket");
if ((sndsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0)
err(5, "raw socket");
Run Code Online (Sandbox Code Playgroud)
我相信,在 Linux 上,您需要将IP_RECVERR和recvmsg(2)与MSG_ERRQUEUE, see一起使用ip(7)。