论坛首页 Java企业应用论坛

被忽悠:0号端口提供IIS的80端口Hello World服务?

浏览 18974 次
该帖已经被评为良好帖
作者 正文
   发表时间:2007-01-05  

被忽悠:0号端口提供IIS的80端口Hello World服务?

忽悠,完全被忽悠了一回,不仅是我,还包括老梁同志

下午在调试JmxLog4J的端口测试,我测试使用0号端口,程序运行是正常的,但是我输入
http://localhost:0/ 去访问却访问到一堆的从大到小的Hello World测试的页面出来,简直是怪事。
我换台机器访问,也是如此,于是叫老梁访问,他的访问也是这个页面。
我把程序里的端口配置为1,然后 http://localhost:1/ 这样就可以正常访问到我的应用了。

于是,我打开 netstat -a | find ":0" 看看是谁在用0号端口

  Proto  Local Address          Foreign Address        State
  TCP    HOST:http   HOST:0  LISTENING
  TCP    HOST:epmap  HOST:0  LISTENING
  TCP    HOST:371    HOST:0  LISTENING
  TCP    HOST:https  HOST:0  LISTENING
  TCP    HOST:microsoft-ds  HOST:0  LISTENING
  TCP    HOST:1088   HOST:0  LISTENING
  TCP    HOST:1062   HOST:0  LISTENING
  TCP    HOST:netbios-ssn  HOST:0  LISTENING
  TCP    HOST:netbios-ssn  HOST:0  LISTENING
  TCP    HOST:netbios-ssn  HOST:0  LISTENING

发现Foreign Address占用0号的这么多,值得怀疑的肯定是IIS了
打开管理端,发现果真IIS启动着,但是,注意了,IIS并没有占用0号端口,它是占用80端口
我把IIS停掉,然后访问 http://localhost:0/ ,这样就访问不了了,再启动,又可以访问了。
于是,才知道。。。原来是如此啊,晕了。。。你知道了吗?还是也象我一样被忽悠了一下?

   发表时间:2007-01-06  
0.0.0.0:0 是监听全网的全端口。。。最先属于Bell实验室。。现在0号段口是随机端口,在0-1024里面随机使用正在监听的端口
0 请登录后投票
   发表时间:2007-01-06  
露怯了。
0 请登录后投票
   发表时间:2007-01-06  
说实话,我是完全被忽悠了。

但忽悠过后我知道

1、http://localhost:0/ 访问这个其实就是访问这个 http://localhost/http://locahost:80/

2、0号端口说是系统的无效端口,但是还是很不明白为何Java Socket的程序却可以无休止地创建使用0号端口,建立Socket,而且不报错。别的端口如果被占用后是会异常的。
0 请登录后投票
   发表时间:2007-01-06  
你访问 http://localhost:0/ 是用 IE 的吧?你 telnet 一下就知道实际上 IE 不知道做了什么,导致能访问,至于这是 bug 还是功能,就只有 microsoft 才能解释清楚了。

一般来说 client 端的程序用 0 作端口,表示己方端口由系统分配。当然不会报错。
0 请登录后投票
   发表时间:2007-01-06  
FireFox与IE都是一样的。
0 请登录后投票
   发表时间:2007-01-07  
大概0号端口意味着缺省端口而已。
0 请登录后投票
   发表时间:2007-01-07  
dwangel 写道
大概0号端口意味着缺省端口而已。
端口:0

服务:Reserved

说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。
0 请登录后投票
   发表时间:2007-01-07  
I am absolutely sure Firefox does report connection failure when connect to localhost:0.
0 请登录后投票
   发表时间:2007-01-07  
YuLimin 写道
端口:0

服务:Reserved

说明:通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播。

你还是最好去温习一下 TCP/IP 协议栈。上边 netstat 的结果 listen 的是 foreign 端的 0 号端口,表示侦听来自所有端口的连接而已。一个 tcp socket 是一个四元数,listen 是半开的 connection,不指定远端地址则表明接受来自所有地址的连接。至于可以访问 localhost:0,这显然是 IE 把 0 作为默认端口判断了。 差点被你忽悠了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics