반응형
자바로 된 핑 프로그램에 대해 분석하다가 이상한 점을 발견했다.
JNI를 이용해서 핑 프로그램을 구현한 것이다. 웹에서 찾다보면 자바로 구현한 소스도 있는데, 왜 굳이 JNI를 썼을까 알 수가 없었는데 책을 찾아보다가 그 이유를 알게 되었다.
핑 프로그램은 ICMP(Internet Control Message Protocol)을 사용하는데, ICMP 패킷은 SOCK_RAW형식의 소켓만을 지원한다. 이런 이유로 자바에서는 제대로 된 핑 프로그램을 구현할 수 없다. 결국 대부분의 자바 네트워크 책에서 소개되는 핑 프로그램은 핑 프로그램을 흉내를 내는것 뿐이다.
JNI를 이용해서 핑 프로그램을 구현한 것이다. 웹에서 찾다보면 자바로 구현한 소스도 있는데, 왜 굳이 JNI를 썼을까 알 수가 없었는데 책을 찾아보다가 그 이유를 알게 되었다.
핑 프로그램은 ICMP(Internet Control Message Protocol)을 사용하는데, ICMP 패킷은 SOCK_RAW형식의 소켓만을 지원한다. 이런 이유로 자바에서는 제대로 된 핑 프로그램을 구현할 수 없다. 결국 대부분의 자바 네트워크 책에서 소개되는 핑 프로그램은 핑 프로그램을 흉내를 내는것 뿐이다.
SOCK_RAW의 경우는 좀 더 높은 수준의 제어를 하고 싶은 사용자를 위한 것으로, 패킷(Packet)을 전달할 때 패킷이 지나갈 경로까지도 지정할 수 있따. 이는 패킷을 받는 쪽에게 잘못된 경로의 패킷을 전송할 수도 있다는 것을 의미한다. 마치, 이미 접근을 허락 받은 클라이언트인 것처럼 잘못된 내용을 담아서 전송할 수 있다는 것이다. 이러한 이유로 보안상 문제가 발생할 수 있기 때문에 자바 언어에서는 SOCK_RAW를 지원하지 않는다.
자바 IO&NIO 네트워크 프로그래밍에서 발췌.
참고
SOCKET의 3가지 타입 - SOCK_STREAM, SOCK_DGRAM, SOCK_RAW
자바에서는 SOCK_RAW를 지원하지 않음.
반응형
'Devlopment > 정리 글' 카테고리의 다른 글
DDD와 JPA에 대해서 알아야 하는 이유 (0) | 2016.06.24 |
---|---|
함수형 프로그래밍이 주목받는 이유 (0) | 2016.04.27 |
적정 스레드 수 (0) | 2013.05.20 |
Qt(Qt Development Frameworks)란 무엇인가? (0) | 2012.04.16 |
정규식 예제 (0) | 2012.03.29 |
버전 관리 & 이슈 관리 시스템 (0) | 2011.06.07 |
C와 Java의 컴파일 과정 (1) | 2011.05.27 |
난수 발생기 (2) | 2010.06.23 |
SnmpWalk (0) | 2010.04.27 |
객체 지향 원칙 (0) | 2008.08.21 |