반응형

박명우
http://www.ziwoo.net
 http://www.ziwoo.net/zb/view.php?uid=71&startPage=1&boardid=zb_ziwoo_pds

제목 : rndc 를 이용한 유동IP에 동적도메인 설정하기 - 클라이언트, 호스트

[개요]
개인적으로 필요해서 만들었는데 나름대로 유용할 것 같아서 올려봅니다.
잘 하시는분들은 한두시간이면 만들 수 있는 스크립트들이지만,
아직 개념이 부족한 분이나 공부하시는 분들께는 참고가 될 듯 싶네요..
파일 업로드가 안되므로 관련파일은 제 홈페이지 자료실에 올려 놓겠습니다.
조금전 완성해서 10여분간만 테스트 해보았으므로 사소한 스크립트의 오류등이 있을지도 모르겠네요..
혹시 발견되면 리플 달아주시고요.. 아는게 php와 javascript 뿐이라 이렇게 만들었구요.
트레이빠에 쏙~ 들어가게 만들면 좋으련만..  


[설정]
nsupdate.hta 파일에 호스트명과 서버의 도메인을 알맞게 변경하세요.
호스트명은 이미 네임서버에 등록이 되어 있어야만 합니다.
즉 IP를 갱신만 하지.. 신규로 등록하진 못합니다.

nsupdate.php 의 암호키부분을 서버의 /etc/rndc.key 파일의 안에 있는 인코딩된 암호키넘버와
같게 변경하세요.
rndc 키 생성방법등은 설명하지 않습니다.
검색엔진 등을 이용해서 별도의 문서를 참조하세요.


[테스트환경]
서버 OS : Redhat Linux 7.2
서버 네임데몬 : BIND 9.x
클라이언트 OS : windows XP


[파일설명]
nsupdate.hta
- 클라이언트 파일
- htm 파일을 확장자만 hta 로 변경하여 윈도우즈 HTML 어플리케이션으로 변경.
- 자바스크립트 <dynamic src>를 이용하여 일정한 시간 간격으로 클라이언트의 IP를 서버에 전송.

nsupdate.php
- 호스트 파일
- 클라이언트가 보낸 호스트.도메인명의 IP를 갱신하도록 BIND에 전달.

기타 아이콘 및 이미지 파일 등


[nsupdate.hta 파일 내용]
<html>
<head>
<title>NS UPDATE</title>
<meta http-equiv="content-type" content="text/html; charset=euc-kr">
<style>body,table,button,textarea{font-size:9pt}</style>

<HTA:APPLICATION
applicationName="NS UPDATE"
id="nsupdate_client"
border="dialog"
maximizeButton="no"
scroll="no"
version="0.1"
singleInstance="no"
innerBorder="no"
contextMenu="no"
icon="nsupdate.ico"
/>

<script id="dynamic"></script>
<script language="javascript">
<!--

// Domain Name
var myHost = "woorizip.ziwoo.net";
var myDomain = "www.ziwoo.net";

window.resizeTo(250,230);
dynamic.src="http://"+myDomain+"/nsupdate.php?mode=get_my_ip&my_host="+myHost;
function start_ip(){
dynamic.src="http://"+myDomain+"/nsupdate.php?mode=start_ip&my_host="+myHost;
document.all.nsicon.src="nsupdate2.gif";
document.all.status.innerHTML="Connecting..";
timmer();
}
function timmer(){
var int_time = parseInt(document.F.int_time.value) * 1000 * 60;
var_loop = setTimeout("start_ip()",int_time);
}
function stop_ip(){
if(confirm("Are you sure disconnect?")){
clearTimeout(var_loop);
document.all.button_start.style.display = 'inline';
document.all.button_stop.style.display = 'none';
document.all.nsicon.src="nsupdate1.gif";
document.all.status.innerHTML="Disonnect";
}
}
//-->
</script>
</head>

<body bgcolor="#cccccc" text="#000000" topmargin="0" leftmargin="0" onLOad="start_ip()">
<table width="250" height="50" bgcolor="FFFFFF">
<form name="F">
<tr><td align="center"><img id="nsicon" src="nsupdate1.gif"></td></tr>
</table>

<table align="center" bgcolor="CCCCCC">
<tr><td height="5"></td></tr>
<tr><td>Status: <span id="status">Disconnect</span></td></tr>
<tr><td>Host: <span id="my_host"></span></td></tr>
<tr><td>IP Address: <span id="my_ip"></span></td></tr>
<tr><td>Count: <span id="int_count">0</span></td></tr>
<tr><td>Interval: <input type="text" name="int_time" value="10" size="2"> min</td></tr>
<tr><td height="5"></td></tr>
<tr>
<td align="center">
<input id="button_start" type="button" value="Connect" onClick="start_ip();" style="display:inline">
<input id="button_stop" type="button" value="Disconnect" onClick="stop_ip();" style="display:none">
</td>
</tr>
</form>

</table>

</html>


[nsupdate.php 파일 내용]
<?
$my_host = $_GET["my_host"];

if($mode=="get_my_ip"){
?>
document.all.my_host.innerHTML = "<?=$my_host?>";
document.all.my_ip.innerHTML = "<?=$REMOTE_ADDR?>";
<?
}elseif($mode=="start_ip"){
$fh=popen("/usr/bin/nsupdate -d -y rndc-key:CdBg+0jQPycv2ejgGAy/d4==","w");
$foo=fread($fh,2);
fwrite($fh,"prereq yxdomain ".$my_host." \r\n");
$foo=fread($fh,2);
fwrite($fh,"update delete ".$my_host." \r\n");
$foo=fread($fh,2);
fwrite($fh,"update add ".$my_host." 0 A ".$REMOTE_ADDR."\r\n");
$foo=fread($fh,2);
fwrite($fh,"send \r\n");
$foo=fread($fh,2);
fwrite($fh,"quit \r\n");
$foo=fread($fh,8096);
unset($fh);
?>
document.all.my_ip.innerHTML = "<?=$REMOTE_ADDR?>";
document.all.button_start.style.display = 'none';
document.all.button_stop.style.display = 'inline';
document.all.int_count.innerHTML = parseInt(document.all.int_count.innerHTML)+1;
document.all.nsicon.src="nsupdate3.gif";
document.all.status.innerHTML="Connected";
<?
}
?>

반응형
Posted by Real_G