소스 코드 https://github.com/yu-young-hoon/csharp_ddns_sender

실행 파일 ddns_setting.zip



 간단하게 DNSZi의 관리 프로그램을 따라해보고 약간 아쉬운 점이 있었는데


 첫번째로 로그인 기능과 로그인 정보 저장 기능

 사실 로그인이라기 보다는 아이디와 ddns 세팅의 인증키로 올바른 값인지 체크해주는 기능이지만

 기존 프로그램에서 아이디와 ddns 세팅키를 저장해줘서 컴퓨터를 재부팅 할때 마다 인증키를 찾아보지 않아도 되서 편리했었다.


 두번째로 Dynamic DNS 호스팅 목록 가져오기

 DDNS로 설정해둔 호스트의 경우 목록을 가져오고 이외의 목록은 표시해주지 않는 기능과 부가적으로 이전에 세팅해두었던 업데이트 목록을 저장해두는 기능이 있었다.


 세번째로 위에 기능을 적용하면서도 내가 사용하려는 기능에 비해 4개의 탭을 왔다갔다 하며 로그를 보고 설정하는게 답답해서 한페이지였으면 좋겠다는 생각을 했다.


 이런 기능들을 추가 하기 위해서 API를 확인 해볼 필요가 있었는데 아쉽게도 공개된 API 목록이 없었기 때문에 Wireshark로 사용되는 API의 URI와 Parameter를 확인해 보았다. 



 기존 프로그램은 총 4개의 API를 GET Mathod를 통해 사용하고 있었고 debug=ok라는 파라메터를 통해 로그를 받아 볼수 있었다.

 auth의 경우 아이디와 세팅의 인증키로 올바른 값인지 확인하는 기능

 get의 경우 DDNS으로 설정한 호스팅 목록을 가져오는 기능

 ip의 경우 whatismyip 사이트 처럼 외부에서 바라보는 내 컴퓨터의 Public IP를 확인해주는 기능

 set의 경우 DDNS로 설정한 호스트를 업데이트 하는 기능으로 ip 파라메터를 통해 임의 값을 지정 할 수도 있었다.


 set API 경우 IP를 임의로 지정할 필요 없이 파라메터를 생략한다면 ip API에서 나오는 내 컴퓨터의 Public IP로 지정이 되고 임의 IP를 지정해서 설정하는 것은 DNSZi 홈페이지에도 가능한 기능이고 필요 없기 때문에 생략 하였다.


 get API를 통해서 나오는 값은 XML 형식의 데이터로 status를 제외한 값은 cdata-section으로 감싸져 있었고 도메인 자체의 DDNS의 경우 "@" 값이 record로 나왔다.

 request로 불러들인 값을 C#의 기본 XmlDocument로 파싱하고 Json 형식으로 변환해서 사용하려고 하였지만

 ddns 태그의 반복을 파싱하지 못하고 Document가 미완성 되서 생성 되었다.

 문자열 정규식을 통해서 Matche된 DDNS태그 덩어리를 가져오고 해당 Matche의 원하는 cdata-section의 값을 Group으로 가져와서 처리하였다.

 DDNS 태그 덩어리가 없는 auth API와 set API의 경우는 파싱이 잘 진행되어서 그대로 사용할수 있었다.




 기존 프로그램과 같이 로그의 경우 msg 태그의 값을 그대로 찍어 주었고

 로그인 정보와 선택된 호스팅 목록 저장 기능은 yaml 파일에 저장하는걸로 간단히 구현해 보았다.



 심심하기도 하고 필요하기도 해서 간단하게 만들어 본다고 했지만 모양이 너무 안예쁘게 나온것 같다. 로그를 하루마다 파일로 빼서 저장하거나 Clear하는 기능은 나중에 추가해 봐야겠다. 시간 설정 부분의 경우 보기도 안 좋고 기존 프로그램의 기본값인 5분이면 충분하다는 생각으로 설정하였다.


 X 버튼을 눌러도 종료되지 않고 작업표시줄에 Notify Icon을 표시해서 더블 클릭하면 다시 보이도록 하였고 

 Notify Icon 우클릭해서 종료를 하게 하였다.


 IP의 경우 랜선을 뽑거나 네트워크가 끊겼을 경우는 네트워크 오류 메세지가 출력 되도록 했고 랜선을 다시 꼽거나 네트워크가 정상이 되었을때는 다시 정상으로 갱신된다.

 IP 값을 지정하거나 서버에서 불러온 값으로 갱신하는것이 아니라 DNSZi가 내컴퓨터를 외부에서 바라보는 IP로 되도록 파라메터를 넣지 않았기 때문에 IP값이 잘못된 값이 들어갈 경우는 없을 것 같다.



 추후 심심할때 해볼것 기록

 - Log 파일로 출력, Log Clear

 - 컴퓨터 재부팅시 자동 실행

 - 버튼 여러번 눌리는거 막기

 - 이쁘게 바꿔보기

+ Recent posts