'2010/10'에 해당되는 글 2건

  1. 2010.10.18 Active Mode 와 Passive Mode 의 차이점
  2. 2010.10.16 Saving ASP VBScript "Objects" to Session
말랑말랑한 이야기2010. 10. 18. 11:41
- 실제 데이터가 오가는 Data Port의 접속방식

FTP 서비스는 일반적인 서비스와는 달리 2개의 Port를 사용한다.
- 명령어와 응답이 오가는 Command Port(21번)와 실제 데이터가 오가는 Data Port(20번)로 구성된 TCP 기반의 서비스

[[ Active Mode ]]

- Command Port를 통해 클라이언트가 전해준 정보를 바탕으로 서버가 클라이언트의 Data Port에 접속을 시도한 후
  클라이언트의 요청에 따라 데이터를 클라이언트에 전송

Active Mode의 FTP에서 클라이언트는 사용되지 않는 랜덤한 포트 n(n>1023)을 통해 서버의 Command 포트(21번)에 접속
이때, 포트번호 n에 1을 더한, n+1번 포트의 정보를 서버에 전송하며, 클라이언트는 n+1번 포트를 Listening 하기 시작함
FTP 서버의 Data Port(20번)는 클라이언트에서 지정한 Data Port(n+1)를 통해 클라이언트에 접속

서버에 설치된 방화벽에서는 Active Mode의  FTP가 지원되려면 다음의 통신 채널이 열려있어야함
- FTP 서버의 21번 포트 : 클라이언트에서 접속을 시도할 수 있는 Command Port
- FTP 서버의 21번 포트 >> 클라이언트의 n(n>1023)번 포트 : 서버에서 클라이언트의 Command Port로 응답
- FTP 서버의 20번 포트 >> 클라이언트의 n+1(n>1023)번 포트 : 서버에서 클라이언트의 Data Port로 접속
- FTP 서버의 20번 포트 << 클라이언트의 n+1(n>1023)번 포트 : 클라이언트에서 서버의 Data Port 에 응답

※ Active Mode의 FTP에서 접속문제는 대부분 클라이언트측에서 기인함
     FTP클라이언트느 서버의 Data Port에 직접 접속이 불가능.
     단지 어떤 포트를 Listening 하고 있으며 서버가 데이터 전송을 위해 접속할 클라이언트 포트를 서버에 알려줄 뿐임
     클라이언트에 설치된 방화벽의 입장에서는 FTP 서버가 클라이언트의 특정포트에 접속하려는 시도가
     외부의 시스템 침입으로 간주되어 방화벽에 의해 차단되는 경우가 발생

[[ Passive Mode ]]
- Command Port 뿐만 아니라 데이터 접속도 클라이언트에서 시도하여 서버에 데이터를 요청하고 전송받는 방식

- 서버가 클라이언트에 접속을 시도해야하는 문제점을 해결하기 위해 다른 방식의  FTP 연결이 개발
   Active Mode에서 클라이언트에 설치된 방화벽이 FTP 서버의 접속 시도를 외부의 침입으로 간주하고 차단하는 문제를 해결하기위해
   Passive Mode에서는 두개의 포트 모두 클라이언트에서 서버에 접속을 함

- FTP 연결을 위해 클라이언트는 사용되지 않는 랜덤한 포트 n(n>1023)과 n+1 포트를 열 어둡니다.
  n 포트는 서버의 Command 포트인 21번 포트에 접속함
  클라이언트는 (서버로 하여금 클라이언트의 Data 포트 연결을 허용하기 위해) Port 명령어를 호출하지 않고 Pasv 명령어를 호출함
  서버는 사용되지 않는 랜덤한 포트 p(p>1023)를 열어두고 클라이언트에 해당 정보를 넘겨줌
  클라이언트는 데이터 전송을 위해 자신의 n+1 포트와 서버의 p 포트 연결을 시도

서버에 설치된 방화벽에서는 Passive Mode의  FTP가 지원되려면 다음의 통신 채널이 열려있어야함
- FTP 서버의 21번 포트 :  클라이언트에서 접속을 시도할 수 있는 Command 포트
- FTP 서버의 21번 포트 >> 클라이언트의 n(n>1023)번 포트 : 서버에서 클라이언트의 Command 포트로 응답
- FTP 서버의 p(p>1023)번 포트 : 클라이언트의 n+1(n>1023)번 포트에서 데이터 접속
- FTP 서버의 p(p>1023)번 포트 >> 클라이언트의 n+1(n>1023)번 포트 : 클라이언트의 요청에 대한 응답 및 실제 데이터 전송

※  Passive mode 에서의 문제점
      Passive mode의 FTP가 클라이언트 입장의 문제점을 해결한 방법이라면 서버 입장에서는 포트 전체를 열어두어야하는 문제점이 생김
      FTP의 접속을 위해 서버에 많은 수의 포트가 필요하다는 점이 가장 큰 문제점


명령행 FTP(CMD mode)에서 Passive 모드를 설정하는 방법

1. 시작 / 실행 / cmd 입력하고 확인
2. 명령행에서 FTP 명령을 이용해 Site에 접속 예) c:>ftp ftp.scnt.co.kr
3. User ID와 Password 를 입력하고 FTP 서버로 로그인 한다.
4. FTP 프롬프트가 뜨면 다음과 같은 명령을 입력한다
     ftp>quote pasv
Posted by Ditongs Ditongs

댓글을 달아 주세요

말랑말랑한 이야기2010. 10. 16. 06:40

Saving ASP VBScript "Objects" to Session (Tuesday, March 08, 2005)
Continuing my trouble and hatred of anything todo with Visual Basic, especially VBScript.  In this episode of The VB Sucks Edition, I'll reivew the problem with VBScript "Objects”.  As any programmer knows, VBScript was never meant to be object-oriented, but by VBS 5, someone at Microsoft thought they could try to make it a bit OO compatible.  The introduction of VBS classes was a major step in that direction.  This seems like a good idea, but instead of making real objects, Microsoft hacked together classes that really mean nothing.  Let me explain.

VBS objects are not really stored in memory as objects.  For this reason, it is not possible to store a VBS object in the Session or Application variables in ASP.  This creates huge headaches, and is completely rediculous.  There are however, some solutions.

The first solution is "Serializing" your class.  You will not truely be serializing anything, but rather creating a "seralize" and "deserialize" method for each class that you declare.  These methods will take a Session variable name as a parameter and "store" or "retrieve" a class from session.  See the example below.

Class MyClass
     Dim Var1
     Dim Var2
End Class

Function Serialize_MyClass( instance, sessionVar )
     Session( sessionVar & ".Var1" ) = instance.Var1
     Session( sessionVar & ".Var2" ) = instance.Var2
End Function

Function Deserialize_MyClass(sessionVar)
     Dim instance : Set instance = new MyClass
     instance.Var1 = Session( sessionVar & ".var1" )
     instance.Var2 = Session( sessionVar & ".var2" )

     Set Deserialize_MyClass = instance
End Function

This solution will work if you must keep all your code in VBScript, however is quite a pain to implement.  If you can mix JScript into your code, I suggest using the following solution.

The other way of saving objects to session in ASP is not to use VBScript objects, but use JScript objects instead.  Because of the way JScript creates objects, you can save JS objects to Session.  By declaring your class in JS, you can keep your code (somewhat) clean, and still have the ability to save your objects.  See below for an example.

<script runat="server" language="jscript">

function MyClass()
{
   this.Var1 = Var1;
   this.Var2 = Var2;
}

var Var1, Var2;

function MyClassFactory()
{
   return new MyClass();
}

</script>

Using script like the one above allows you to keep your class declarations clean, and removes the need for "serialization” functions.  The only problem that still remains is VBScript can't declare instances of JScript classes (even though it can use them).  For this reason, I suggest using a factory function in JScript for your classes (such as MyClassFactory in the example above).  Because VBScript can call JScript functions, you will be able to get a new instance of the JScript class into your VB code, as shown below.

Dim instance : instance = MyClassFactory()
instance.Var1 = "12345"


So there you have it, the half-ass hack to solve the problem of saving classes to Session or Application variables to the piece of junk that is VBScript.

Filed under:
Posted by Ditongs Ditongs

댓글을 달아 주세요