当前位置: 首页 > 知识库问答 >
问题:

为什么traceroute发送UDP数据包而不是ICMP数据包?

姬衡
2023-03-14

根据Stevens(图示为TCP/IP),traceroute程序用增量TTL(1、2、3等)向目的主机发送UDP数据包,以从ICMP TTL过期消息中获取中间跳信息。
“到达目的地”条件是ICMP端口无法到达的消息,因为traceroute寻址的随机端口数量很高(也就是说,不太可能有人在那里监听)
所以我的问题是:是否有技术原因(缺点、RFCs等)使用UDP数据包而不使用例如ICMP回送请求消息(随着TTL的增加)并使用回送应答答案作为结束条件?
我知道ICMP回送应答可能会被防火墙或其他网络设备在中间过滤掉,但我想这也可能发生在UDP数据包上;)

非常感谢
塞尔吉奥

共有1个答案

索寒
2023-03-14

这实际上是执行跟踪的“旧”方法。我想主要的动机是发送普通的UDP数据包不需要特殊的特权,就像发送ICMP数据包一样(原始套接字或等价物)。这就是为什么ping通常是setuid到root,这在安全性方面是一个很大的风险。

现在traceroute也支持ICMP和TCP探测数据包,因此您更有可能偷偷通过防火墙,而不是不加考虑地部署防火墙。这也意味着traceroute可能也是系统上的setuid根。请参阅它的手册页,特别是关于可用方法的部分:http://linux.die.net/man/8/traceroute

 类似资料:
  • 我正在尝试编写一个非常简单的UDP客户机/服务器对,它将在同一台计算机上一起工作(目前),但是我的包没有一个被传送。以下代码是一个100%完整的VB.NET控制台应用程序。它运行时不会抛出错误,但是mListener。接收命令从不返回。 问题 1:为什么我没有收到任何数据包? 问题2:为什么我不能让我的客户使用IP地址。有没有终点?当我尝试连接到NewIPEndPoint(IPAddress.An

  • 所以,这可能是一个愚蠢的问题,但据我所知,如果我通过TCP或UDP发送数据,如果组成该TCP/UDP数据包的任何一个IP数据包被丢弃,整个TCP/UDP数据包将被重传,但我的问题是为什么我们不能只发送丢失的部分数据吗?目前,我对此的唯一推理是,如果我们要为收到的每个IP数据包发送确认字符,这将增加网络拥塞。这是正确的,还是有其他原因,当只有一个或几个IP数据包被丢弃时,我们必须重新发送TCP/UD

  • 问题内容: 即使已经存在一个类似的主题,我也注意到它可以追溯到两年前,因此我认为打开一个新主题更为合适。 我试图弄清楚如何从Linux内核(3.3.4)发送UDP数据包,以便监视随机数生成器(/drivers/char/random.c)的行为。到目前为止,由于sock_create和sock_sendmsg函数,我已经设法监视了一些事情。您可以在此消息的末尾找到我使用的典型代码。(您可能还希望在

  • 我们有一个场景,(UDP客户端程序)向(UP服务器)发送UDP数据包 TCP在数据通信开始之前和结束之后执行握手。UDP没有。 那么,运行在上的应用程序失败的原因是否是上的服务器程序没有准备好(关闭)接收UDP数据包?

  • 我创建了某种类型的客户机/服务器应用程序,它有自己的数据ACK系统。由于某些限制,它最初是用TCP编写的,但它的基础是考虑到UDP编写的。 我发送到服务器的数据包有自己的封装(数据包id和数据包大小报头。我知道UDP还有一个校验和,所以我没有为此添加报头),但是TCP是如何工作的,我知道服务器可能接收不到整个数据包,所以我收集并缓冲了接收到的数据,直到收到一个完整的有效数据包。 我想知道的是:如果