我正在尝试创建一个traceroute
程序,但这与编程没有直接关系。
我注意到我的路由器不会对 TTL 为 1 的 ping 命令做出超出时间的响应,这是有问题的,因为这意味着我无法“追踪”它。
如果我使用大于 1 的 TTL 值通过路由器 ping 连接(例如,连接到 Google 服务器),下一跳会按预期响应超时。但如果我尝试使用 TTL 为 1 的 ping 连接,则根本得不到任何响应;没有 ping 响应,也没有超时响应:
这是预期行为吗?我的预期是路由器应该接收 TTL 为 1 的数据包,将 TTL 减为 0,然后触发超时回复并发送回去。我想知道这是否是典型行为,以确保这是路由器的“故障”,而不是我理解的故障。
我目前没有能力将另一个路由器引入网络来测试这是否是我的特定路由器的怪癖。
对于熟悉 Scapy 的人来说,这说明了问题:
# No response. Times out and returns nothing.
sr1(IP(dst="google.com", ttl=1) / ICMP(), timeout=5)
# Returns a Time Exceeded immediately from the next hop past my router.
sr1(IP(dst="google.com", ttl=2) / ICMP(), timeout=5)
该路由器是华硕 RT-AC1750
这似乎更适合网络工程,但他们似乎有一个难的要求你的问题与家庭网络无关,而且他们一问问题,我就会很明显地知道我使用的是家庭网络。阅读他们的 Meta,Super User 似乎适合提出家庭网络类型的问题。