免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1420 | 回复: 0
打印 上一主题 下一主题

traceroute的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-03-17 23:29 |只看该作者 |倒序浏览

怎么允许traceroute和ping通过而拒绝其他的ICMP包?
我这样做ACL:
> access-list 101  permit icmp any any echo
> access-list 101  permit icmp any any echo-reply
> access-list 101  permit icmp any any traceroute
> access-list 101  deny icmp any any
> 得到这样的结果:
> C:Documents and SettingsAdministrator>tracert 202.103.0.117
>
> Tracing route to ns1.hbwhptt.net.cn [202.103.0.117]
> over a maximum of 30 hops:
>
> 1   
> 2     *        *        *     Request timed out.
> 3     *        *        *     Request timed out.
> 4     *        *        *     Request timed out.
> 5    10 ms    10 ms    10 ms  ns1.hbwhptt.net.cn [202.103.0.117]
>
> Trace complete.
>
> C:Documents and SettingsAdministrator>
对这个问题的分析如下:
我用cisco的router做了一下。
*Mar  2 18:24:38.779: IP: s=1.1.12.1 (Serial2/0.12), d=1.1.23.3 (Serial2/0.23), len 56, access denied
*Mar  2 18:24:38.779:     ICMP type=3, code=3
*Mar  2 18:24:41.819: IP: s=1.1.12.1 (Serial2/0.12), d=1.1.23.3 (Serial2/0.23), len 56, access denied
*Mar  2 18:24:41.819:     ICMP type=3, code=3

Traceroute的时候要用到 type=3 ,code=3的icmp packet。
=====================================================
ICMP Fields:
   Type
      3
   Code
      0 = net unreachable;
      1 = host unreachable;
      2 = protocol unreachable;
      3 = port unreachable;
      4 = fragmentation needed and DF set;
      5 = source route failed.
(From RFC792)
======================================================
Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),[color="#ff0000"]所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon。(From Juniper Document)

因此,traceroute要知道这个IP是可达的需要
[color="#ff0000"]permit icmp any any unreachable

另外:
access-list 101  permit icmp any any traceroute 可以不需要。

这里使用的icmp traceroute是一种新的 traceroute的算法。(
http://www.rfc-editor.org/rfc/rfc1393.txt

这个算法比原先老的算法更加的快。而且占用的网络带宽要小。但是,前提是需要router的支持。
Cisco的traceroute是用的老的算法。(从debug信息中可以看出来。)
Windows就不知道是什么用什么了。(没有装sniffer :()


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1397/showart_16228.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP