JMSN은 MSNP9 이하 버젼의 파일전송 프로토콜을 사용합니다. Direct 모드로 파일을 주고 받으며, 이는 결국 파일을 보내는 사람이 NAT에 있거나 방화벽등으로 public ip를 가지지 못한다면 파일을 보낼 수 없음을 의미합니다. 파일을 주고 받는데 사용하는 TCP 포트번호는 6891 부터 1씩 증가하도록 해두었으며, Microsoft의 MSN 또한 TCP/6891 포트를 사용합니다.
하고자 하는 말인즉.. 파일을 보내려고 하는 사람의 PC에 랜카드가 여러장 있을 경우 JMSN은 무슨 주소를 사용해야하는지 혼란스러워합니다. JMSN에서는 단지 java.net.InetAddress 의 getLocalHost().getHostAddress()를 자신의 주소라고 판단하기 때문입니다. 이럴 경우 자신은 public ip 인 경우에도 파일을 보내지 못할 수 있습니다.
상대방에게 '내 주소는 여기니까 이리로 와서 파일을 받으렴' 하고 말하는데, 잘못된 주소를 넘겼다면 파일 송신이 정상적으로 될리 만무합니다. 그럴때 사용하는 System property가 있습니다. jmsn.file.host 입니다. JMSN에서는 만약 jmsn.file.host 프로퍼티가 설정되어있다면 InetAddress.getLocalHost를 사용하지 않고 jmsn.file.host 의 값을 자신의 주소로 대입시키기 때문입니다.
java -Djmsn.file.host=211.233.51.29 -jar jmsn.jar
이런식의 사용이 가능합니다. 이것은 잘 활용하면 NAT 에서도 파일을 보낼 잔머리를 굴릴 수도 있지요. JMSN을 사용하는 데스크탑의 아이피가 192.168.1.100 이지만, public ip를 가지면서 192.168.1.100 에 접근할수 있는 녀석이 있다면 (혹은 ssh의 -L 옵션을 사용한다면) jmsn.file.host는 public ip를 가지는 장비의 주소를 주고, 해당 장비에서 6891 포트로 들어오는 패킷을 192.168.1.100의 6891로 포워딩 해주면 파일을 잘 보낼수가 있지요!
이 프로퍼티는 위와 같은 상황에서 쓰려고 JMSN 초반인 2002년 초에 만들어둔 것이지만, 특별히 document 된적도 없기때문에 늦게나마 블로그로 올려봅니다. :D
Continue Reading
Discover more thoughts and insights
위험한 생각들
위험한 생각들 며칠전 습관적으로 서점에 들러 소설과 비소설을 헤매이다 오랜만에 인문학 쪽 코너를 들렀다. 언젠가부터 친구들한테 '참 위험한 발상이야' 라는 말을 듣는 편이다. 오래전부터 그랬기 때문에 별
내 개발인생 시나리오
지난주에 프리랜서 프로젝트의 종지부를 찍었다. 자바 기반의 P2P 메신져 프로젝트인데, 예쁘게 꾸미거나 노가다는 피하고 네트워크 프레임워크를 설계하고 몇가지 코어 클래스들을 만들고 통합하고 자동업데이트며,
오랜만에 푹 자기
이번주는 제 시간에 잔 적도 거의 없는데다가 금요일 밤에는 대단히 늦게까지 놀고 새벽 5시에나 잤다. 그래서 토요일을 쭈우욱 잤다. 잘잤다. 잠으로밖에 풀 수 없는 피곤함.