来自学校网络的 traceroute 和 ping

Ram*_*esh 7 networking

我在学校有一个服务器。如果我traceroute对学校网络中的某个主机执行命令,我就可以访问该主机。例如,

traceroute hostname.xxx.edu

traceroute to hostname.xxx.edu (xxx.xxx.xx.xx), 30 hops max, 40 byte packets
 1  reserved-xxx-2.xxx.edu (xxx.xxx.xxx.x)  0.858 ms  0.924 ms  0.980 ms
 2  hostname.xxx.edu (xxx.xxx.xx.xx)  0.446 ms !X  0.438 ms !X  0.423 ms !X
Run Code Online (Sandbox Code Playgroud)

同样,ping hostname.xxx.edu也工作成功。

但是,如果我尝试,

traceroute to www.google.com (64.233.160.99), 30 hops max, 40 byte packets
 1  reserved-xxx-2.xxx.edu (xxx.xxx.xxx.x)  34.605 ms  34.658 ms  34.711 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  *
Run Code Online (Sandbox Code Playgroud)

所以,当我尝试时ping www.google.com,它按预期失败了。

问题

所以根据我的理解,我学校网络的防火墙阻止了我的服务器与外界联系。这样对吗?

但是,如果我执行命令,curl www.google.com我会得到完美的输出。事实上,我在这个服务器上使用我的 shell 脚本从网站中提取了很多信息。如果防火墙阻止外部世界访问我的服务器,shell 脚本是如何工作的?

slm*_*slm 8

是的,您的防火墙完全有可能阻止跟踪路由成功。要了解为什么会失败,最好查阅traceroute手册页。

摘抄

该程序尝试通过启动带有小 ttl(生存时间)的探测数据包,然后侦听来自网关的 ICMP“超时”回复来跟踪 IP 数据包将遵循的路由到某个 Internet 主机。

我们以 1 的 ttl 开始我们的探测,然后增加 1,直到我们得到 ICMP“端口无法访问”(或 TCP 重置),这意味着我们到达了“主机”,或者达到了最大值(默认为 30 跳)。

每个 ttl 设置都会发送三个探测(默认情况下),并打印一行显示 ttl、网关地址和每个探测的往返时间。该地址后可在请求时提供附加信息。如果探测应答来自不同的网关,将打印每个响应系统的地址。如果在 5.0 秒(默认)内没有响应,则为该探测打印“*”(星号)。

所以你看到的星号是你的数据包被路由通过的服务器超时(5.0+秒),因此traceroute默认打印*.

另一件将traceroute无法工作的事情是,当沿途的服务器/路由器配置为不回复 ICMP(又名 ping)数据包时。如果不回复 ping,`traceroute 通过为每个发送到实际目的地的数据包增加 TTL(生存时间)来诱导每个服务器的技巧将失败。

注意:traceroute手册页中甚至有关于此的警告。

摘抄

在现代网络环境中,由于防火墙的广泛使用,传统的traceroute方法并不总是适用。此类防火墙过滤“不太可能”的 UDP 端口,甚至 ICMP 回声。为了解决这个问题,实现了一些额外的跟踪路由方法(包括 tcp),请参阅下面的可用方法列表。此类方法尝试使用特定协议和源/目标端口,以绕过防火墙(被防火墙视为允许类型的网络会话的开始)。

因此,根据您的配置方式,traceroute它可能会使用 ICMP、UDP 甚至 TCP 数据包来引起各种系统的响应,这些系统将您的数据包从 A 点路由到 B 点。

再次查阅traceroute手册页,注意这 3 个选项:

   -I, --icmp
          Use ICMP ECHO for probes

   -T, --tcp
          Use TCP SYN for probes

   -U, --udp
          Use UDP to particular destination port for tracerouting (instead 
          of increasing the port per each probe). Default port is 53 (dns).
Run Code Online (Sandbox Code Playgroud)

当然还有更多,请参阅可用方法列表以获取完整列表。

那么卷曲呢?

与边界防火墙(例如企业或大学)的情况一样,仅允许以端口 80 (HTTP) 和 443 (HTTPS) 为目标的流量流出。ICMP ECHO_REQUEST数据包完全有可能被大学防火墙丢弃,这可以解释为什么当您开始访问大学网络之外的服务器时会收到星号。

随着数据包通过端口 80 的出口,您可以利用这一点并告诉traceroute在特定端口(在本例中为 80)上使用 TCP 来获得您想要的。

例子

$ sudo traceroute -T -p 80 www.google.com
traceroute to www.google.com (173.194.46.81), 30 hops max, 60 byte packets
 1  byers.bubba.net (192.168.1.6)  3.265 ms  3.236 ms  3.213 ms
 2  * * *
 3  24.93.10.17 (24.93.10.17)  21.359 ms  35.414 ms  48.045 ms
 4  rdc-72-230-153-79.wny.east.twcable.com (72.230.153.79)  48.064 ms  48.044 ms  54.523 ms
 5  rdc-72-230-153-243.wny.east.twcable.com (72.230.153.243)  70.067 ms  70.013 ms  73.312 ms
 6  be35.cr0.chi10.tbone.rr.com (107.14.19.104)  73.201 ms be45.cr0.chi10.tbone.rr.com (107.14.19.106)  62.289 ms be35.cr0.chi10.tbone.rr.com (107.14.19.104)  65.485 ms
 7  ae0.pr1.chi10.tbone.rr.com (107.14.17.192)  62.056 ms  48.685 ms ae1.pr1.chi10.tbone.rr.com (107.14.17.194)  32.193 ms
 8  * * *
 9  209.85.254.130 (209.85.254.130)  42.624 ms  45.159 ms  42.777 ms
10  * * *
11  ord08s11-in-f17.1e100.net (173.194.46.81)  48.036 ms  42.543 ms  44.751 ms
Run Code Online (Sandbox Code Playgroud)


cuo*_*glm 6

所以根据我的理解,我学校网络的防火墙阻止了我的服务器与外界联系。这样对吗?

不,我想它可以阻止几乎所有流量,但至少允许TCP port 80. traceroute在 Linux 中默认 use UDP, pinguse ICMP, 作为您的输出,这些流量似乎已被防火墙阻止。

如果防火墙阻止外部世界访问我的服务器,shell 脚本是如何工作的?

如上所述,当您可以从 获得结果时curl www.gooogle.com,我确信防火墙至少允许TCP port 80UDP port 53(用于 DNS 工作)。您可以通过使用traceroute但使用来做一个简单的检查,以断言这一点TCP

traceroute -T -p 80 www.google.com
Run Code Online (Sandbox Code Playgroud)

这是我的结果:

$ sudo traceroute -T -p 80 www.google.com
[sudo] password for cuonglm: 
traceroute to www.google.com (74.125.128.103), 30 hops max, 60 byte packets
 1  172.16.50.253 (172.16.50.253)  0.133 ms  0.133 ms *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  XXX.XXX (Y.Y.Y.Y)  13.954 ms XXX.XXX (Y.Y.Y.Y)  14.198 ms X.X.X.X (123.29.10.110)  14.140 ms
 9  unknown.telstraglobal.net (134.159.208.165)  85.353 ms  85.349 ms  85.338 ms
10  i-0-2-0-3.hkth-core01.bi.telstraglobal.net (202.84.153.234)  85.780 ms  85.765 ms  85.748 ms
11  i-0-0-0-3.hkth12.bi.telstraglobal.net (202.84.153.182)  85.723 ms i-0-0-0-1.hkth12.bi.telstraglobal.net (202.84.153.150)  86.731 ms i-0-0-0-2.hkth12.bi.telstraglobal.net (202.84.153.178)  85.305 ms
12  72.14.221.126 (72.14.221.126)  51.635 ms  51.535 ms  51.177 ms
13  209.85.241.58 (209.85.241.58)  51.137 ms  51.372 ms  51.086 ms
14  209.85.253.71 (209.85.253.71)  51.601 ms 209.85.253.69 (209.85.253.69)  52.172 ms  51.888 ms
15  * * *
16  hg-in-f103.1e100.net (74.125.128.103)  51.639 ms  52.632 ms  51.670 ms
Run Code Online (Sandbox Code Playgroud)

值得学习的一课

在为防火墙(或类似的安全设备)制定规则时,黄金法则是“拒绝所有,允许特定


msw*_*msw 5

您学校的防火墙可能会阻止 TCP/80 以外的端口上的大多数出站流量,TCP/80 是 Web 流量的默认 IP 端口。

特别是 ping 和(大部分时间)traceroute 发送ICMP ECHO_REQUEST 数据包,许多公司和学校阻止所有 ICMP 流量通过他们的防火墙,因为它可用于查找防火墙后面的网络设备的信息。