本帖最后由 ttuiop 于 2010-04-29 17:14:30 编辑

解决方案 »

  1.   

    可以用telnettelnet IP地址 端口
      

  2.   

    21这个端口是FTP专用的
    要是自己的用其他的端口最好1000以上的
      

  3.   

    不是楼上说的意思我在用java做端口扫描器public Socket(String host,
                  int port)
           throws UnknownHostException,
                  IOException
    这是API里的构造方法我看网上别人做的java扫描器,new socket(ip,port)如果出异常,就认为端口没有打开。但是当端口为21的时候,ip除了本机地址,是别的任何地址,不管那个ip存在不存在,也不管21端口打开没打开,都没有exception。判断不了21端口是否打开。有什么办法判断21端口是否开放
      

  4.   

    怎么可能啊,肯定会报异常的,可能不会马上出现异常,因为socket是有时间限制的,时间到了才会抛出异常try {
    Socket socket=new Socket("111.111.111.2",21);
    } catch (UnknownHostException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }十几秒以后java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:519)
    at java.net.Socket.connect(Socket.java:469)
    at java.net.Socket.<init>(Socket.java:366)
    at java.net.Socket.<init>(Socket.java:180)
    at run.Test.main(Test.java:15)
      

  5.   

    我再测试一次。。
    import java.net.*;
    import java.io.*;public class Test21 {
    public static void main(String[] args) {

    try {
       Socket socket=new Socket("111.111.111.2",21);
      } catch (UnknownHostException e) {
       System.out.println("21端口抛出的异常");
          e.printStackTrace();
      } catch (IOException e) {
       System.out.println("21端口抛出的异常");
          e.printStackTrace();
      }
      
    try {
       Socket socket=new Socket("111.111.111.2",22);
      } catch (UnknownHostException e) {
       System.out.println("22端口抛出的异常");
          e.printStackTrace();
      } catch (IOException e) {
       System.out.println("22端口抛出的异常");
          e.printStackTrace();
      }
    }
    }运行结果:22端口抛出的异常
    java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at Test21.main(Test21.java:18)
    发呆中,崩溃ing
      

  6.   

    #7楼   可以说详细点吗?
    对方机器没打开的端口,连接过去应该都是超时的,为什么21端口的反应就不一样呢?现在改了扫描方式,不用直接用new Socket()
    用下面的方式,设置timeout为50try {  
    SocketAddress sa = new InetSocketAddress(ip,port);
    Socket temp=new Socket();
    temp.connect(sa, timeout);
    temp.close();
    System.out.println(ip + ":" + port);
    }catch(Exception e) {
    }扫描结果仍然所有机器的21端口打开
    网上逛了几天,发现了个Jpcap,或者该从底层弄了囧
      

  7.   

    No。
    用Socket去扫描一个本机地址以外的任何IP,只要是21端口,就算没有那个IP的主机,不抛异常囧囧囧囧囧囧囧囧
      

  8.   


    public class Test21 {
     public static void main(String[] args) {
            
            try {
              Socket socket=new Socket("111.111.111.2",21);
          } catch (UnknownHostException e) {
              System.out.println("21端口抛出的异常");
              e.printStackTrace();
          } catch (IOException e) {
              System.out.println("21端口抛出的异常");
              e.printStackTrace();
          }
          
            try {
              Socket socket=new Socket("111.111.111.2",22);
          } catch (UnknownHostException e) {
              System.out.println("22端口抛出的异常");
              e.printStackTrace();
          } catch (IOException e) {
              System.out.println("22端口抛出的异常");
              e.printStackTrace();
          }
        }
    }这个是你的程序,我在我机子上运行,21,22都出现异常,打印结果如下:
    21端口抛出的异常
    java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at csdn4_29.Test21.main(Test21.java:11)
    22端口抛出的异常
    java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at csdn4_29.Test21.main(Test21.java:21)
    估计是你机子哪里出了问题·
      

  9.   

      我觉的不一定非要用socket 去判断端口啊  可以用Java去cmd命令吧
      

  10.   

    回13#:cmd有探测目标机器端口是否开放的命令吗?我只知道netstat能看到自己机器的端口是否开放,而且java调cmd也不是我弄这个的目的。回12#:换了台机器试,结果21端口的反应都正常了,抛异常
    但是变成25端口都不正常,不抛异常        
    我 !@#$#%#%$^#*&^*&^%*%%我机器没装什么程序,就360安全卫士,antiarp防火墙,QQ常开着。把所有程序关掉,剩下explorer和一些系统的进程,都还是扫描对方21端口出问题。中病毒也不至于把机器搞成这么奇怪啊。
    没法了重装系统去。
      

  11.   

    系统重装N次,还是21端口的问题今天早上,去用别的电脑运行程序,出来正常结果了回去突然想起还有一个windows自带的防火墙
    关掉之后,一切正常之前重装了系统还有问题,应该是防火墙会自动打开
    原因仍然不明白,怎么说,也不至于windows的防火墙把所有别的IP的21端口,都给连通了不过问题搞定了,结贴吧。