보통 서버의 방화벽이 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"); } } |
'java' 카테고리의 다른 글
spring boot - @Scheduled Test (2) | 2017.09.19 |
---|---|
netty - IoBuffer vs ChannelBuffer (0) | 2017.09.18 |
jdbc connection reset (0) | 2017.09.09 |
java - spring - MultipartFile transferTo FileNotFoundException (2) | 2017.09.06 |
spring boot context path (0) | 2017.08.31 |
java - html img 태그 파싱 및 변환 (2) | 2017.08.30 |
java - list random shuffle (0) | 2017.08.23 |
spring boot logback 기본 spring.log 위치 변경하기. (0) | 2017.08.22 |