반응형

보통 서버의 방화벽이 open 되었는지 확인할 때 telnet 명령어를 사용합니다.

그런데, 특수한 경우 서버에서 텔넷 명령어를 사용할 수 없는 경우가 있는데 이럴때 아래의 간단한 소스로 텔넷을 대신해 포트 방화벽을 확인할 수 있습니다.


- 컴파일 -

javac PortCheck.java 


- 실행 -

java PortCheck www.naver.com 80


이렇게 실행하면 


1. 방화벽이 막혀있는 경우 커넥션 타임아웃 오류가 발생합니다.

1
2
3
4
5
6
7
8
9
10
11
Exception in thread "main" java.net.SocketTimeoutException: connect timed out
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at PortCheck.main(PortCheck.java:11)
 




2. 해당 포트가 리스닝하고 있지 않은 경우 커넥션 리퓨즈드 오류가 발생합니다. 이러면 방화벽은 열린 겁니다.

1
2
3
4
5
6
7
8
9
10
Exception in thread "main" java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at PortCheck.main(PortCheck.java:11)





3. 오류가 발생하지 않으면 방화벽도 열려있고 해당 포트도 리스닝하고 있는 상태입니다.





- 아래는 소스 파일 입니다. -


1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
 
public class PortCheck {
  public static void main(String[] args) throws UnknownHostException, IOException {
    SocketAddress endpoint =  new InetSocketAddress(args[0], Integer.valueOf(args[1]));
    new Socket().connect(endpoint, 3000);
    System.out.println("OK");
  }
}
 



반응형

+ Recent posts