달력

22025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

System.useCodepage = true;
xmldoc = new XML();
xmldoc.onLoad = loaded;
xmldoc.ignoreWhite = true;
xmldoc.load("/list.do?boardId=news&currPage=1");

var virtualNumArr = new Array();

function loaded(success) {
   if (success == true) {
      var ref = xmldoc.firstChild;
      for (var ch = ref; ch != null; ch=ch.nextSibling) {
  
    if(ch.hasChildNodes){
   parsing(ch);
  }
      }
      this.stop();
  
   } else {
      trace("parsing failure T.T"); 
   }
}

function parsing(src){
 for(var i = 0; i < src.childNodes.length; i++){
  var ch = src.childNodes[i];
  if(ch.hasChildNodes){
   if(ch.nodeName != null){
       trace(ch.nodeName + " / " + (ch.firstChild.nodeValue == null ? "공백처리" : ch.firstChild.nodeValue)) ;
   }
   // 재귀
   parsing(ch);
  }
 }
}

 

일단 여기까지 해서 xml 파싱 까지는 했음.... 출력되는것 보면 잘 됨..

한가지 이상한거는 차일드 노드에서 nodeName 은 잘 나오는데.. nodeValue 는 자식으로 인식한다는게 이해가 안감...

의심 가는 부분은

<element>

   value

</element>

와 같이 개행이 들어간것과...

<element>value</element> 와 같이 한줄로 된 경우...

<element param1="value1" /> 과 같이 할 경우...

 

요 세가지 중에.. 첫번째 부분처럼 각 행이 분리된 경우는 해당 값을 childNode 로 생각하는것 같음...

 

이제 파싱된 데이터 들을... 번호, 제목, 작성자, 날짜, 조회수 등으로 분리해서 그림에 가져다

붙이고... 링크 걸고.. 하면 끝날꺼 같은데....

결정적으로 Flash 를 해본지 이제 만 하루 되었다는데 문제가 있음 ㅠㅠ

 

 

'이것저것 > 낙서장' 카테고리의 다른 글

블로그에 옷입혔어요 ^^  (0) 2004.09.02
리플을 달아주세여~~  (0) 2004.08.31
[펌] Legend of 1900 - 제리 롤 모튼 VS 1900  (0) 2004.08.23
[크헉... 술취한 고오오옴]  (0) 2004.08.20
흠... 내가 문제야 ㅠㅠ  (0) 2004.08.13
Posted by tornado
|

게시판을 플래쉬로 가잰다...

 

그래서.... 알아본 결과.... &val_1=xxx&val_2=yyy 와 같은 방식과..

 

XML 로 데이터를 날려서.. 플래쉬에서 xml 을 파싱하는 방법이 있더만...

 

결국 xml 로 하기로 했음.... xml 로 만드는 툴은 jdom 을 선택

 

그래서리... 급조하여 아래의 코드가 나옴 ㅡㅡ

 

덕분에 Action 클래스가 300 줄에 육박 ㅡㅡ 미챠~~~

 

플래쉬에서 파일 업로드는 어케 허나... 환장하겠네 ㅡㅡ

 

//------------------------------------------------------------
  //  게시판 리스트 XML 생성
  //------------------------------------------------------------
  
  Element rootEL = new Element("board-list");
  
  Document doc = new Document(rootEL);
  
  Element articles = new Element("articles");
  
  rootEL.addContent(articles);

  Element articleElement = null;
  
  int virtualNum = p.getVirtualNumber();
  
  while(iter.hasNext()){


   dyna = (DynaBean)iter.next();

 

   articleElement = new Element("article");
   
   Element[] ele = new Element[fieldNames.length];
   
   for(int i = 0; i <fieldNames.length; i++){
    
    ele[i]= new Element(fieldNames[i]);
    
    // 가상 번호 적어주기.
    if("virtualNum".equals(fieldNames[i])){
     
     ele[i].setText("" + virtualNum);
     
    }else if("regidate".equals(fieldNames[i])){
     
     ele[i].addContent(BoardUtil.modifyDate(dyna.get(fieldNames[i]).toString(), true));
     
    }else{
     
     ele[i].addContent(dyna.get(fieldNames[i]).toString());
     
    }

    articleElement.addContent(ele[i]);    
       
   }

 

 

Posted by tornado
|




< 출처 : japi.net >

끝까지 보세요. 정말 멋집니다.

'이것저것 > 낙서장' 카테고리의 다른 글

리플을 달아주세여~~  (0) 2004.08.31
xml 데이터를 flash 에서 파싱하기  (0) 2004.08.26
[크헉... 술취한 고오오옴]  (0) 2004.08.20
흠... 내가 문제야 ㅠㅠ  (0) 2004.08.13
[펌] 므흣  (0) 2004.08.13
Posted by tornado
|
SNMP개요및 설치,운용
Posted on 2003/4/23
Topic:
네트웍 프로그래밍
article_SNMP_개요위키 홈으로

SNMP

윤 상배

dreamyun@yahoo.co.kr

교정 과정
교정 0.8 2003년 4월 20일 21시
최초 문서작성


1절. 소개

개인적으로 최근들어 SNMP에 관심을 가지게 되었다. (실은 상당히 오래되었지만) 그래서 앞으로 몇부? 에 걸쳐서 SNMP관련 강좌를 개설하고자 한다. 강좌는 SNMP개요및 설치운용에서 부터 시작해서 프로그래밍을 통해서 SNMP응용 애플리케이션을 제작하고, 확장 MIB(뒤에 설명한다)를 작성하는 것 까지를 다룰것이다.

이번글은 그중 첫번째 글로 SNMP개요와 설치및 운용에 대한 글이다. 설치및 운용은 실제 어떻게 작동되는지 눈으로 확인하는 차원의 수준에서 이루어질 것이며, 설치되는 snmp애플리케이션의 상세설치와 높은 수준에서의 운용에 대해서는 언급하지 않을것이다. 이러한 것들은 (필요할경우)해당 snmp애플리케이션의 메뉴얼을 참고해서 개인적으로 학습해야만 할것이다.

여기에서 얻은 지식은 나중에 SNMP애플리케이션을 제작하는 밑거름이 될것이다.


2절. SNMP개요

2.1절. SNMP란 무엇인가

SNMP는 Simple Network Management Protocol의 약자이다. 해석을 해보자면 간단한 네트워크관리를 위한 규약 인데, 말그대로 SNMP는 네트워크관리를 위한 용도로 사용되는 프로토콜이다. 가장 앞에 Simple라는 단어가 붙어있는데, 진짜로 간단한 프로토콜인지 아닌지는 사람에 따라 약간씩 차이가 있을수 있다. 필자가 보기엔 그리 복잡한 프로토콜은 아닌것 같은데, 어떤 사람들은 매우 복잡한 프로토콜 이라고 말하는 사람들도 있다.

그럼 먼저 SNMP가 나타난 배경에 대해서 알아보도록 하겠다. SNMP가 쓰이기 전에 일반적으로 사용되는 네트워크 관리는 ICMP에 의존했었다. ICMP는 Network계층의 프로토콜로써, 운영체제에 관계없이 사용할수 있는 간단한 프로토콜이였다. 이 프로토콜을 이용해서 우리는 네트워크로 연결된 각각의 호스트가 작동하고 있는지, 작동한다면 어느정도의 응답시간을 가지고 작동하는지 등의 간단한 정보를 얻을수 있었으며, 초기에는 이정도로도 필요한 네트워크 관리가 가능했었다. ICMP를 이용한 가장 유용한 도구는 아마도 ping 프로그램일 것이다.

그러나 인터넷의 사용이 보편화되고 네트워크에 연결된 호스트의 수가 증가하자 거기에 따라서 네트워크 구성역시 복잡해지고, ICMP만을 가지고는 이러한 네트워크의 관리를 효율적으로 할수 없게 되었다.

그래서 몇가지 프로토콜에 대한 연구가 진행되었고, SGMP, HIMS, CMIP/CMIS등이 제안되게 되었다. 이중에서 SGMP를 발전시킨 SNMP가 사실상 네트워크 관리를 위한 표준적인 프로토콜로 자리잡게 되었다. 다른 프로토콜들이 사용되지 않은데에는 몇가지 이유가 있었다. CMIP/CMIS는 너무 방대하고 너무 복잡했으며, HEMS의 경우에는 실제 적용사례가 적었기 때문이다.

어쨋든 SNMP는 거의 대부분의 운영체제에서 사용되어 지고 있다. 여러분이 사용하는 Linux, 그밖의 대부분의 유닉스와, 윈도우계열 운영체제는 기본적으로 SNMP프로토콜을 사용하는 도구들을 제공하고 있다. 그외에도 router등 TCP/IP를 네트워크 프로토콜로 사용되는 운영체제들 역시 SNMP는 필수적으로 제공하고 있다.


2.2절. SNMP로 할수 있는 것들

SNMP를 이용해서 할수 있는 것들은 다음과 같다.

네트워크 구성관리

네트워크상의 호스트들이 어떤 구조를 이루고 있는지 지도를 그리는게 가능하다.

성능관리

각 네트워크 세그먼트간 네트워크 사용량, 에러량, 처리속도, 응답시간 등 성능 분석에 필요한 통계정보를 얻어낼수 있다.

장비관리

SNMP의 주목적이 네트워크관리관리 이기는 하지만 SNMP특유의 유연한 확장성을 이용하여서 시스템정보(CPU, MEMORY, DISK 사용량)의 정보를 얻어올 수 있도록 많은 부분이 확장되었다. 이 정보는 네트워크문제를 해결하는데 큰도움을 준다. 예를들어 특정 세그먼트의 네트워크 사용량이 갑자기 급증했는데, 특정 호스트의 CPU사용율까지 갑자기 증가했다면, 우리는 해당 호스트에서 문제가 발생했을것이란걸 유추해낼수 있을것이다.

보안관리

정보의 제어 및 보호 기능, 최근버젼인 SNMP3는 특히 정보보호를 위한 기능이 향상되었다.


2.3절. SNMP를 통한 망의 구성

SMTP는 인터넷상에서 메시지를 교환하기 위한 프로토콜로 사용되며, 주로 전자메일 교환을 위해서 사용되는 프로토콜이다. 그러나 SMTP는 어디까지나 프로토콜일 뿐이며, 실제 메시지를 인터넷상에서 주고 받기 위해서는 SMTP프로토콜을 사용하는 SMTP서버(Sendmail같은)와 SMTP클라이언트(mutt, pine같은)가 준비되어 있어야만 한다.

SNMP역시 그자체로는 프로토콜일 뿐이며 SNMP프로토콜을 활용해서 실제 네트워크 관리 정보를 얻어오기 위해서는 응용 애플리케이션이 준비되어있어야만 한다. 보통의 네트워크프로토콜을 사용하는 애플리케이션이 서버/클라이언트 모델로 구성되듯이 SNMP역시 서버와 클라이언트로 구성된다.

그림 1. SNMP망 관리 시스템

일반적으로 SNMP망 에서는 서버/클라이언트라고 부르지 않고 snmp manager/snmp agent라고 부른다. snmp agent는 관리대상이 되는 시스템에 설치되어서 필요한 정보(네트워크 혹은 시스템)를 수집하기 위한 snmp 모듈(혹은 애플리케이션) 이며, snmp manager은 snmp agent가 설치된 시스템에 필요한 정보를 요청하는 snmp 모듈이다. snmp agent는 서버, snmp manager은 클라이언트로 생각하면 이해하기가 좀더 수월할 것이다(그러나 반드시 agent가 서버, manager이 클라이언트가 되는건 아니다. 그냥 개념적으로 이해만 하고 있도록 하자).

2.4절. MIB에 대해서

SNMP는 네트워크를 관리하기 위한 프로토콜이다. 그렇다면 무엇을 관리할 것인가(관리객체)를 결정해야 할것이다. 관리객체를 결정했다면, 이러한 관리객체를 효과적으로 관리하기 위해서 이를 분류해야 할것이다. 이게 바로 MIB이다.

MIB는 Man In Black의 줄임말이 아니다. Management Information Base의 줄임말인데, 관리되어야할 자원 객체의 분류된 정보를 말한다. 관리되어야할 객체는 시스템정보, 네트워크사용량, 네트워크 인터페이스정보 등이 된다.

이 MIB객체들은 관리하기 편하도록 Tree구조를 가지게 된다. 다음은 MIB의 일반적인 구조이다.

그림 2. MIB계층 구조

MIB는 위에서 처럼 계층적인(디렉토리) 구조를 가지게 된다(위의 그림은 MIB를 설명하기 위해 일부만을 표시하고 있다). 예를들어서 agent가 설치되어 있는 시스템으로 부터 시스템부가정보(sysDescr)를 얻어오길 원한다면 ISO.org.dod.internet.mgmt.mib-2.system.sysDescr과 같은 식으로 manger에서 데이타를 요청하면 된다.

위의 MIB계층 구조를 보면 각 MIB옆에 숫자가 있는것을 볼수 있다. 이 숫자가 OID번호이다. 즉 sysDescr의 OID값은 1.3.6.1.1.2.1.1.1 이 될것이다. OID번호를 이용하는 이유는 MIB고유 문자열을 통해서 원하는 데이타를 가져오기위해서는 아무래도 요청이 길어질수가 있기 때문이다.

MIB는 IANA(Internet Assigned Number Authority)라는 단체에서 관리하며 표준적으로 사용되고 있다. 그럼으로 표준적인 MIB구현을 위해서는 IANA에서 OID를 부여받아야만 한다. 그래야 전체네트워크상에서 다른 여러가지 MIB와 중복되지 않고 사용이 가능할것이다.

작은 정보: cisco과 같은 대중적인(거의 표준이나 마찬가지인) 제품들은 모두 자체적인 MIB를 구현해서 IANA에 등록하여 사용하고 있다. 여러분이 cisco 라우터등의 SNMP정보를 접근할수 있다면 cisco MIB가 등록되어 있음을 확인할수 있을것이다. 확인하는 방법은 다음 강좌에서 따로 언급하도록 하겠다.

MIB는 계층적 구조를 가짐으로 필요에 따라서 확장해서 사용이 가능하며, (물론 프로그래밍 능력이 있어야 하지만)때에 따라서는 자체 회사내에서만 사용가능하거나 제한된 네트워크 영역의 네트워크상황을 관제하는 제품을 위한 MIB를 추가해야 하는경우가 생길수 있을것이다. 그래서 사설로 MIB를 만들어서 사용할수 있는 여지를 남겨두었다. (마치 독립된 지역네트워크를 위해 사설IP를 사용하는 것처럼) 이러한 사설 MIB는 private(4)의 enterprises(1)에 정의해서 사용할수 있다. 여러분이 그리 대중적이지 않은 그래서 IANA에 등록되지 않은 어떤 장비의 고유 SNMP정보를 얻어오고 싶다면 업체에 문의하거나, 메뉴얼을 확인하는 정도로 쉽게 SNMP정보를 얻어올수 있다.

현재 MIB는 버젼 2까지나와 있으며, 버젼의 구분을 위해서 MIB-1, MIB-2로 부르고 있다. MIB-2는 MIB-1의 확장판으로 MIB-1의 모든 객체를 포함하여 약 171개의 객체들을 더 포함하고 있다. 최근의 제품들은 대부분 MIB-2를 지원하고 있다. 물론 위에서 말했듯이 독자적인 MIB를 만들어서 사용할수 있으며, 이를 확장 MIB라고 부른다.


2.5절. SNMP 프로토콜의 동작과 구성

현재 SNMP는 버전 3가지 나와있는 상태이지만 아직까지는 버젼2가 가장 널리 사용 되고 있다. 필자역시 SNMP 버젼 2에 대한 경험이 많은 관계로 버젼2를 기준으로 설명하도록 하겠다.

SNMP는 기본적으로 네트워크 정보를 수집하는데 그 목적이 있는데, 수집하는 몇가지 각각 다른 방법이 있다. 일반적으로 생각해서 우리가 생활중에 얻게 되는 정보는 우리가 요구해서 발생하는 정보와(신문을 구입한다든지, 인터넷으로 서핑을 하는등) 뉴스속보와 같은 형식으로 중요한 일이 있을때 발생하는 정보가 있을것이다. 또한 단지 정보를 얻는데 그치지 않고 정보를 입력하기도 한다.

SNMP정보수집역시 기본적으로 위의 일상생활에서의 정보수집과 같은 방식으로 이루어진다. 이하 snmp manager은 manager로 snmp agent는 agent로 부르도록 한다.

GET

manager에서 agent로 특정 정보를 요청하기 위해서 사용한다.

GET NEXT

기본적으로는 GET과 같은일을 한다. 그러나 SNMP에서 각정보들은 계층적 구조로 관리된다. 위의 MIB계층 구조를 나타낸 이미지에서 우리는 system(1)계층밑에 있는 모든 정보를 가져오고 싶을 때가 있을것이다. 그럴경우 GET NEXT를 사용할수 있다.

SET

manager에서 agent로 특정 값을 설정하기 위해서 사용한다.

TRAP

agent에서 통보해야될 어떤 정보가 발생했을때(임계치를 넘는네트워크자원 사용등) manager에게 해당 상황을 알리기 위해서 사용한다. 위의 다른 요청들이 동기적 요청이라면 이것은 비동기적 사건을 알리기 위해서 사용되어진다.

SNMP프로토콜은 기본적으로 어떤 정보를 요청하는 메시지와 이에 대한 응답메시지로 이루어지며 다음과 같은 구조를 가지고 있다.

표 1. SNMP 메시지

Version Community name SNMP PDU
Version은 말이 필요없다. SNMP프로토콜의 버젼번호를 나타낸다. Community name은 메니저와 에이전트간의 관계를 나타내는데, 인증, 접근통제등의 목적으로 사용된다. 보통은 간단하게 public을 사용한다. PDU 는 Physical Data Unit의 줄임말인데, 실제 전송되는 필요한 정보들을 담고 있는 Unit이다. Unit 이라고 하는 이유는 실제 전송되는 정보들의 부가 속성을 나타내기 위한 몇가지 값들을 포함하고 있기 때문이다. PDU는 PDU 타입(GET인지 Set인지 GET Next인지, TRAP인지등)과, Request-id, 실제보내고자 하는 데이타등(OID와 OID에 대한 값들)으로 구성되어 있다.

SNMP를 통해서 전달되는 메시지들은 기본적으로 UDP를 이용하게 된다. 바로위에서 PDU는 Request-id를 포함하고 있다고 했는데, 데이타그램처리방식인 UDP의 단점을 극복하기 위해서 사용되는 값으로, 각 메시지의 요청번호를 표시한다. 그래야만 수신된 SNMP메시지가 어떤 요청에 대해서 수신된 메시지인지 확인이 가능할것이기 때문이다.


3절. SNMP 설치 및 운용

그럼 실제로 시스템에 SNMP(agent와 manager 애플리케이션)을 설치해서 정보를 가져오는걸 간단히 테스트 해보도록 하겠다.

설치는 Linux(Kernel-2.4.x)에서 ucd-snmp로 할것이다. 위에서 설명했듯이, SNMP는 manager과 agent로 운영되게 되는데, 테스트의 편의를 위해서 하나의 시스템(localhost)에서 manager와 agent를 운용하도록 하겠다.


3.1절. ucd-snmp 설치

ucd-snmp는 net-snmp.sourceforge.net에서 얻을수 있으며 애플리케이션 관련 정보들도 얻을수 있다. ucd-snmp는 현재 버젼 5.x대까지 진행되어 있는데, 5.x부터는 net-snmp로 이름을 바꾸고 개발되어지고 있으며, 4.x버젼까지를 ucd-snmp라고 부르고 있다. 필자는 익숙한 ucd-snmp(버젼 4.x)를 설치하도록 할것이다. 비록 net-snmp가 최신이긴 하지만 별로 다루어본적이 없고, 대부분의 경우 아직까지는 ucd-snmp가 많이 사용되어지고 있기 때문이다. 최신이 아니라고 불만을 가질 필요는 없다. 근본적으로 net-snmp와 ucd-snmp간의 차이는 없으며, 우리의 목적은 최신의 snmp애플리케이션을 테스트하는게 아닌 snmp의 기능과 원리를 이해하고 이를 이용해서 필요한 응용 애플리케이션을 작성하는 것이기 때문이다.

위의 URL에서 ucd-snmp를 다운받아서 압축을 풀고 컴파일 하도록 하자. 컴파일 하는중에는 아마도 아무런 문제가 없을것이다. 컴파일은 매우 일반적인 방법을 따른다. 적당한 디렉토리에 압축을 풀고 ./configure, make, make install 하면된다.

	[root@localhost src]# tar -xvzf ucd-snmp-4.2.6.tar.gz [root@localhost src]# cd ucd-snmp-4.2.6 [root@localhost ucd-snmp-4.2.6]# ./configure  [root@localhost ucd-snmp-4.2.6]# make [root@localhost ucd-snmp-4.2.6]# make install			
헤에... 너무 간단하지 않은가 ?


3.2절. SNMP AGENT 실행

make install 까지 했다면 agent와 manager프로그램이 모두 설치되어 있을 것이다. 그리고 여기에 더불어 개발자를 위한 각종 라이브러리와 헤더파일들도 설치된다. 이 라이브러리와 헤더파일들은 개발할때 필요하며 다음 강좌에서 다루게 될것이다.

ucd-snmp는 agent 프로그램으로 snmpd를 제공한다. agent환경을 제대로 만들려면 복잡해보이는(사실은 그리 복잡하다고 볼수없는) 설정파일을 만들어줘야 하지만 이것은 각자의 몫이다. net-snmp프로젝트 홈페이지에서 제공하는 메뉴얼을 참고하기 바란다. 어쨋든 현재로써는 단지 snmpd를 띄우는 정도로 snmp agent환경을 만들수 있다.

[root@localhost root]# snmpd			
이것으로 snmp를 테스트할 최소한의 agent환경이 구축되었다.


3.3절. SNMP MANAGER 테스트

3.3.1절. 동기적인 데이타 요청 - snmp get, get next

GETGET NEXT는 동기적인 정보요청을 위해서 사용한다. manager에서 agent에 대해서 정보를 요청했을때 해당 정보를 agent에서 보내주는 방식이다. GET은 단일정보요청을 위해서 사용하며, GET NEXT는 해당 계층의 하위에 있는 모든 정보의 요청을 위해서 사용된다.

ucd-snmp는 이러한 정보요청을 위한 manager프로그램으로 snmpgetsnmpnext, snmpwalk를 제공한다.

snmpget은 이름에서 알수 있듯이 agent로부터 특정한 정보를 얻어내기 위해서 사용한다. 정보를 얻기 위해 필요한 기본정보는 agent가 설치되어 있는 서버의 주소(혹은 이름) 와 커뮤니티(권한을 위한)이름 그리고 얻기 원하는 정보의 OID번호 혹은 MIB의 계층이름이다. 예를들어서 localhost로부터 public권한을 가지고 sysDescr(시스템 부가정보)정보를 얻어오고 싶다면 아래와 같이 하면 된다.

 [root@localhost /root]# snmpget localhost public system.sysDescr.0system.sysDescr.0 = Linux localhost 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686				
혹은 MIB이름대신에 OID번호를 사용해도 된다.
 [root@localhost /root]# snmpget localhost public 1.1.0 system.sysDescr.0 = Linux localhost 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686				

snmpwalk는 해당 MIB의 하위계층에 있는 모든 정보를 요청한다. 예를들어 system MIB의 하위 계층에 있는 모든 OID에 대한 정보를 요청하길 원한다면 아래와 같이 하면된다. 이게 가능한 이유는 snmpwalk가 정보를 요청하기 위해서 snmp메시지를 만들때 PDU타입을 GET NEXT를 사용하기 때문이다. 나중에 직접구현하게 될것이다. 지금은 구현에 신경쓰지 말자.

[root@localhost /root]# snmpwalk localhost public systemsystem.sysDescr.0 = Linux localhost 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.linuxsystem.sysUpTime.0 = Timeticks: (2685699) 7:27:36.99system.sysContact.0 = yundream@joinc.co.krsystem.sysName.0 = localhostsystem.sysLocation.0 = myhome system.sysORLastChange.0 = Timeticks: (0) 0:00:00.00....				
system하위의 모든 OID에 대한 정보를 얻어오고 있음을 확인할수 있다.

snmpgetnext는 snmpwalk의 기능 축소판정도로 볼수 있을것이다. 즉 MIB계층구조에서 현재 요청한 OID의 다음 OID의 정보를 가져온다. 예르들어 system.sysDescr.0에 대한 정보를 요청하면 다음 OID인 system.sysObjectID.0의 정보를 요청하게 될것이다. 이게 가능한 이유는 snmpwalk와 마찬가지로 내부적으로 GET NEXT를 이용하고 있기 때문이다. snmpwalk가 더이상 얻을수 없을때까지 OID를 요청하는것과 달리 snmpgetnext 바로다음의 OID만을 요청한다.

 [root@localhost /root]# snmpgetnext localhost public system system.sysDescr.0system.sysDescr.0 = Linux localhost 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686system.sysObjectID.0 = OID: enterprises.ucdavis.ucdSnmpAgent.linux				


3.3.2절. 비동기적인 데이타 요청 - snmp trap

기본적으로 GET, GET NEXT를 통한 데이타요청은 일정한 polling시간을 가지고 manager에서 agent로 필요한 정보를 요청하는 방식이다. 그러나 이걸 이용해서는 비동기적으로 발생하는 정보를 수집할수가 없다.

이러한 비동기적인 정보는 여러가지가 될수 있다. 예를들면 특정 네트워크 세그먼트에 문제가 생겼다거나 디스크나 메모리용량을 과다하게 사용하고 있다거나(많은 운영체제의 경우 시스템정보까지도 snmp를 통해서 얻을수 있도록 허용하고 있다)하는 사건들은 비동기적으로 발생할것이다. 이럴경우에는 agent에서 manager측으로 사건을 통보해야 할것이다. 이렇게 agent에서 manager측으로 비동기적으로 사건을 통보하는 것을 SNMP TRAP라고 한다(간단히 말해서 경고메시지 보내는거다).

ucd-snmp에서는 이러한 trap정보를 전송하고 받기 위해서 snmptrapdsnmptrap를 제공한다. snmptrapd는 agent에 제공되는 데몬프로그램으로 manager에서의 trap데이타 발생을 기다린다. snmptrap는 agent에 설치되어서 사용될수 있으며 trap데이타를 manager로 전송하는 일을한다.

이 snmptrap은 꽤 유용하게 사용할수 있다. 간단하게 스크립트로 만들어서 어떤 파일이 변조되었을경우 trap정보를 manager쪽으로 발생시킨다거나, 프로세스 갯수가 일정갯수 이상 초과했을때 이를 전송한다든지 하는 기능을 비교적 간단하게 추가시킬수 있을것이다.

다음은 ucd-snmp에서 제공하는 trap애플리케이션을 이용한 간단한 테스트이다. 먼저 snmptrapd를 manager측에서 실행시켜야 한다. 이 애플리케이션은 옵션없이 실행할경우 데몬모드로 실행되며 표준출력을 시키지 않음으로 다음과 같이 옵션을 주고 실행시켜서 일반모드(forground)에서 받은 trap정보를 표준출력하도록 실행시키도록 하자.

[root@localhost root]# snmptrapd -f -P2003-04-23 00:13:34 UCD-snmp version 4.2.6 Started.				
이제 agent측에서 snmptrap를 이용해서 trap정보를 manager로 전송해보도록 하자.
[root@localhost root]# snmptrap -v 2c -c public localhost "" ucdStart sysContact.0 s "yundream"				
그러면 manager로 system.sysContact.0="yundream" 과 같은 정보가 전달되는걸 확인할수 있을것이다.

이들 ucd-snmp에서 제공하는 애플리케이션들의 자세한 사용법은 메뉴얼 페이지를 참고하기 바란다.


4절. 결론

이상 SNMP의 개념과 개념의 이해를 위해서 실제 사용되는 snmp애플리케이션을 설치해서 간단히 운영테스트까지 해보았다. 이러한 운영테스트를 위해서 ucd-snmp를 사용했는데, 다음 강좌는 ucd-snmp에서 제공하는 snmplib를 통해서 snmp애플리케이션을 만드는 법을 다루도록 하겠다.

'OS > LINUX' 카테고리의 다른 글

[펌]sendmail 인증 사용하기..  (0) 2004.11.05
[bbs.kldp.org에서 펌] 분할 압축하기...  (0) 2004.10.14
한글 putty  (0) 2004.08.13
[펌] temp..정리하기전..  (0) 2004.08.11
[펌] 20만통 메일과 sendmail  (0) 2004.07.09
Posted by tornado
|

'이것저것 > 낙서장' 카테고리의 다른 글

xml 데이터를 flash 에서 파싱하기  (0) 2004.08.26
[펌] Legend of 1900 - 제리 롤 모튼 VS 1900  (0) 2004.08.23
흠... 내가 문제야 ㅠㅠ  (0) 2004.08.13
[펌] 므흣  (0) 2004.08.13
[펌] Evergreen - 카펜터스  (0) 2004.08.12
Posted by tornado
|

모야... 너무 간단... 허무 ㅡㅡ;

self.opener = self;
window.close();

Posted by tornado
|

새마음으로..

JAVA/JEE 2004. 8. 17. 19:48

크헐... EJB 해본지 어언 2년 가까이.... 아무것도 생각 안나네 ㅠㅠ

 

PHP 하다... JSP 하다.. 리눅스 서버 만졌다가..... 네트워크 관리하다가..

 

IP 분배 하다가... 보니....

 

EJB 해볼 시간이 전혀 없었다..

 

퇴근하고 저녁 짜투리 시간에....

 

간단하게 쇼핑몰이라도 만들어 봐야겠다...

Posted by tornado
|

에그... 이리 간단한걸.. ㅡㅡ;;

       

    <bean:size id="len" name="SearchEmp" />

 

    <!-- 내용 없을 때 -->
    <logic:equal name="len" value="0" >        
    <tr>
      <td height="150" ALIGN="CENTER" colspan="4">
        검색된 직원이 없습니다!!
      </td>
    </tr>
  </logic:equal>

 

Posted by tornado
|

ctrl + e 를 무심결에 눌렀더니.... 열려있는 파일들이 우측에 열리네 ^^

Ctrl + Shift + e 누르니 또 열리네 ^^

마우스로 블록 지정하고

Ctrl + Shift + c 누르니 한줄 주석이 토글되네 ^^

 

 

Posted by tornado
|

 public boolean sendMail(String filePath,String host, String receiver, String sender, String subject, String contents, InquireFile[] files){
  
  boolean flag = false;
  
  Properties prop = new Properties();
  
  prop.put("mail.smtp.host" , host);
  
  Session mailSession = Session.getDefaultInstance(prop, null);
  
  try{
   
   InternetAddress from = new InternetAddress(sender);
   
   Message msg = new MimeMessage(mailSession);
   
   msg.setFrom(from);
   
   msg.setRecipient(Message.RecipientType.TO, new InternetAddress(receiver));
   
   msg.setSubject(subject);
   
   Multipart multi = new MimeMultipart();      
   
   MimeBodyPart mbp = new MimeBodyPart();
   
   mbp.setContent(contents, "text/html; charset=ms949");
   
   multi.addBodyPart(mbp);
   
   if(files != null){
    
    for(int i = 0; i < files.length; i++){
     
     if(files[i] == null ) continue;
     
     DataSource fds = new FileDataSource(filePath + "/" + files[i].getFileName() );
     
     MimeBodyPart m = new MimeBodyPart();
     
     m.setDataHandler(new DataHandler(fds));
  
     m.setFileName(  toEng(fds.getName() ) );
     
     multi.addBodyPart(m);
     
    }
   }
   
   msg.setContent(multi);
   
   msg.setSentDate(new Date());
   
   Transport.send(msg);
   
   
   flag = true;
   
   
  }catch(Exception e){
   
   Logger logger = Logger.getLogger(this.getClass());   
   
   logger.error(this.getClass().getName() + " : " + e);
   
  }
  
  return flag;
  
 }

 

 public static String toEng(String origin) throws Exception{
  
  
  return new String(origin.getBytes(), "ISO-8859-1");
 }

 

==================================================================================

 

재미 있는건  한글 변환 부분 에서 new String(한글.getBytes("KSC5601"), "ISO-8859-1") 처럼 안해두 된다는것임...

 

다운로드시 한글 변환도 위와 같이 하면 URLEncoding 을 안해도 됨 ㅡㅡ 

 

daum.net , naver.com, hotmail.com, outlook express 에서 테스트 함

 

테스트 환경 : Win xp , tomcat 4.1.30 , Apache 2.0.49 , j2sdk 1.4.2_05

 

사용 디비 :  MySQL, Informix , Oracle

Posted by tornado
|

실패 하느냐 성공하느냐는 다름 사람의

문제가 아닌, 나 자신의 문제이다.

내가 바로 힘이다.

-일레인 맥스웰(Elaine Maxwell)

'이것저것 > 낙서장' 카테고리의 다른 글

[펌] Legend of 1900 - 제리 롤 모튼 VS 1900  (0) 2004.08.23
[크헉... 술취한 고오오옴]  (0) 2004.08.20
[펌] 므흣  (0) 2004.08.13
[펌] Evergreen - 카펜터스  (0) 2004.08.12
정말정말!!!!!  (0) 2004.08.07
Posted by tornado
|

한글 putty

OS/LINUX 2004. 8. 13. 12:02

한글 putty~~~

 

 

 

 

'OS > LINUX' 카테고리의 다른 글

[bbs.kldp.org에서 펌] 분할 압축하기...  (0) 2004.10.14
[펌] SNMP개요및 설치,운용  (0) 2004.08.21
[펌] temp..정리하기전..  (0) 2004.08.11
[펌] 20만통 메일과 sendmail  (0) 2004.07.09
[허접] 내부 IP MSN 차단 .... ㅡㅡ  (0) 2004.07.07
Posted by tornado
|

'이것저것 > 낙서장' 카테고리의 다른 글

[크헉... 술취한 고오오옴]  (0) 2004.08.20
흠... 내가 문제야 ㅠㅠ  (0) 2004.08.13
[펌] Evergreen - 카펜터스  (0) 2004.08.12
정말정말!!!!!  (0) 2004.08.07
[펌] Il est trop tard - Georges Moustaki  (0) 2004.08.04
Posted by tornado
|

<HTML>
<HEAD>
<Script language="javascript">
<!--
 
 function show(){
  document.all["layer_1"].style.display="block";
 }

 function close() {

  document.all["layer_1"].style.display = "none";
 }


//-->

</Script>
</HEAD>

<BODY>

<table border="1" align="LEFT" cellpadding=0 cellspacing=0 width=400>

 <tr>
  <td>
    <a href="javascript:show()" >보이기</a>
    <a href="javascript:close()" >닫기</a>
  </td>
 </tr>

 <tr id="layer_1" style="display:none">
   <td width="100%" height="200">
  보여요????
  
   </td>
 </tr>
</table>

</BODY>
</HTML>

Posted by tornado
|

              JSP 에서의 파일 업로드

작성자 : (tornado@dolpung.pe.kr)

 

파일을 업로드 한다는 것은 원격의 사용자가 서버 측으로 네트워크를 통해 파일을 전송하는 일이다

보통 WEB 환경에서 사용자의 입력 값을 다른 페이지로 이동시키기 위해서는 Form 통한 데이터 전송을 하게 된다.

간단하게 사용자의 이름을 입력 받고 내용을 JSP 페이지나 기타 파일로 전송을 해야 때는 아래와 같은 HTML 폼이 작성이 되어야 것이다.

 

<Form action=receive.jsp Method=POST>

이름 : <Input type=TEXT name=userName> <BR>

<input type=SUBMIT value= >

</Form>


..more


Posted by tornado
|

 

EverGreen 

            

                Susan Jacks


Sometimes love would bloom
때때로 사랑이란건
in the spring time
봄에 그 싹을 틔우죠.
Then My flowers in summer
그리고 그 꽃은 여름동안
It will grow
자라나요.
then fade away in the winter
그리고선 겨울이 되어
When the cold wind begins to blow
차가운 바람이 불기 시작하면 시들어가죠.

*
But when it's evergreen evergreen
하지만, 그것이 항상 푸르른 상록수 같다면
It will last through the summer
여름과 겨울을 지나면서도
and winter too
시들지 않고 있겠죠.
When love is evergreen evergreen
당신에 대한 내 사랑처럼
Like my love for you
사랑이 항상 시들지 않고 푸르르다면 말이에요.

So hold my hand and tell me
그러니 내 손을 잡고서 이렇게 말해주세요.
You'll be mine
즐거울 때나 슬플 때나
through langhter and through tears
내 사람이 되겠다고 말이에요.
We'll let the whole world see
온 세상에
our love will be evergreen
우리의 사랑이 슬플 때조차 변하지 않고 항상 푸르른
Through all the tears
그런 사랑이라는걸 보여주자구요.

 

 

 

evergreen-Susan Jacks

'이것저것 > 낙서장' 카테고리의 다른 글

흠... 내가 문제야 ㅠㅠ  (0) 2004.08.13
[펌] 므흣  (0) 2004.08.13
정말정말!!!!!  (0) 2004.08.07
[펌] Il est trop tard - Georges Moustaki  (0) 2004.08.04
[펌] 내 MSN 그룹들...  (0) 2004.08.04
Posted by tornado
|

DMZ (DeMilitarized Zone)

 

외부에서 엑세스가능한 서버들의 네트웍을 할당해 놓은 곳

 

방화벽의 종류중에, Screened subnets 라는 종류에서
앞뒤로 방화벽을 설치해 놓고, 중간에 서버를 가져다 놓는데,

이 부분을 DMZ 라고 부른다.

 

더 자세한 것은 방화벽을 찾아보면 자세히 나와있습니다.

 

컴퓨터 네트웍에서, DMZ란 회사의 사설 네트웍과 외부의 공중 네트웍 사이에, 중립 지역으로서 삽입된 컴퓨터 호스트, 또는 소형 네트웍을 말한다. 이것은 외부의 사용자들이 회사의 중요 데이터를 가지고 있는 서버에 직접 접속하는 것을 방지한다 (이 용어는 1950년 초 한국전쟁 후 남북한 사이에 조성된 지리적 완충지역을 부르는 말로부터 유래되었다). DMZ를 두는 것은 선택 사항이지만, 방화벽 보다 더 안전한 방법이며, 게다가 프록시 서버로서의 역할도 효과적으로 수행한다.

 

소규모 회사를 위한 대표적인 DMZ 구성에서, 별도의 호스트 컴퓨터가 사설 네트웍 내의 사용자들로부터 웹사이트 또는 공중 네트웍 상의 다른 회사 컴퓨터의 접속에 관한 요청을 받는다. 그리고 나서 DMZ 호스트는 공중 네트웍에 관한 이러한 요청을 위해 세션을 개시한다. 그러나, DMZ 호스트는 사설 네트웍 내로 들어오는 세션은 개시할 수 없다. DMZ 호스트는 오직 요청된 패킷들을 내부로 전달하는 것만이 가능하다.

 

회사 외부의 공중네트웍의 사용자들은 오직 DMZ 호스트만을 액세스할 수 있다. DMZ 호스트에는 일반적으로 외부 세계에 서비스할 수 있도록 회사의 웹페이지를 가지고 있을 수 있지만, 그 외 회사의 어떠한 다른 데이터도 제공하지 않는다. 그러므로, 만약 외부의 사용자가 DMZ 호스트의 보안을 뚫고 침입한 경우, 웹페이지는 훼손될 수 있지만, 그 외 회사의 다른 어떠한 정보도 노출되지 않는다. 라우터 제작으로 유명한 시스코에서, DMZ를 설정하기 위한 제품을 판매하고 있다.

 

----------------------------------------------------------------------------------------

보안에서 DMZ란 우리나라에 있는 비무장지대와 같습니다.

말그대로 무장을 하지 않는 다는 것이죠.
그렇다면 왜 무장을 하지 않는가?

그 이유는
주로 DMZ는 방화벽과 연관해서 사용이 되어지는데
기본적으로 방화벽은 네트웍을 보호하는 하드웨어나 소프트웨어입니다.
즉 방화벽은 불법적인 침입에 대하여 필터링을 하는 놈이라고 생각하시면 되겠죠?

그러면 DMZ 를 왜 구성하는가?

그 이유는 바로 서비스에 있습니다.
여러분의 회사나 학교의 네트웍에는 외부로 노출되어야 할 서버나 PC들이 있습니다.
예를 들어 웹서버나 홈페이지 서버, 기타 로긴 서버나 인터넷에서 자신의 네트웍의 서버자원
을 사용해야 하는 서버들이 있겠지요.

그러면 이 서버들을 방화벽 아래에 두게 되면 어쩔수 없이 사용하는 포트를 열어야 합니다.
그렇겠죠? 웹서비스는 HTTP를 열어주어야 하고 FTP서비스는 FTP 포트를 열어주어야 합니다.
이런 식으로 방화벽에 DMZ를 구성하지 않고 서버와 클라이언트PC들을 하나의 네트웍으로 구성하면
보안에 HOLE 이 생길 소지가 있다라는 것입니다.

즉 웹서비스의 열려진 HTTP 포트를 통해서 해킹이 가능해지면 이를 통해 내부클라이언트 PC까지도
손쉽게 해킹이 가능하게 됩니다.

그러므로 DMZ를 구성하게 되는 것이지요.

열어줘야 할 것들은 DMZ를 구성해서 따로 네트웍을 할당 하는 것입니다.
그러면 DMZ에서 로컬 네트웍으로의 침입이 불가능하게 되는 것이죠.

인터넷 -> DMZ : OPEN (필요한 서비스만)
DMZ -> 로컬네트웍 : CLOSE (DMZ 서버를 통해서 로컬네트웍으로의 불법적인 침입 방지)
로컬네트웍 -> DMZ : OPEN (필요한 서비스만)
인터넷 -> 로컬네트웍 : CLOSE (로컬네트웍 보호)

이런 식의 정책적용이 기본적인 방화벽의 DMZ 관련 정책입니다.

가장 기본적으로 DMZ를 구성하는 경우는 아래와 같습니다.

방화벽에 NIC를 3장 달아서
하나는 인터넷, 다른 하나는 DMZ, 나머지 하나는 로컬네트웍으로 연결을 시켜주는 것이죠.

마지막으로 다시 정리해보면
DMZ는 외부에서 엑세스 가능한 서버들의 네트웍을 할당해 놓은 곳이며
DMZ를 구성함으로써 로컬네트웍의 보안을 가져갈 수 있다.

----------------------------------------------------------------------------------------

간단히 말해 비무장 지대입니다.

네트워크 상에서 여러가지 보안 정책을 쓰지 않는 구역을 말하는데..

물론 방화벽을 걷어 버리는 것은 아닙니다.

하지만, 포트가 다 열리고, 중간에 필터링을 없애는 거죠..

공용네트워크가 있다면, 대게 포트필터나, 방화벽 등등으로 제한들이 걸려 있습니다.

보안상의 문제도 있고, 트래픽 관리상의 목적도 있겠죠..

이러한 네트워크에서 특정 PC 를 DMZ 로 놓게 되면, 포트가 모두 열리게 되고, 필터제한을

일시적으로 제거 할 수 있습니다.

물론 이런건 설정 하기 나름이구요..DMZ 를 한다 하더라도, 불법패킷에대한 방화벽 기능등은

유지가 되구요..물론 이것 역시 설정하기 나름이겠지만..암튼..이런 제한을 풀어버리는 역활을

DMZ 라 합니다.

물론 DMZ 설정을 해 두면 보안상으로 치명적일 수 있겠죠?..

생각 나는대로 적습니다..

----------------------------------------------------------------------------------------

DMZ 를 세팅하기 위해서는 내부적인 IP 가 고정으로 변환해야 한다는 것이고,
케이블 모뎀이 외부로 부터 연결시켜 주는 IP 는 개인이 임의적으로 설정할 수
없습니다.

또한 케이블 모뎀을 통해서 인터넷이 되는 것이기 때문에, 사용자가 IP 설정에서
임의의 IP 를 설정해 놓는다 해도, 그 IP 로 설정이 되는 것이 아니라, 인터넷
서비스 없체에서 모뎀으로 동적으로 뿌려주는 IP 를 이용하게 됩니다.

따라서 IP 공유기에서 DHCP 사용을 하지 않으시고, 아이피를 192.168.1.x 이런식으로
고정해서 내 컴퓨터에 설정해 주시면 DMZ 사용하는데는 이상이 없을것 같습니다.

추가로, 개개인별로 고정 IP 를 사용하게 되면, 어떤 문제가 있느냐 하고
질문 하셨는데, 인터넷 서비스 없체는 고객의 수만큼 충분한 IP 를 가지고
있지 않고, 그때 그때 필요로 하는 고객에게 IP 를 주는 식으로 효율성을
높이고 있으며, 또 고정 IP 를 주게 되면, 다운로드 위주의 대역폭을 설정해
놓은 모뎀이 개개인들의 서버 사용으로 인해서 업로드 트레픽이 많아 지게되어
전체적으로 속도 저하를 가져 오게 되어서, 고정 IP 를 주지 않는 것으로 알고
있습니다.

도움 되셨길..^^

 

 

 

포트포워딩

 

포트와 아이피는 별게 입니다.

사실상 특별한 보안상의 문제나 isp 업체에서 해당 포트를 막아 놓지 않은 이상 굳이 포트를 변경할 필요는 없을듯 합니다.

기본 포트가 아니면 다른 사람들이 접속할때 마다 포트를 지정해줘야 하므로 불편하죠. 그냥 기본 포트로 하는 것이 좋습니다.

다만 공유기에서 DMZ 기능을 제공하느냐의 문제입니다.
DMZ 기능이란 공유기에 할당된 ip 주소를 하위 피씨의 사설아이피로 직접 연결해 주는 기능으로, 포트별로 여러대의 피씨에 할당해줄수도 있습니다.

만약 공유기가 DDNS 기능까지 지원한다면, 외부에서 접속할때 수시로 바뀌는 아이피 주소가 아닌 업체에서 할당받은 도메인 명으로 항상 접속 할수 있습니다.

아이피 주소는 그냥 현재 상태 그대로 두셔도 됩니다.
가지고 계신 공유기가 외부 관리는 지원하는 것으로 보아 DDNS 까지 지원하지 않을까 싶긴 한데요. 메뉴얼의 dmz 기능과 DDNS 기능부분을 참조하세요.

더 궁금하신 사항은 쪽지로..

----------------------------------------------------------------------------------------

유동 아이피라 하면 DHCP서버에서 자동으로 아이피를 할당 받는 것을 말합니다.

만에 하나 현재 이용하고 있는 초고속 인터넷 서비스가 B&A 같은 사설아이피를 할당받은 네트워크라면 서버 구축이 불가능하나, 공인 아이피를 할당 받았을 경우는 DDNS( Dynamic Domain Name Server) 를 이용해서 구축이 가능합니다.

DNS 는 아이피로 된 피씨의 주소를 도메인 명으로 연결해주는 서비스인데 유동아이피일 경우 DNS에서 질문자의 피씨를 찾을수 없게되기 때문에 DNS 서비스는 불가합니다. 하지만 질문자의 서버에 DDNS 클라이언트 프로그램을 설치해서 수시로 DNS서버로 아이피의 현재 상태를 전송해준다면 서비스가 가능해지죠. 이렇게 클라이언트에서 아이피 정보를 수시로 보내서 갱신하여서 고정된 이름으로 접속 할수 있도록 해주는 것은 DDNS 서비스 라고 합니다.

추가정보로 가정에서 공유기를 통해서 피씨를 서버로 사용하는 것은 불가능하였지만, 요즘 공유기의 기능으로 DMZ 기능을 이용하면 공유기에서 내부에 연결된 사설 아이피의 피씨로 무조건 연결하도록 임의로 설정하여 서버로써의 활용도 가능합니다. 일부 제품에서는 DDNS서비스 까지 무료로 지원해주고 있습니다.

DDNS 서비스는 몇군데 업체에서 하고 있지만 DNS 서버의 트래픽이 적을 수록 본인의 컴퓨터로 연결되는 속도는 빨라집니다. 가입할때 신경을 쓰셔야 할부분입니다.

DDNS 서비스를 이용하면 FTP 뿐만 아니라 웹서버, 터미날 서비스로 외부에서 내 컴퓨터를 직접 작동하여 끄는것등의 작업까지 가능합니다. 

예 할 수 있습니다.
FTP서버를 설치하는데는 유동이든 고정이든 전혀 문제가 없습니다.

여기서 유동이란 말은 그 아이피(서버로 사용하는 컴의 주소)가 자주 바뀔 수 있다는 말이죠. 유동아이피에는 임대기간이라는것이 있습니다. 아이피를 받은 시간으로부터 몇시간동안 똑같은 아이피를 부여하게끔 DHCP 서버에서 지정을 해줍니다. 다시 말해서 오늘 주소는 "10.125.8.115" 였던것이 임대기간이 지난 내일은 "10.125.8.125" 로 바뀌어 버리는 것입니다. FTP 서버(웹서버도 마찬가지 입니다)가 설치되어 돌아가더라도 그 주소를 모른다면 (다른 이들이 찾지 못한다면) 무용지물이겠지요. 해서 유동아이피라면 사용하기가 힘들다는 겁니다. 매번 현재 주소를 사용자들에게 알려줘야 하기때문이죠. 이게 바로 문제점이 되겠구요.

여기에 따른 해결책으로는 아이피를 고정아이피로 바꾸는 방법, 그리고 많은 분들이 말씀하셨지만 네이밍 서비스를 이용하는 방법이 있겠지만 돈이 듭니다(사야하죠).

그밖에 유동아이피를 고정아이피처럼 사용할 수 있는게 바로 포워딩입니다. 조그만 프로그램이 사용하고자 하는 서버 피씨에 상주해서 아이피가 바뀔때마다 (보통 얼마 시간만에 업데이트하라고 정해놓습니다) 포워딩해주는 호스트에 정보를 전달해주지요.
즉, 10.125.8.115 을 abc.no-ip.com 으로 매핑 해놓고 만일 아이피가 바뀌면 바뀐아이피(만약 바뀐주소가 10.125.8.125 이라면)로 또다시 10.125.8.125 를 abc.no-ip.com 이런식으로 매핑을 시켜줍니다. 그래서 외부 사용자들은 abc.no-ip.com 이라는 도메인 하나로 접속이 가능하게 되는 것이지요.

이런 포워딩을 서비스해주는 곳은 많이 있습니다.
http://www.no-ip.com
http://www.codns.com/korean
http://xdns.co.kr
검색사이트에서 유동아이피로 검색 해보시면 많이 찾을 수 있을 것입니다. 개인적으로는 이 방법을 씁니다.

 

 

유동 ip를 사용할 경우의 문제점
: ftp서버의 ip가 유동 적으로 변함으로 하여 ftp client가 어떤 ip로 접근해야 하는지를 알 수 없으므로 ftp 서비스가 거의 불가능함

해결방안
: dynamic DNS의 사용
ftp client는 domain name으로 ftp 서버에 접속함
ftp 서버는 유동적인 자신의ㅣ ip를 항상 DDNS(dynamic DNS)서버에 알려줌으로 해서 DNS query가 들어 왔을 때 실시간으로 바뀌는 서버의 ip address를 ftp client에게 알려줌.

DDNS 사용시 필요한 점
: DDNS 서비스를 할 서버가 필요함 ftp서버에는 DDNS client program이 설치 되어 실시간으로 ftp 서버의 ip address를 DDNS 서버에 전송하고 DDNS 서버는 update된 ip address를 DNS의 domain과 매칭 시키는 작업을 함

'OS > LINUX' 카테고리의 다른 글

[펌] SNMP개요및 설치,운용  (0) 2004.08.21
한글 putty  (0) 2004.08.13
[펌] 20만통 메일과 sendmail  (0) 2004.07.09
[허접] 내부 IP MSN 차단 .... ㅡㅡ  (0) 2004.07.07
[펌] 프로세스죽이기  (0) 2004.07.07
Posted by tornado
|
javascript로 파일의 크기를 알아낼 수는 있습니다.
하지만, 이 경우엔 브라우저의 보안에 걸리게 됩니다.
우선, 알아내는 방법부터 말씀을 드리지요.

var fpath = "c:\test.zip"
var fso, f, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.GetFile(fpath);
s = f.size;
alert(s)

위와 같이 하면 알아낼 수 있습니다.
fpath에는 파일명을 포함한 파일경로가 들어가게 되구요.
file선택개체.. 즉 <input type="file"...> 을 사용하신다면
value 속성으로써 경로를 알아낼 수 있겠지요?

여기서 주의해서 보셔야 할 부분이..
fso = new ActiveXObject("Scripting.FileSystemObject"); 입니다.

이것은.. 말 그대로 File System Object로써 개체를 생성하는 구문입니다.
여기에서 바로 보안에 걸리게 됩니다.
브라우저 보안 설정에 따라 어떤 컴에서는 동작을 아예 안 하거나,
또는 경고메시지만 띄워주고 실행이 가능해지거나,
또는 경고메시지 없이 무조건 실행될 수도 있을겁니다.

아마 자신이 올리는 파일의 크기를 알아내는데 왜 보안에 걸리느냐고 여쭤보실지도 모르겠네요. ^^;

Scripting.FileSystemObject는 파일의 크기뿐만이 아니라 파일에 대한 모든 조작이 가능한 개체입니다.
따라서, 누군가가 고의로 하드의 파일을 삭제하거나 하는 스크립트를 만들어서 메일로 보내거나
자기의 홈페이지에 올려두고 누군가 접근하게 한다면..?? 어떻게 될까요? ^^;;

javascript라는게.. asp, jsp같은 서버에서 동작하는 스크립트언어가 아니라
Client에게 어떤 특정한 동작을 수행하도록 하는 언어이다 보니..
이러한 보안문제는 아주 중요한 부분입니다.


음.. 주절주절 말을 적긴 했는데 도움이 되셨을런지 모르겠군요.

그럼 즐프 하세용~



* 참! 만약에 특정 사이트를 구축하는데에 꼭 저러한 기능이 필요하시다면
ActiveX 프로그래밍을 직접 하시던지..
아니면, 클라이언트의 브라우저 보안설정에서
"신뢰할 수 있는 사이트"로써 등록을 하게 한 후에 사용하도록 하는 방법도 있을겁니다.
정말 신뢰할 수 있는 사이트라면 말이죠. ^^;;
Posted by tornado
|
Posted by tornado
|

http://java.sun.com/webservices/docs/1.0/tutorial/index.html

 

공부해야혀~~~~ 기초 까먹으면 골아퍼~~~

Posted by tornado
|