FTP data connection에서 파일전송 패킷의 구분...

hjsgoat의 이미지

네트워크랑 FTP에 대해 공부하고 있는 학생입니다.

wireshark로 ftp 패킷을 분석해 보고 있는데요.

궁금한 점이 생겨서 질문 올려봅니다.

우선 설명을 해보자면, FTP는 명령과 응답을 주고 받는 control connection과

실제 파일 전송을 담당하는 data connection이 나눠져 있죠.

보통 이 data connection에서 서버는 20번 포트를 사용하고,

클라이언트는 정해져있지 않은 포트로 통신을 한다고 알고 있습니다.

그래서 wireshark로 20번 포트를 사용하는 패킷을 캡쳐하면서,

파일 전송 중에 data connection에서 어떤 패킷이 오고가는지를 보고 있는데요.

data connection이 항상 실제 파일 data를 주고받는 것은 아니더라구요.

어떤 패킷은 Protocol이 FTP-DATA로 나오고, 어떤 패킷은 프로토콜이 그냥 TCP로 나오던데,

어떻게 해서 wireshark는 이렇게 프로토콜을 구분할 수 있는지 궁금하네요.

아무래도 짧은 지식으로 분석을 하려다 보니깐, 한계가 있고, 자료 찾기도 만만치 않아서 질문 올려봅니다 ^^;

powerson의 이미지


FTP에는 전송 모드가 두가지 모드가 있습니다. passive 모드와 active(이름이 정확히 기억 안 나는군요..ㅎㅎ) 모드가 있습니다. 말씀하신 것이 passive mode입니다. 20번을 data port로 사용하는거죠. active mode는 접속 전에 ip, port 정보를 줘서 data transfer하려고 하는 정보를 줍니다. 그러면, 이 정보 기반으로 접속을 해서 data transfer가 이루어지죠. 현재 wireshark로 packet dump뜬 내용은 active mode로 전송된 거 같네요. 그리고 wireshark는 active mode에 지원하기 때문에, 정확히 FTP-DATA로 인식했을 거고요. FTP RFC 문서를 보시면 해당 프로토콜에 대해서 자세히 나와 있습니다.^^

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

hjsgoat의 이미지

control connection에서 주고받는 Port 명령어를 캡쳐를 해서
어떤 포트가 data connection인지 알아내고, 해당 포트에서 오고가는 패킷들은 프로토콜을 FTP-DATA로 표시하는 것이다라는 말씀이신 것 같은데요.
active mode로 데이터 연결을 위한 포트가 설정되고 나서,
이 포트에서 오고가는 패킷 중에도
TCP 패킷과 FTP-DATA 패킷이 구분이 되더라구요.

예를 들어,

IP : 192.168.0.1 < - > 192.168.0.2
Port: 20 < - > 1111

이런 식으로 data connection이 성립이 되면,
이 connection에서 오고가는 패킷이 TCP 패킷과 FTP-DATA 패킷 두 종류로 구분이 되더라구요.
이건 data connection에서 오고가는 패킷을 분석한 결과로 보이는데,
패킷 내의 어떤 데이터를 분석해서 이런 캡쳐 결과가 뜨는지 궁금해서요 ㅎ

Necromancer의 이미지

잘못알고 계신듯
active mode의 경우 데이터 전송시 server에서 source port를 20으로 해서 client의 랜덤 포트로 접속해서 파일을 보냅니다. 반대로 passive mode는 server가 포트번호를 알려주면 client가 그 포트로 접속해서 파일을 받게 되는데 서버가 알려주는 포트번호는 랜덤입니다. (ftp 서버의 종류에 따라 이 포트번호를 특정 포트로만 하거나 특정 번호대역으로 지정하거나 할수도 있습니다)

흔히 ftp 포트라고 알려진 것들이 control 포트이고요. 데이터 포트는 위와 같이 동작합니다.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

powerson의 이미지


ㅎㅎ 그렇네요.. 반대로 기억하고 있었네요^^
ftp protocol 구현한지 1년이 넘어서 그런지 기억이 가물가물 하군요^^

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

a287848의 이미지

active 모드는 Necromancer님이 말씀하신거와 powerson 님이 말씀하신것을 혼합하면 됩니다.

Necromancer님이 active 모드에서는 ftp server 가 client의 랜덤 포트에 접속된다고 하셨는데.

active 모드에서는 클라이언트가 control port로 접속을 맺은다음에 port 명령어로 자신의 listen socket port번호를

을 알려줘야합니다. 그래야 열린 포트를 알수가 있겠죠.

passive 모드는 client 쪽에서 열린 포트가 firewall 등에 의해 막혀있을수 있으니

server 쪽에서 포트를 두개열고 listen해주는 것이고요.

직접 보고 싶으시다면

server 측에 wireshark로 packet을 수집하게 하시고요

client 에서 nc 명령어로 server control port 에 접속하고 직접 명령어를 쳐보시면됩니다.

http://slacksite.com/other/ftp.html#active
http://slacksite.com/other/ftp.html#passive

참고하시면되고요

wireshark 의 입장에서는 FTP control 포트로 port 명령어만 보면 data port에 대한 정보를 알수 있겠죠.

Dig it.

Dig it.

익명 사용자의 이미지

ftp 구현하려고 하는데

파일을 전송받으면 이 패킷을 분석해야하잖아요..

이 패킷 구성에 관한 표준 프로토콜을 알고 싶은데

어디 볼 수 있는 곳 없어요??

powerson의 이미지


ㅎㅎ 글쎄요.. 이건 wireshart에서 어떤식으로 표현하느냐의 문제로 보입니다. 간단히 생각해보면, 이미 data connection session에 대해서는 알고 있기 때문에, packet이 data가 실려 있다면, FTP-DATA로 표현하고, 단순히 acknowledge packet 등 header 정보만 실린 패킷이라면 TCP 패킷으로 표현했을거 같습니다. 이건 header를 통해서 data size를 알아보면 간단한 문제이니깐요.. 이걸 정확하게 알아보시려면, wireshark를 분석해보시면 될 거 같습니다.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

------------------------------------------------------
아직은 젊다. 모든 것을 할 수 있는 나이란 말이지.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.