제가 upnp를 이용한 포트포워딩 리스트를 NAT에 등록시키는 프로그램을 열심히 C#으로 (....??)만들고 있습니다.
어쩌다 보니 구하게 된 C++언어로 된 upnp로 포트포워딩 하는 소스코드는 Natupnp.h, UPnP.h라는 제가 알지 못하는 헤더만 쓰더라구요..;;
그래서 NAT의 원리를 이해해보고자 직접 C#으로 된 코드를 구하여 하나씩 분석해보고 있는데....
(* 즉, 현재 제가 들고 있는 것은 C#으로 된 코드, C++로 된 코드 입니다.)
C#으로 된 코드는 브로드 캐스팅을 하여 직접 NAT장비를 찾고 해당 장비가 upnp를 지원하는지 메시지를 보내어 지원하면 외부 ip를 받아와서 포트포워드 등록을 하는 동작을 하더라구요....
그런데 어째서인지 제 공유기는 upnp가 허용되어 있음에도 불구하고 C#으로 된 코드는 동작 중간에 멈추더라구요...;;;
그래서 원인을 살펴보니 이 코드는 NAT가 DeviceType이 InternetGatewayDevice이면서 WANIPConnection이라는 서비스를 지원하면 해당 서비스로 GetExternalIPAddress명령을 보내어 외부 IP주소를 얻고 그 IP주소를 upnp로 포트포워딩 하는 것인데.... 제 공유기는 InternetGatewayDevice가 아닌 MediaDevice로 뜨더라구요..;;(그리고 WANIPConnection이라는 서비스 또한 존재하지 않았습니다.)
그래서 ConnectionManager라는 서비스로 GetExternalIPAddress라는 메시지를 보내봤는데 HTTP 에러코드 415(Unsupported Media Type)가 뜨더라구요..;;;
음..... 너무 횡설수설 한거 같으니 제 질문만 정리합니다...
1. NAT가 InternetGatewayDevice인지 MediaDevice인지는 제조시 결정되는건가요?
2. 좀더 간단히 upnp를 이용한 포트포워딩 방식을 설명한 사이트나 책을 추천해주세요..ㅠㅠ
3. 아니면 Natupnp.h나 UPnP.h를 C#라이브러리로 변경한 것을 구할 수 있을까요...???
부탁 드립니다..ㅠ