Skip to content

Latest commit

Β 

History

History
461 lines (372 loc) Β· 12 KB

File metadata and controls

461 lines (372 loc) Β· 12 KB

FTP μ„œλ²„/ν΄λΌμ΄μ–ΈνŠΈ κ΅¬ν˜„ ν”„λ‘œμ νŠΈ

πŸ“‹ ν”„λ‘œμ νŠΈ κ°œμš”

이 ν”„λ‘œμ νŠΈλŠ” FTP(File Transfer Protocol) μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈλ₯Ό C μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•œ μ‹œμŠ€ν…œ ν”„λ‘œκ·Έλž˜λ° κ³Όμ œμž…λ‹ˆλ‹€. TCP/IP μ†ŒμΌ“ ν”„λ‘œκ·Έλž˜λ°μ„ 기반으둜 ν•˜λ©°, ν‘œμ€€ FTP λͺ…λ Ήμ–΄λ₯Ό μ§€μ›ν•˜λŠ” μ™„μ „ν•œ FTP μ„œλΉ„μŠ€ μ‹œμŠ€ν…œμ„ μ œκ³΅ν•©λ‹ˆλ‹€.

μž‘μ„±μž: 김쀀원
μž‘μ„±μΌ: 2024/05/28
운영체제: Ubuntu 20.04.06 LTS 64bits


✨ μ£Όμš” κΈ°λŠ₯

ν΄λΌμ΄μ–ΈνŠΈ (cli.c)

  • βœ… μ„œλ²„ μ—°κ²° 및 μ‚¬μš©μž 인증
  • βœ… FTP λͺ…λ Ήμ–΄ λ³€ν™˜ (μ‚¬μš©μž λͺ…λ Ή β†’ FTP λͺ…λ Ή)
  • βœ… 파일 λͺ©λ‘ 쑰회 (ls, ls -a, ls -l, ls -al)
  • βœ… ν˜„μž¬ μž‘μ—… 디렉토리 확인 (pwd)
  • βœ… 디렉토리 이동 (cd, cd ..)
  • βœ… 디렉토리 생성/μ‚­μ œ (mkdir, rmdir)
  • βœ… 파일 μ‚­μ œ (delete)
  • βœ… 파일 이름 λ³€κ²½ (rename)
  • βœ… 파일 λ‹€μš΄λ‘œλ“œ (get)
  • βœ… 파일 μ—…λ‘œλ“œ (put)
  • βœ… 전솑 λͺ¨λ“œ μ„€μ • (bin, ascii, type binary, type ascii)
  • βœ… ν”„λ‘œκ·Έλž¨ μ’…λ£Œ (quit)
  • βœ… 데이터 μ—°κ²°(PORT λͺ¨λ“œ) μžλ™ 생성 및 관리
  • βœ… μ „μ†‘λœ 파일 크기 ν‘œμ‹œ

μ„œλ²„ (srv.c)

  • βœ… λ™μ‹œ 닀쀑 ν΄λΌμ΄μ–ΈνŠΈ 지원 (Concurrent Server)
  • βœ… IP μ£Όμ†Œ 기반 μ ‘κ·Ό μ œμ–΄ (access.txt)
  • βœ… μ‚¬μš©μž 인증 (passwd 파일 기반)
  • βœ… 둜그인 μ‹€νŒ¨ 3회 μ œν•œ
  • βœ… λͺ¨λ“  FTP λͺ…λ Ήμ–΄ 처리 및 μ‹€ν–‰
  • βœ… 데이터 μ—°κ²° 뢄리 (Control/Data Connection)
  • βœ… λ°”μ΄λ„ˆλ¦¬/ASCII 전솑 λͺ¨λ“œ 지원
  • βœ… 파일 μ‹œμŠ€ν…œ 연동 (디렉토리 탐색, 파일 μ‘°μž‘)
  • βœ… KILL μ‹ ν˜Έ(^C) 처리

πŸ”§ μ‹œμŠ€ν…œ μš”κ΅¬μ‚¬ν•­

ν•„μˆ˜ μš”κ΅¬μ‚¬ν•­

  • 운영체제: Linux/Unix (Ubuntu 20.04 이상 ꢌμž₯)
  • 컴파일러: GCC
  • 라이브러리: ν‘œμ€€ C 라이브러리
  • λ„€νŠΈμ›Œν¬: TCP/IP 지원

ν•„μš”ν•œ 헀더 파일

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <dirent.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

Assignment3_3_D_2020202095/
β”‚
β”œβ”€β”€ cli.c              # FTP ν΄λΌμ΄μ–ΈνŠΈ μ†ŒμŠ€ μ½”λ“œ
β”œβ”€β”€ srv.c              # FTP μ„œλ²„ μ†ŒμŠ€ μ½”λ“œ
β”œβ”€β”€ Makefile           # λΉŒλ“œ 슀크립트
β”œβ”€β”€ access.txt         # IP μ ‘κ·Ό μ œμ–΄ 파일
β”œβ”€β”€ passwd             # μ‚¬μš©μž 인증 파일
β”œβ”€β”€ ARCHITECTURE.md    # μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ λ¬Έμ„œ
└── README.md          # ν”„λ‘œμ νŠΈ μ„€λͺ…μ„œ (λ³Έ 파일)

μ£Όμš” 파일 μ„€λͺ…

cli.c

  • FTP ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž¨
  • μ‚¬μš©μž μž…λ ₯을 λ°›μ•„ FTP λͺ…λ ΉμœΌλ‘œ λ³€ν™˜ν•˜κ³  μ„œλ²„λ‘œ 전솑
  • μ„œλ²„ 응닡을 μ²˜λ¦¬ν•˜μ—¬ κ²°κ³Όλ₯Ό 좜λ ₯

srv.c

  • FTP μ„œλ²„ ν”„λ‘œκ·Έλž¨
  • ν΄λΌμ΄μ–ΈνŠΈ 연결을 λ°›μ•„ 인증 ν›„ λͺ…λ Ή 처리
  • fork()λ₯Ό μ‚¬μš©ν•œ λ™μ‹œ 닀쀑 ν΄λΌμ΄μ–ΈνŠΈ 지원

access.txt

  • ν—ˆμš©ν•  IP μ£Όμ†Œ νŒ¨ν„΄ λͺ©λ‘
  • μ™€μΌλ“œμΉ΄λ“œ(*) 지원
  • μ˜ˆμ‹œ:
    127.0.0.1
    128.134.64.*
    203.245.*.*
    

passwd

  • μ‚¬μš©μž 인증 정보 μ €μž₯ 파일
  • /etc/passwd ν˜•μ‹μœΌλ‘œ ꡬ성
  • μ‚¬μš©μžλͺ…κ³Ό λΉ„λ°€λ²ˆν˜Έ 검증에 μ‚¬μš©

πŸš€ λΉŒλ“œ 및 μ‹€ν–‰ 방법

1. ν”„λ‘œμ νŠΈ λΉŒλ“œ

# λͺ¨λ“  ν”„λ‘œκ·Έλž¨ λΉŒλ“œ
make

# λ˜λŠ” κ°œλ³„ λΉŒλ“œ
make cli    # ν΄λΌμ΄μ–ΈνŠΈλ§Œ λΉŒλ“œ
make srv    # μ„œλ²„λ§Œ λΉŒλ“œ

λΉŒλ“œ κ²°κ³Ό:

  • cli: ν΄λΌμ΄μ–ΈνŠΈ μ‹€ν–‰ 파일
  • srv: μ„œλ²„ μ‹€ν–‰ 파일

2. λΉŒλ“œ 파일 정리

make clean  # μƒμ„±λœ μ‹€ν–‰ 파일 μ‚­μ œ

3. μ„œλ²„ μ‹€ν–‰

# κΈ°λ³Έ μ‚¬μš©λ²•
./srv [포트번호]

# μ˜ˆμ‹œ: 포트 2121μ—μ„œ μ„œλ²„ μ‹€ν–‰
./srv 2121

μ„œλ²„ μ‹€ν–‰ μ‹œ μ£Όμ˜μ‚¬ν•­:

  • μ„œλ²„λŠ” μ§€μ •λœ ν¬νŠΈμ—μ„œ λŒ€κΈ° μƒνƒœλ‘œ μ‹œμž‘λ©λ‹ˆλ‹€
  • ν΄λΌμ΄μ–ΈνŠΈ 연결을 κΈ°λ‹€λ¦½λ‹ˆλ‹€
  • KILL μ‹ ν˜Έ(^C)둜 μ’…λ£Œν•©λ‹ˆλ‹€

4. ν΄λΌμ΄μ–ΈνŠΈ μ‹€ν–‰

# κΈ°λ³Έ μ‚¬μš©λ²•
./cli [μ„œλ²„IP] [포트번호]

# μ˜ˆμ‹œ: 둜컬 μ„œλ²„(포트 2121)에 μ—°κ²°
./cli 127.0.0.1 2121

ν΄λΌμ΄μ–ΈνŠΈ μ‹€ν–‰ ν›„:

  1. μ„œλ²„μ—μ„œ μ ‘κ·Ό μ œμ–΄ 확인 β†’ Welcome λ©”μ‹œμ§€ λ˜λŠ” κ±°λΆ€ λ©”μ‹œμ§€
  2. μ‚¬μš©μžλͺ… μž…λ ₯ (Input ID :)
  3. λΉ„λ°€λ²ˆν˜Έ μž…λ ₯ (Input Password :)
  4. 둜그인 성곡 μ‹œ ftp> ν”„λ‘¬ν”„νŠΈ ν‘œμ‹œ
  5. FTP λͺ…λ Ήμ–΄ μž…λ ₯

πŸ“ λͺ…λ Ήμ–΄ μ°Έμ‘°

디렉토리 및 파일 쑰회

ls

ν˜„μž¬ λ””λ ‰ν† λ¦¬μ˜ 파일 λͺ©λ‘μ„ κ°„λ‹¨νžˆ ν‘œμ‹œν•©λ‹ˆλ‹€.

ftp> ls
file1.txt
file2.txt
directory1/

ls -a

μˆ¨κΉ€ νŒŒμΌμ„ ν¬ν•¨ν•œ λͺ¨λ“  νŒŒμΌμ„ ν‘œμ‹œν•©λ‹ˆλ‹€.

ftp> ls -a
./
../
file1.txt
.hidden_file

ls -l

파일의 상세 정보λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€ (κΆŒν•œ, μ†Œμœ μž, 크기, μˆ˜μ •μΌ λ“±).

ftp> ls -l
-rw-r--r--    1 user group    1024 May 28 10:00 file1.txt
drwxr-xr-x    2 user group    4096 May 28 10:01 directory1/

ls -al λ˜λŠ” ls -la

μˆ¨κΉ€ νŒŒμΌμ„ ν¬ν•¨ν•œ 상세 정보λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

pwd

ν˜„μž¬ μž‘μ—… λ””λ ‰ν† λ¦¬μ˜ μ ˆλŒ€ 경둜λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

ftp> pwd
257 "/home/user/ftp" is current directory

디렉토리 이동 및 생성/μ‚­μ œ

cd [경둜]

μ§€μ •ν•œ λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

ftp> cd directory1
250 CWD command suceeds.

cd ..

μƒμœ„ λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

ftp> cd ..
250 CWD command suceeds.

mkdir [디렉토리λͺ…]

μƒˆ 디렉토리λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

ftp> mkdir newdir
250 MKD command performed successfully.

rmdir [디렉토리λͺ…]

빈 디렉토리λ₯Ό μ‚­μ œν•©λ‹ˆλ‹€.

ftp> rmdir olddir
250 RMD command performed successfully.

파일 μ‘°μž‘

delete [파일λͺ…]

νŒŒμΌμ„ μ‚­μ œν•©λ‹ˆλ‹€.

ftp> delete file.txt
250 DELE command performed succesfully

rename [기쑴이름] [μƒˆμ΄λ¦„]

파일 λ˜λŠ” 디렉토리 이름을 λ³€κ²½ν•©λ‹ˆλ‹€.

ftp> rename old.txt new.txt
350 File exists, ready to rename
250 RNTO command succeeds

파일 전솑

get [파일λͺ…]

μ„œλ²„μ—μ„œ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•©λ‹ˆλ‹€.

ftp> get file.txt
150 Opening binary mode data connection.
226 Complete transmission.
OK. 1024 bytes is received.

put [파일λͺ…]

ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ νŒŒμΌμ„ μ—…λ‘œλ“œν•©λ‹ˆλ‹€.

ftp> put localfile.txt
150 Opening binary mode data connection.
226 Complete transmission.
OK. 2048 bytes sent.

전솑 λͺ¨λ“œ μ„€μ •

bin λ˜λŠ” type binary

λ°”μ΄λ„ˆλ¦¬ λͺ¨λ“œλ‘œ μ „ν™˜ν•©λ‹ˆλ‹€ (κΈ°λ³Έκ°’).

ftp> bin
201 Type set to I.

ascii λ˜λŠ” type ascii

ASCII ν…μŠ€νŠΈ λͺ¨λ“œλ‘œ μ „ν™˜ν•©λ‹ˆλ‹€.

ftp> ascii
201 Type set to A.

μ’…λ£Œ

quit

FTP μ„Έμ…˜μ„ μ’…λ£Œν•˜κ³  ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž¨μ„ μ’…λ£Œν•©λ‹ˆλ‹€.

ftp> quit
221 Goodbye.

πŸ—οΈ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

μ—°κ²° ꡬ쑰

이 FTP κ΅¬ν˜„μ€ λΆ„λ¦¬λœ μ—°κ²°(Split Connection) 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€:

  1. Control Connection (μ œμ–΄ μ—°κ²°)

    • 포트: μ‚¬μš©μž μ§€μ • (예: 2121)
    • μš©λ„: FTP λͺ…λ Ήμ–΄ 전솑 및 응닡 μˆ˜μ‹ 
    • ν”„λ‘œν† μ½œ: TCP/IP
  2. Data Connection (데이터 μ—°κ²°)

    • 포트: λ™μ μœΌλ‘œ 생성 (10001~30000 λ²”μœ„μ˜ 랜덀 포트)
    • μš©λ„: 파일 데이터 및 디렉토리 λͺ©λ‘ 전솑
    • ν”„λ‘œν† μ½œ: TCP/IP
    • 생성 방식: PORT λͺ¨λ“œ (ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— 포트 정보 제곡)

λ™μ‹œμ„± 처리

μ„œλ²„λŠ” Concurrent Server λ°©μ‹μœΌλ‘œ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€:

  • fork() μ‹œμŠ€ν…œ μ½œμ„ μ‚¬μš©ν•˜μ—¬ 각 ν΄λΌμ΄μ–ΈνŠΈλ§ˆλ‹€ λ³„λ„μ˜ μžμ‹ ν”„λ‘œμ„ΈμŠ€ 생성
  • λΆ€λͺ¨ ν”„λ‘œμ„ΈμŠ€λŠ” μƒˆλ‘œμš΄ 연결을 계속 수락
  • μžμ‹ ν”„λ‘œμ„ΈμŠ€λŠ” ν•΄λ‹Ή ν΄λΌμ΄μ–ΈνŠΈμ˜ λͺ…령을 처리

인증 ν”„λ‘œμ„ΈμŠ€

1. ν΄λΌμ΄μ–ΈνŠΈ μ—°κ²° μš”μ²­
   ↓
2. μ„œλ²„: IP μ£Όμ†Œ 확인 (access.txt)
   β”œβ”€ ν—ˆμš©λœ IP β†’ Welcome λ©”μ‹œμ§€ (220)
   └─ κ±°λΆ€λœ IP β†’ μ ‘κ·Ό κ±°λΆ€ λ©”μ‹œμ§€ (431) 및 μ—°κ²° μ’…λ£Œ
   ↓
3. ν΄λΌμ΄μ–ΈνŠΈ: USER [μ‚¬μš©μžλͺ…] 전솑
   ↓
4. μ„œλ²„: μ‚¬μš©μžλͺ… 확인 (passwd 파일)
   β”œβ”€ 유효 β†’ 331 Password required
   └─ 무효 β†’ 430 Invalid username β†’ μž¬μ‹œλ„ (μ΅œλŒ€ 3회)
   ↓
5. ν΄λΌμ΄μ–ΈνŠΈ: PASS [λΉ„λ°€λ²ˆν˜Έ] 전솑
   ↓
6. μ„œλ²„: λΉ„λ°€λ²ˆν˜Έ 확인 (passwd 파일)
   β”œβ”€ 유효 β†’ 230 User logged in
   └─ 무효 β†’ 430 Invalid password β†’ μž¬μ‹œλ„ (μ΅œλŒ€ 3회)
   ↓
7. μ„Έμ…˜ μ‹œμž‘ (fork()둜 μžμ‹ ν”„λ‘œμ„ΈμŠ€ 생성)

λͺ…λ Ή 처리 흐름

1. ν΄λΌμ΄μ–ΈνŠΈ: μ‚¬μš©μž λͺ…λ Ή μž…λ ₯ (예: "ls -l")
   ↓
2. ν΄λΌμ΄μ–ΈνŠΈ: FTP λͺ…λ ΉμœΌλ‘œ λ³€ν™˜ ("NLST -l")
   ↓
3. [데이터 μ—°κ²° ν•„μš”ν•œ 경우]
   - ν΄λΌμ΄μ–ΈνŠΈ: 데이터 μ†ŒμΌ“ 생성 및 λŒ€κΈ°
   - ν΄λΌμ΄μ–ΈνŠΈ: PORT λͺ…λ ΉμœΌλ‘œ 포트 정보 전솑
   - μ„œλ²„: 200 Port command successfully
   - μ„œλ²„: ν΄λΌμ΄μ–ΈνŠΈμ˜ 데이터 μ†ŒμΌ“μ— μ—°κ²°
   ↓
4. ν΄λΌμ΄μ–ΈνŠΈ: λ³€ν™˜λœ FTP λͺ…λ Ή 전솑
   ↓
5. μ„œλ²„: λͺ…λ Ή νŒŒμ‹± 및 μ‹€ν–‰
   ↓
6. μ„œλ²„: μ‹€ν–‰ κ²°κ³Όλ₯Ό 데이터 μ—°κ²°λ‘œ 전솑 (λ˜λŠ” μ œμ–΄ μ—°κ²°λ‘œ 응닡)
   ↓
7. μ„œλ²„: μ™„λ£Œ λ©”μ‹œμ§€ 전솑 (226 Complete transmission)
   ↓
8. ν΄λΌμ΄μ–ΈνŠΈ: κ²°κ³Ό 좜λ ₯ 및 데이터 μ—°κ²° μ’…λ£Œ

πŸ” λ³΄μ•ˆ 및 μ ‘κ·Ό μ œμ–΄

IP μ ‘κ·Ό μ œμ–΄

access.txt νŒŒμΌμ— ν—ˆμš©ν•  IP μ£Όμ†Œ νŒ¨ν„΄μ„ μž‘μ„±ν•©λ‹ˆλ‹€.

ν˜•μ‹:

  • μ •ν™•ν•œ IP: 127.0.0.1
  • μ™€μΌλ“œμΉ΄λ“œ μ‚¬μš©: 128.134.64.* (128.134.64.0~255 ν—ˆμš©)
  • 닀쀑 μ™€μΌλ“œμΉ΄λ“œ: 203.245.*.*

μ˜ˆμ‹œ 파일:

127.0.0.1
128.134.64.*
128.134.57.*
128.134.54.171
203.245.*.*
*.*.0.1

μ‚¬μš©μž 인증

passwd νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ₯Ό μΈμ¦ν•©λ‹ˆλ‹€. 이 νŒŒμΌμ€ μ‹œμŠ€ν…œμ˜ /etc/passwd 파일 ν˜•μ‹μ„ λ”°λ¦…λ‹ˆλ‹€.

인증 방식:

  • μ‚¬μš©μžλͺ…κ³Ό λΉ„λ°€λ²ˆν˜Έλ₯Ό ν‰λ¬ΈμœΌλ‘œ 비ꡐ (μ‹€μ œ μ‹œμŠ€ν…œκ³Ό 달리 μ•”ν˜Έν™”λ˜μ§€ μ•ŠμŒ)
  • 둜그인 μ‹€νŒ¨ μ‹œ μ΅œλŒ€ 3νšŒκΉŒμ§€ μž¬μ‹œλ„ κ°€λŠ₯
  • 3회 μ‹€νŒ¨ μ‹œ μ„Έμ…˜ μ’…λ£Œ (530 Failed to log-in)

πŸ”„ FTP λͺ…λ Ήμ–΄ λ³€ν™˜ ν…Œμ΄λΈ”

μ‚¬μš©μž λͺ…λ Ή FTP λͺ…λ Ή μ„€λͺ…
ls NLST 파일 λͺ©λ‘ (μ΄λ¦„λ§Œ)
ls -a NLST -a μˆ¨κΉ€ 파일 포함 λͺ©λ‘
ls -l NLST -l 상세 정보 포함 λͺ©λ‘
ls -al NLST -al μˆ¨κΉ€ 파일 포함 상세 λͺ©λ‘
dir LIST 디렉토리 상세 λͺ©λ‘
pwd PWD ν˜„μž¬ μž‘μ—… 디렉토리
cd [경둜] CWD [경둜] 디렉토리 λ³€κ²½
cd .. CDUP μƒμœ„ λ””λ ‰ν† λ¦¬λ‘œ 이동
mkdir [이름] MKD [이름] 디렉토리 생성
rmdir [이름] RMD [이름] 디렉토리 μ‚­μ œ
delete [이름] DELE [이름] 파일 μ‚­μ œ
rename [old] [new] RNFR [old]
RNTO [new]
파일 이름 λ³€κ²½ (2단계)
get [파일] RETR [파일] 파일 λ‹€μš΄λ‘œλ“œ
put [파일] STOR [파일] 파일 μ—…λ‘œλ“œ
bin TYPE I λ°”μ΄λ„ˆλ¦¬ λͺ¨λ“œ
ascii TYPE A ASCII λͺ¨λ“œ
type binary TYPE I λ°”μ΄λ„ˆλ¦¬ λͺ¨λ“œ
type ascii TYPE A ASCII λͺ¨λ“œ
quit QUIT μ„Έμ…˜ μ’…λ£Œ

πŸ“Š FTP 응닡 μ½”λ“œ

이 κ΅¬ν˜„μ—μ„œ μ‚¬μš©ν•˜λŠ” μ£Όμš” FTP 응닡 μ½”λ“œ:

μ½”λ“œ 의미 μ‚¬μš© μ‹œμ 
150 데이터 μ—°κ²° μ—΄λ¦Ό 파일 전솑 λ˜λŠ” λͺ©λ‘ 전솑 μ‹œμž‘ μ „
200 λͺ…λ Ή 성곡 PORT λͺ…λ Ή 성곡 λ“±
201 νƒ€μž… μ„€μ • 성곡 TYPE λͺ…λ Ή 성곡
220 μ„œλΉ„μŠ€ 쀀비됨 μ„œλ²„ μ‹œμž‘ μ‹œ Welcome λ©”μ‹œμ§€
226 전솑 μ™„λ£Œ 파일/λͺ©λ‘ 전솑 μ™„λ£Œ
230 둜그인 성곡 인증 성곡
250 파일 μž‘μ—… 성곡 CWD, MKD, RMD, DELE λ“± 성곡
257 경둜λͺ… ν‘œμ‹œ PWD λͺ…λ Ή 응닡
331 λΉ„λ°€λ²ˆν˜Έ ν•„μš” USER λͺ…λ Ή ν›„
350 파일 쑴재, 이름 λ³€κ²½ μ€€λΉ„ RNFR λͺ…λ Ή ν›„
430 잘λͺ»λœ μ‚¬μš©μžλͺ…/λΉ„λ°€λ²ˆν˜Έ 인증 μ‹€νŒ¨
431 μ ‘κ·Ό κ±°λΆ€ IP μ ‘κ·Ό μ œμ–΄ μ‹€νŒ¨
502 λͺ…λ Ή λ―Έκ΅¬ν˜„ λ˜λŠ” 였λ₯˜ TYPE λͺ…λ Ή 였λ₯˜ λ“±
550 파일/디렉토리 μž‘μ—… μ‹€νŒ¨ 파일 μ—†μŒ, κΆŒν•œ μ—†μŒ λ“±