이번 시간에는 파이썬을 이용하여 간단하게 FTP 클라이언트를 구현해보자. 실습하기 앞서 먼저 FTP 서비스가
구동 중인 FTP 서버가 있어야한다. 일단 FTP 서버가 있다는 가정하에 진행하도록 하자. 만역 FTP 서비스가 설정되어 있지 않다면 설정을 한 후 실습을 하자.
먼저 위 사진과 같이 접속한다 이때 tmp 디렉토리에서 FTP 서버에 접속한다면 이 후 데이터를 다운로드할 경우 tmp 디렉토리에 저장된다. 이처럼 FTP 서버에 접속할 경우 데이터를 다운로드할 위치에서 시작하도록 한다.
사진과 같이 데비안 FTP 서버에 접속하면 vsFTPd 3.0.3과 같은 내용을 볼 수 있다.(FTP 소프트웨어 이름/버전 정보임)
그 다음 자신의 우분투 계정 ID와PW를 입력하여 접속하게 되면 230 Login successful같이 인증에 성공한다.
그리고 맨 아래 "using binary mode to transfer files" 표시에서와 같이 바이너리 모드에서 사용할 수 있는 상태이기도 한다.
ftp에 정상적으로 접속하고 목록을 출력해보자. 그리고 FTP 서버 접속 종료 명령어는 bye 또는 exit 명령어를 입력해도 접속을 종료 할 수 있다.
위 사진과 같이 해당 모듈인 ftplib.py를 호출한다. ftplib 모듈은 FTP 동작과 관련해 다양한 함수를 제공한다.
다음과 같이 FTP 클래스에서 생성된 ftp 객체를 통해 FTP 서버에 접속한 뒤 getwelcome() 함수를 통해 vsFTPd 3.0.3과 같은 내용을 출력했다.
그렇다면 인증 정보 처리는 어떻게 할까? 다음과 같이 입력하면 된다.
.login() 함수를 이용하면 된다. 만약 login() 함수에 아무런 매개 변수가 없다면 익명 접속을 의미한다. 다시 말해 매개 변수가 없는 ftp.login() 설정은 ftp.login(user="anonymous", passwd="") 설정과 동일하다.
이번에는 파이썬 코드로 목록을 출력하는 코드를 만들어 보자 dir() 함수를 이용해 반복문으로 출력한 결과가 바로 해당 부분이다. 그리고 ftp.quit()를 이용하여 FTP 서버 접속을 종료할 수 있다.
자 이제 그럼 지금 까지 설명한 내용을 기반으로 .py파일을 만들어 코드를 작성해보자. 위 사진이 방금 설명한 내용을 기반으로 한 코드이다.
python3 ftp.py를 실행하여 해당 결과 값을 확인한다.
다음 sendcmd() 함수를 이용해 FTP 서버에 접속 한 뒤 현재 위치를 출력해주는 코드를 작성해보자.
코드는 위 사진과 같다. sendcmd() 함수에 PWD라는 매개 변수를 이용해 현재 위치를 출력해주면 된다.
pwd()함수를 이용해도 현재 위치를 출력할 수 있다. 해당 함수들은 ftplib 모듈에서 제공하는 것 들이다. 참고하자
실행 결과 pwd 명려어로 현재 위치를 출력하듯이 동일한 실행 결과를 얻을 수 있다.
지금까지 주로 FTP 서버에 접속해 실행하는 과정을 설명했다. 이번에는 FTP 서버에서 파일 목록을 가져오는 코드를 구현해보자.
먼저 nlst() 함수 기능을 알아야 한다. nlst() 함수 기능은 FTP 서버에 접속한 뒤 해당 디렉토리에 있는 파일 목록을 수신한다. 이때 매개 변수가 없으면 현재 디렉토리의 파일 목록을 수신한다. 이전에 dir() 함수를 이용해 해당 디렉토리에 있는 파일 목록을 확인한 적이 있다. 이런 점에서 nlst() 함수는 dir() 함수를 더욱 간단하게 구현한 구조라고 할 수 있다. nlst() 함수를 이용하요 간단하게 코드를 작성해보자.
※ FTP이름.nlst(argument[, ...]): FTP서버에서 파일 목록을 가져온다. argument에 아무것도 넣지 않을 경우, 현재 폴더의 파일목록을 가져온다.
nlst() 함수를 이용하여 FTP 서버 파일 목록 가져오기.
실행 결과 nlst() 함수를 이용해 FTP 서버 파일 목록이 정상적으로 출력되었다.
'TCP IP 파이썬 활용' 카테고리의 다른 글
원시 소켓 방식에 따른 헤더의 생성 (0) | 2020.07.07 |
---|---|
원시 소켓 방식에 따른 헤더의 생성 (0) | 2020.07.07 |
TCP 소켓 서버/클라이언트 구현 - 기초 개념 다지기 (0) | 2020.06.15 |
socket 모듈을 이용해 UDP 서버/클라이언트 구현 (0) | 2020.06.10 |
socket 모듈을 이용해 소켓의 개념과 객체 생성 방법 (0) | 2020.06.09 |
댓글