这里发生了一些非常奇怪的事情。我尝试从网络内的一些机器访问一个网站,但就是无法访问,而其他机器可以正常访问。该网站是 online.sefaz.am.gov.br。为了排除所有与浏览器相关的问题,我正在使用 telnet 进行测试。
我从我的 Macbook 上得到以下信息:
$ telnet online.sefaz.am.gov.br 80
Trying 200.242.61.43...
Connected to online.sefaz.am.gov.br.
Escape character is '^]'.
从 Windows XP 盒子(在 Macbook 上运行的虚拟机)中,我得到了这个:
C:\Documents and Settings\Administrator>telnet 200.242.61.43 80
Connecting To 200.242.61.43...Could not open connection to the host, on port 80: Connect failed
请注意,在 Windows 机器上,我尝试直接远程登录 IP 地址,这样就排除了 DNS 问题。我的防病毒软件已禁用,Windows 防火墙也已禁用。
虚拟机的网络接口是桥接的,因此它在我的网络中获得了一个有效的 IP。我还注意到一些非常奇怪的事情:如果我将虚拟机上的网络接口更改为 NAT,我就可以正常访问该网站。
我的网络中确实有一个域控制器,但我不知道有任何组策略可以阻止 IP。
所以我的问题是:你见过这样的事情吗?如果见过,该如何解决?
编辑
我从无法在浏览器上打开该网站的计算机上对该网站运行了 nmap。结果如下:
Starting Nmap 6.25 ( http://nmap.org ) at 2013-02-15 14:31 Pacific SA Standard Time
Nmap scan report for online.sefaz.am.gov.br (200.242.61.43)
Host is up (0.18s latency).
Not shown: 996 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
8080/tcp open http-proxy
8443/tcp closed https-alt
TRACEROUTE (using port 8443/tcp)
HOP RTT ADDRESS
1 ... 10
11 160.00 ms 200.242.61.43
Nmap done: 1 IP address (1 host up) scanned in 46.01 seconds
编辑2
所以我买了一个无法访问网站的盒子,并将其直接连接到我的互联网链接。什么都没有改变。我仍然无法访问该网站。然后,我把机器从我的网络上拔下来,用 3G USB 棒把它连接到互联网。猜猜怎么着?它成功了。所以合乎逻辑的结论是问题出在我的互联网链接的某个地方。
别急...我正在打字的这台电脑正在使用互联网链接,能可以正常访问网站。想想吧!
答案1
根据telnet“连接失败”的错误,无法建立TCP连接。使用tcptraceroute找出哪个主机正在过滤你的请求。
这可能是路由问题或防火墙问题。
使用网络捕获程序(如 WireShark),并在启动 telnet 时检查 ICMP 消息或 TCP/RST 消息。
nmap 和 telnet 发送的 SYN 数据包不同。telnet 发送的 SYN 数据包设置了选择性确认 (SACK)。
看起来远程服务器正在过滤使用 SACK 的 TCP 数据包。
要禁用 SACK,请启动注册表编辑器并更改HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\SackOpts
为0
。
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"SackOpts"=dword:00000000
0 = disabled; 1 = enabled
有关 SACK 的详细信息,请参阅此答案:何时关闭 TCP SACK?